{ "info": { "author": "Jazeps Basko", "author_email": "jazeps.basko@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries" ], "description": "+++++++++++++++\nStrictus Dictus\n+++++++++++++++\n\n.. code-block:: shell\n\n pip install strictus-dictus\n\n\n``StrictusDictus`` (aka ``sdict``) is a base class for special ``dict`` sub-classes, instances of which only accept\nkeys that are declared in the class's type hints.\n\nThis is useful for data transfer object definitions, for example, when you are expressing someone else's\nJSON or YAML schema in your code and want to access the contents of the parsed dictionaries using dot notation\nand have your IDE auto-complete the attribute names.\n\n``sdict`` is suitable for nested structures.\n\n.. code-block:: python\n\n from strictus_dictus import sdict\n\n class Header(sdict):\n title: str = \"Hello, world!\" # default value\n sent: str\n\n class Tag(sdict):\n value: str\n\n class Message(sdict):\n header: Header\n body: str\n tags: List[Tag]\n\n source = {\n \"header\": {\n \"sent\": \"2018-10-20 18:09:42\",\n },\n \"body\": \"What is going on?\",\n \"tags\": [\n {\n \"value\": \"unread\",\n },\n ],\n }\n\n # Parse the message\n message = Message(source)\n\n # Access attributes\n assert message.header.title == \"Hello, world!\"\n assert message.tags[0].value == \"unread\"\n\n # It still is a dictionary so this works too:\n assert message[\"header\"][\"title\"] == \"Hello, world!\"\n\n # Convert back to a standard dictionary\n message.to_dict()\n\n\nThe values of these keys are accessible as attributes with dot notation as well as with ``[]`` notation,\nhowever, if the source dictionary is missing the key, ``StrictusDictus`` will not introduce it so access\nvia ``[]`` notation will raise a ``KeyError`` as expected.\nHowever, the attribute will be initialised to hold the special ``EMPTY`` value.\n\nTo create an instance use ``YourClass(standard_dict)`` and to export to a standard dictionary\nuse ``YourClass().to_dict()``.\n\nOnly a limited set of type hints are supported by ``StrictusDictus``. Unsupported type hints will\nbe silently ignored and values will be returned unprocessed.\n\nSupported type hints are (``SD`` denotes any class inheriting from ``StrictusDictus``):\n\n\n.. code-block:: python\n\n class Examples:\n x1: primitive_type # could be any type, but not from typing.*; value won't be processed\n x2: List # unprocessed list\n x3: Dict # unprocessed dictionary\n x4: SD\n x5: List[SD]\n x6: Dict[str, SD]\n\n\nYou can annotate x with ``List[Any]`` and ``Dict[Any, Any]``, but the values won't be processed\nby ``StrictusDictus``.\n\nLimitations\n-----------\n\n* An ``sdict`` sub-class cannot reference itself in its type hints (not even with forward references).\n\n\nDataclasses?\n------------\n\nDataclass is a great building block, but it doesn't treat dictionaries seriously.\n\n.. code-block:: python\n\n @dataclasses.dataclass\n class Point:\n x: float\n y: float\n\n @dataclasses.dataclass\n class Line:\n start: Point\n end: Point\n\n line = Line(**{\"start\": {\"x\": 1, \"y\": 1}, \"end\": {\"x\": 5, \"y\": 5}})\n\nI would expect ``line.end.y`` to hold value ``5`` , but that's not the case. In fact, ``print(line.end.y)``\nraises an ``AttributeError``:\n\n.. code-block:: python\n\n AttributeError: 'dict' object has no attribute 'y'\n\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jbasko/strictus-dictus", "keywords": "dictionary schema attribute attrdict type hinting typing annotations", "license": "MIT", "maintainer": "Jazeps Basko", "maintainer_email": "jazeps.basko@gmail.com", "name": "strictus-dictus", "package_url": "https://pypi.org/project/strictus-dictus/", "platform": "", "project_url": "https://pypi.org/project/strictus-dictus/", "project_urls": { "Homepage": "https://github.com/jbasko/strictus-dictus" }, "release_url": "https://pypi.org/project/strictus-dictus/0.0.12/", "requires_dist": [ "typing-inspect", "dataclasses; python_version==\"3.6\"" ], "requires_python": ">=3.6.0", "summary": "Strictus Dictus", "version": "0.0.12" }, "last_serial": 4516373, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "83cd1db7f79e1e83b7369337f3c42254", "sha256": "6811358d7c97a54ca7c4f5b10e6d7861e6b2618f7ba27871999963e40f36719b" }, "downloads": -1, "filename": "strictus_dictus-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "83cd1db7f79e1e83b7369337f3c42254", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 2405, "upload_time": "2018-10-21T17:25:38", "url": "https://files.pythonhosted.org/packages/68/84/3207e243e8cdfc7478654185ec4a0787f12553ae93dd5ea6880cf17c5468/strictus_dictus-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b387f90f5539f54ee9b8a95f3a142d33", "sha256": "5a3afffdbcd2c7c1a3ea94d0d571a6885a1a772137c8858977dcae2fcf058330" }, "downloads": -1, "filename": "strictus-dictus-0.0.1.tar.gz", "has_sig": false, "md5_digest": "b387f90f5539f54ee9b8a95f3a142d33", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 2738, "upload_time": "2018-10-21T17:25:39", "url": "https://files.pythonhosted.org/packages/05/51/68baccd5c2adef0fe87333a53b8ed9324edf559a4bf1d4a7af55dda4aaf3/strictus-dictus-0.0.1.tar.gz" } ], "0.0.10": [ { "comment_text": "", "digests": { "md5": "b63c89ab705623a8f1b2c880725204d2", "sha256": "920f2c206257a63d95f544f536478e5c2cf0644f3788823ae6b2d9283b105a32" }, "downloads": -1, "filename": "strictus-dictus-0.0.10.macosx-10.13-x86_64.tar.gz", "has_sig": false, "md5_digest": "b63c89ab705623a8f1b2c880725204d2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 7944, "upload_time": "2018-11-01T10:53:16", "url": "https://files.pythonhosted.org/packages/a8/96/9cf76bccbf13a3968f842318b508f4762f8a0c989700d417a49a220e4997/strictus-dictus-0.0.10.macosx-10.13-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "474c4bd63d1e91ec234fcd8f9caaf459", "sha256": "60e8ae450ff7c94d52e956281fa92e51300c05c30d19861adde9eb1e30d87201" }, "downloads": -1, "filename": "strictus_dictus-0.0.10-py3-none-any.whl", "has_sig": false, "md5_digest": "474c4bd63d1e91ec234fcd8f9caaf459", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 5263, "upload_time": "2018-11-01T10:53:14", "url": "https://files.pythonhosted.org/packages/e8/16/0a941fd85c1c3f4628f3ae39f88ebaa71786660e4a4a48d469ba2c54739f/strictus_dictus-0.0.10-py3-none-any.whl" } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "47e284513d843c95172cec9257a9c163", "sha256": "69377eb506b0e4ae303568d722240b1ffe42bc7fd385766714656c6954d8265a" }, "downloads": -1, "filename": "strictus_dictus-0.0.12-py3-none-any.whl", "has_sig": false, "md5_digest": "47e284513d843c95172cec9257a9c163", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 5049, "upload_time": "2018-11-22T10:36:43", "url": "https://files.pythonhosted.org/packages/33/39/d0d1d331a1f6f159e8143dc0346f413fd6813cfe3faf4bc269ebcd7ea0a9/strictus_dictus-0.0.12-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "13dee98e433c33fd466f23d1180c5769", "sha256": "cbef15010006ec3154266e60abdc5dd8ea6bd0f5a46c65c633d9c8b617c64e93" }, "downloads": -1, "filename": "strictus-dictus-0.0.12.tar.gz", "has_sig": false, "md5_digest": "13dee98e433c33fd466f23d1180c5769", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 5217, "upload_time": "2018-11-22T10:36:45", "url": "https://files.pythonhosted.org/packages/d6/9b/a43c3a6236c57f0d3cb9d9039e6bc138474f2957a7c18ce719a55caab441/strictus-dictus-0.0.12.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "2867a3e39543816228df76fd6388c556", "sha256": "cb8cd7cafe2666325a6f0dcb92b7e8fe51993621537d762395ce1358de106f81" }, "downloads": -1, "filename": "strictus-dictus-0.0.2.macosx-10.13-x86_64.tar.gz", "has_sig": false, "md5_digest": "2867a3e39543816228df76fd6388c556", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 6340, "upload_time": "2018-10-22T10:42:47", "url": "https://files.pythonhosted.org/packages/2c/28/4edee190a5e423c2a4a08a415ef47a6b83ebe96fec622c78abf903fe2adb/strictus-dictus-0.0.2.macosx-10.13-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "1b1635a63442bcb2cda42f9899cc434c", "sha256": "3ea216674890b967168c577f7d57b289ed590c7d95e30446d4d626acd093b3a1" }, "downloads": -1, "filename": "strictus_dictus-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "1b1635a63442bcb2cda42f9899cc434c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 4583, "upload_time": "2018-10-22T10:42:45", "url": "https://files.pythonhosted.org/packages/52/bc/b1dd2d42dc8c412ee3d620dfa97103d8c912170806544d01f2085bf925de/strictus_dictus-0.0.2-py3-none-any.whl" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "75c010d6ce446fe3ac008c8523b6f859", "sha256": "240ae6bfb94dbcbe61af29b13f9bc26f260d309b6dcec157b5040a80212566cd" }, "downloads": -1, "filename": "strictus-dictus-0.0.3.macosx-10.13-x86_64.tar.gz", "has_sig": false, "md5_digest": "75c010d6ce446fe3ac008c8523b6f859", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 6356, "upload_time": "2018-10-23T13:48:45", "url": "https://files.pythonhosted.org/packages/cf/d0/45f26549258d19320598dd7e94d61d6e17415cf15f8bb7f8e8001c9daeff/strictus-dictus-0.0.3.macosx-10.13-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "aaa48b45aa0f195d6858bb559bcb185c", "sha256": "57d54520e091282dbe68b9b70a57ad7ce8956e21e0a7f415a928832a98decb25" }, "downloads": -1, "filename": "strictus_dictus-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "aaa48b45aa0f195d6858bb559bcb185c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 4586, "upload_time": "2018-10-23T13:48:44", "url": "https://files.pythonhosted.org/packages/45/fd/695e5ed49b2404ba4608cf5e2c83e408193f8a3f0e68effd63a26b006fdd/strictus_dictus-0.0.3-py3-none-any.whl" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "85b578c8570da2bbd287c199155d00e3", "sha256": "cf1b362dbe8c754ac03c53fd0f7e10f7e04e1ab05dffe520f1dd4696e42fe12f" }, "downloads": -1, "filename": "strictus_dictus-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "85b578c8570da2bbd287c199155d00e3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 4663, "upload_time": "2018-10-23T19:37:02", "url": "https://files.pythonhosted.org/packages/0b/6f/28ebe4c683cf1f5a7873d3c366a516e65e075fb8f789a718ac9fbff92272/strictus_dictus-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "319e28d6a47b5c5f6321c77c20b029c5", "sha256": "20e0e40fe2ac900f7e03cc8c222d60d129d5e6677030f5b093dd21cf9d35ec02" }, "downloads": -1, "filename": "strictus-dictus-0.0.4.tar.gz", "has_sig": false, "md5_digest": "319e28d6a47b5c5f6321c77c20b029c5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 4354, "upload_time": "2018-10-23T19:37:03", "url": "https://files.pythonhosted.org/packages/3f/07/44f0bfe12f101a532104b0e7f61229d718afe86c80a5b66828ca1444a0b0/strictus-dictus-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "e08710e39bee70fe4f25d7d438da8f59", "sha256": "a6e7ccf088062d21a1b8398cca3df41622ac0fa6cd8d77c23c5dcf1cb4559b4c" }, "downloads": -1, "filename": "strictus-dictus-0.0.5.macosx-10.13-x86_64.tar.gz", "has_sig": false, "md5_digest": "e08710e39bee70fe4f25d7d438da8f59", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 6727, "upload_time": "2018-10-24T14:48:45", "url": "https://files.pythonhosted.org/packages/7a/01/531bb87a3f8aa60feadc14deaa9befc7a7e298d99fa8545535aed1eb75a6/strictus-dictus-0.0.5.macosx-10.13-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "422ac9c8d8207c2e7129eefd6c0b17e4", "sha256": "3a520c51013ddefe96f64a7de27fcc121aae3adada670f4781721c08d81365e6" }, "downloads": -1, "filename": "strictus_dictus-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "422ac9c8d8207c2e7129eefd6c0b17e4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 4744, "upload_time": "2018-10-24T14:48:44", "url": "https://files.pythonhosted.org/packages/df/5c/5c86cff843eeff52899a87771efa4840fd0f40aeee501ae8e0d83b1dbebd/strictus_dictus-0.0.5-py3-none-any.whl" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "976549a04cddcc0308bb6d632f5246de", "sha256": "e39c18fd97f1fc837c69fbb2ae35b6c75b2a4bea253d4e61c60b5ca4b269b955" }, "downloads": -1, "filename": "strictus_dictus-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "976549a04cddcc0308bb6d632f5246de", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 4749, "upload_time": "2018-10-25T17:31:36", "url": "https://files.pythonhosted.org/packages/71/de/8c9db30bc74832b1f5594255da50a8304b450908249a6c8db2707ef8b8f9/strictus_dictus-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aaf2521c1ef14d9d85de89bb726a6463", "sha256": "ff0eb166be987391aaa49788c9943677e930296bbc459cdf94e83a5afa458eff" }, "downloads": -1, "filename": "strictus-dictus-0.0.6.tar.gz", "has_sig": false, "md5_digest": "aaf2521c1ef14d9d85de89bb726a6463", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 4504, "upload_time": "2018-10-25T17:31:37", "url": "https://files.pythonhosted.org/packages/ae/ac/630ff445737e1ba81b900c59262b1fcfc7e11ebb41d98e818c86955dde6c/strictus-dictus-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "202b2bb28482ddee189d4238e81a7bb8", "sha256": "9e1c8a8b7a833508dc1393fb55f9ff4ce0636656c24c0886261b736e42539f4d" }, "downloads": -1, "filename": "strictus-dictus-0.0.7.macosx-10.13-x86_64.tar.gz", "has_sig": false, "md5_digest": "202b2bb28482ddee189d4238e81a7bb8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 7349, "upload_time": "2018-10-30T19:58:20", "url": "https://files.pythonhosted.org/packages/78/2a/a73da22e08159319d66db1fd0e3aadb0d266ed77249b71b345b9c127d6bc/strictus-dictus-0.0.7.macosx-10.13-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "635a32597ee003a2f227d7fcbe2183cc", "sha256": "1d5e9310788176e30bae6c0c29d4a5e4415d3846ef076efc49d7c951fcc67a49" }, "downloads": -1, "filename": "strictus_dictus-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "635a32597ee003a2f227d7fcbe2183cc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 5057, "upload_time": "2018-10-30T19:58:18", "url": "https://files.pythonhosted.org/packages/e0/7a/9a23731947760e1d6264b1978c316380fd0b133a3c186f6a39d148ceb60a/strictus_dictus-0.0.7-py3-none-any.whl" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "e35b5b547c5a518c97e118b6e901238a", "sha256": "4d45759e0a683caf3466f8fb27d54af88149128e6ba414e49e596d395aeea2c4" }, "downloads": -1, "filename": "strictus-dictus-0.0.8.macosx-10.13-x86_64.tar.gz", "has_sig": false, "md5_digest": "e35b5b547c5a518c97e118b6e901238a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 7442, "upload_time": "2018-10-31T11:24:12", "url": "https://files.pythonhosted.org/packages/9e/f9/edc0d7b2ce1dbe4178843e14e5a23da1e0be18f5af5cc04ac417bcab845b/strictus-dictus-0.0.8.macosx-10.13-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "2c1fa0f5e3c0f5c3c36ebb59b3ff144d", "sha256": "b4772f19fe4cbf810aa739cfa6413ddf28a85aeb7c1f0f03ab3d890830daccd7" }, "downloads": -1, "filename": "strictus_dictus-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "2c1fa0f5e3c0f5c3c36ebb59b3ff144d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 5099, "upload_time": "2018-10-31T11:24:10", "url": "https://files.pythonhosted.org/packages/89/8a/e668f35fcb806534b5dc100247b5b00451c47a2a174bfc84ef1306b3485e/strictus_dictus-0.0.8-py3-none-any.whl" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "92b83ae3001c6d2fbce5fe2f5a428dfe", "sha256": "a52c0d5164a5c1472e5547ad40ca6738f0f39b6a037cba721fbd11bde5701d22" }, "downloads": -1, "filename": "strictus-dictus-0.0.9.macosx-10.13-x86_64.tar.gz", "has_sig": false, "md5_digest": "92b83ae3001c6d2fbce5fe2f5a428dfe", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 7818, "upload_time": "2018-10-31T11:58:31", "url": "https://files.pythonhosted.org/packages/b0/06/d9c7ed3128e3854c7b746ed79ee60d90302f133faa00ef63e2071d8cf18e/strictus-dictus-0.0.9.macosx-10.13-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "39c667a7204e45fe9b58aa288e9ca5da", "sha256": "43162b6613ce6d7b13316c9032aecaf7a41b15ff1ffd2e87dba661a7e858217d" }, "downloads": -1, "filename": "strictus_dictus-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "39c667a7204e45fe9b58aa288e9ca5da", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 5218, "upload_time": "2018-10-31T11:58:30", "url": "https://files.pythonhosted.org/packages/a1/42/14e60db7e27af5adbc291094172f5c19eb86ef4ea847b8e8fedc7c3c9fde/strictus_dictus-0.0.9-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "47e284513d843c95172cec9257a9c163", "sha256": "69377eb506b0e4ae303568d722240b1ffe42bc7fd385766714656c6954d8265a" }, "downloads": -1, "filename": "strictus_dictus-0.0.12-py3-none-any.whl", "has_sig": false, "md5_digest": "47e284513d843c95172cec9257a9c163", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 5049, "upload_time": "2018-11-22T10:36:43", "url": "https://files.pythonhosted.org/packages/33/39/d0d1d331a1f6f159e8143dc0346f413fd6813cfe3faf4bc269ebcd7ea0a9/strictus_dictus-0.0.12-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "13dee98e433c33fd466f23d1180c5769", "sha256": "cbef15010006ec3154266e60abdc5dd8ea6bd0f5a46c65c633d9c8b617c64e93" }, "downloads": -1, "filename": "strictus-dictus-0.0.12.tar.gz", "has_sig": false, "md5_digest": "13dee98e433c33fd466f23d1180c5769", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 5217, "upload_time": "2018-11-22T10:36:45", "url": "https://files.pythonhosted.org/packages/d6/9b/a43c3a6236c57f0d3cb9d9039e6bc138474f2957a7c18ce719a55caab441/strictus-dictus-0.0.12.tar.gz" } ] }