{ "info": { "author": "Max Woerner Chase", "author_email": "max.chase@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Operating System :: Unix", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Utilities" ], "description": "========\nOverview\n========\n\n\n\nCode generators for immutable structured data, including algebraic data types, and functions to destructure them.\nStructured Data provides three public modules: ``structured_data.adt``, ``structured_data.match``, and ``structured_data.data``.\n\nThe ``adt`` module provides base classes and an annotation type for converting a class into algebraic data types.\n\nThe ``match`` module provides a ``Pattern`` class that can be used to build match structures, and a ``Matchable`` class that wraps a value, and attempts to apply match structures to it.\nIf the match succeeds, the bindings can be extracted and used.\nIt includes some special support for ``adt`` subclasses.\n\nThe match architecture allows you tell pull values out of a nested structure:\n\n.. code-block:: python3\n\n structure = (match.pat.a, match.pat.b[match.pat.c, match.pat.d], 5)\n my_value = (('abc', 'xyz'), ('def', 'ghi'), 5)\n matchable = match.Matchable(my_value)\n if matchable(structure):\n # The format of the matches is not final.\n print(matchable['a']) # ('abc', 'xyz')\n print(matchable['b']) # ('def', 'ghi')\n print(matchable['c']) # 'def'\n print(matchable['d']) # 'ghi'\n\nThe subscript operator allows binding both the outside and the inside of a structure.\nIndexing a ``Matchable`` is forwarded to a ``matches`` attribute, which is ``None`` if the last match was not successful, and otherwise contains an instance of a custom mapping type, which allows building the matched values back up into simple structures.\n\nThe ``Sum`` base class exists to create classes that do not necessarily have a single fixed format, but do have a fixed set of possible formats.\nThis lowers the maintenance burden of writing functions that operate on values of a ``Sum`` class, because the full list of cases to handle is directly in the class definition.\n\nHere are implementations of common algebraic data types in other languages:\n\n.. code-block:: python3\n\n class Maybe(adt.Sum, typing.Generic[T]):\n\n Just: adt.Ctor[T]\n Nothing: adt.Ctor\n\n\n class Either(adt.Sum, typing.Generic[E, R]):\n\n Left: adt.Ctor[E]\n Right: adt.Ctor[R]\n\nThe ``data`` module provides classes based on these examples.\n\n* Free software: MIT license\n\nHow Can I Help?\n===============\n\nCurrently, this project has somewhat high quality metrics, though some of them have been higher.\nI am highly skeptical of this, because I've repeatedly given in to the temptation to code to the metrics.\nI can't trust the metrics, and I know the code well enough that I can't trust my own judgment to figure out which bits need to be improved and how.\nI need someone to review the code and identify problem spots based on what doesn't make sense to them.\nThe issues are open.\n\nShould I Use This?\n==================\n\nUntil there's a major version out, probably not.\n\nThere are several alternatives in the standard library that may be better suited to particular use-cases:\n\n- The ``namedtuple`` factory creates tuple classes with a single structure; the ``typing.NamedTuple`` class offers the ability to include type information. The interface is slightly awkward, and the values expose their tuple-nature easily. (NOTE: In Python 3.8, the fast access to namedtuple members means that they bypass user-defined ``__getitem__`` methods, thereby allowing factory consumers to customize indexing without breaking attribute access. It looks like it does still rely on iteration behavior for various convenience methods.)\n- The ``enum`` module provides base classes to create finite enumerations. Unlike NamedTuple, the ability to convert values into an underlying type must be opted into in the class definition.\n- The ``dataclasses`` module provides a class decorator that converts a class into one with a single structure, similar to a namedtuple, but with more customization: instances are mutable by default, and it's possible to generate implementations of common protocols.\n- The Structured Data ``adt`` decorator is inspired by the design of ``dataclasses``. (A previous attempt used metaclasses inspired by the ``enum`` module, and was a nightmare.) Unlike ``enum``, it doesn't require all instances to be defined up front; instead each class defines constructors using a sequence of types, which ultimately determines the number of arguments the constructor takes. Unlike ``namedtuple`` and ``dataclasses``, it allows instances to have multiple shapes with their own type signatures. Unlike using regular classes, the set of shapes is specified up front.\n- If you want multiple shapes, and don't want to specify them ahead of time, your best bet is probably a normal tree of classes, where the leaf classes are ``dataclasses``.\n\nInstallation\n============\n\n::\n\n pip install structured-data\n\nDocumentation\n=============\n\nhttps://python-structured-data.readthedocs.io/\n\nDevelopment\n===========\n\nTo run the all tests run::\n\n tox\n\n\nChangelog\n=========\n\nUnreleased\n----------\n\n0.13.0 (2019-09-29)\n-------------------\n\nAdded\n~~~~~\n\n- ``match.function`` and ``match.Property`` decorators for Haskell-style function definitions.\n\nFixed\n~~~~~\n- Accessing data descriptors on ``Sum`` and ``Product`` instances.\n\n0.12.1 (2019-09-04)\n-------------------\n\nAdded\n~~~~~\n\n- Product classes can make use of custom ``__new__``.\n\n0.12.0 (2019-09-03)\n-------------------\n\nAdded\n~~~~~\n\n- Product base class\n\nChanged\n~~~~~~~\n\n- Improved documentation of some match constructors.\n- Exposed ``MatchDict`` type, so it gets documented.\n- Converted the ``adt`` decorator to a ``Sum`` base class.\n\nRemoved\n~~~~~~~\n\n- ``Guard`` type removed in favor of user-defined validation functions.\n\n0.11.1 (2019-03-23)\n-------------------\n\nChanged\n~~~~~~~\n\n- Restore proper behavior of ``__new__`` overrides.\n\n0.11.0 (2019-03-23)\n-------------------\n\nChanged\n~~~~~~~\n\n- Consider all overrides of checked dunder methods, not just those in the decorated class.\n\n0.10.1 (2019-03-22)\n-------------------\n\nAdded\n~~~~~\n\n- A non-ergonomic but simple wrapper class for use by the typing plugin. It's not available to runtime code.\n\n0.10.0 (2019-03-21)\n-------------------\n\nChanged\n~~~~~~~\n\n- Actually, the facade was working, I was just confused. Restored the facade.\n\n0.9.0 (2019-03-20)\n------------------\n\nChanged\n~~~~~~~\n\n- Removed the facade.\n- Added stability guarantee to Ctor.\n\n0.8.0 (2019-03-19)\n------------------\n\nChanged\n~~~~~~~\n\n- Rewrote the facade.\n\n0.7.0 (2019-03-19)\n------------------\n\nChanged\n~~~~~~~\n\n- Tried to put up a facade for type analysis. It didn't work.\n\n0.6.1 (2019-03-18)\n------------------\n\nAdded\n~~~~~\n\n- ``Bind`` class for attaching extra data to a match structure.\n- PEP 561 support.\n\nChanged\n~~~~~~~\n\n- As-patterns are now formed with indexing instead of the ``@`` operator.\n- ``AttrPattern`` and ``DictPattern`` now take keyword arguments instead of a ``dict`` argument, and form new versions of themselves with an ``alter`` method.\n- Actually. Change ``DictPattern`` back, stop trying to keep these things in synch.\n\n0.6.0 (2018-07-27)\n------------------\n\nAdded\n~~~~~\n\n- ``AttrPattern`` and ``DictPattern`` classes that take a ``dict`` argument and perform destructuring match against arbitrary objects, and mappings, respectively.\n\nChanged\n~~~~~~~\n\n- Added special handling for matching AsPatterns against different AsPatterns. This is subject to change, as it's definitely an edge case.\n\n0.5.0 (2018-07-22)\n------------------\n\nAdded\n~~~~~\n\n- ``Matchable`` class is now callable and indexable. Calling is forwarded to the ``match`` method, and indexing forwards to the ``matches`` attribute, if it exists, and raises an error otherwise.\n- ``Matchable`` class now has custom coercion to bool: ``False`` if the last match attempt failed, ``True`` otherwise.\n\nChanged\n~~~~~~~\n\n- Renamed ``enum`` to ``adt`` to avoid confusion.\n- Renamed ``ValueMatcher`` to ``Matchable``.\n- ``Matchable.match`` now returns the ``Matchable`` instance, which can then be coerced to ``bool``, or indexed directly.\n\n0.4.0 (2018-07-21)\n------------------\n\nAdded\n~~~~~\n\n- Mapping class especially for match values. It's capable of quickly and concisely pulling out groups of variables, but it also properly supports extracting just a single value.\n- Mapping class can now index from a ``dict`` to a ``dict``, in order to support ``**kwargs`` unpacking.\n\nFixed\n~~~~~\n\n- A bug (not present in any released version) that caused the empty tuple target to accept any tuple value. This is included partly because this was just such a weird bug.\n\nRemoved\n~~~~~~~\n\n- Unpublished the ``MatchFailure`` exception type, and the ``desugar`` function.\n\n0.3.0 (2018-07-15)\n------------------\n\nAdded\n~~~~~\n\n- Simpler way to create match bindings.\n- Dependency on the ``astor`` library.\n- First attempt at populating the annotations and signature of the generated constructors.\n- ``data`` module containing some generic algebraic data types.\n- Attempts at monad implementations for ``data`` classes.\n\nChanged\n~~~~~~~\n\n- Broke the package into many smaller modules.\n- Switched many attributes to use a ``WeakKeyDictionary`` instead.\n- Moved prewritten methods into a class to avoid defining reserved methods at the module level.\n- When assigning equality methods is disabled for a decorated class, the default behavior is now ``object`` semantics, rather than failing comparison and hashing with a ``TypeError``.\n- The prewritten comparison methods no longer return ``NotImplemented``.\n\nRemoved\n~~~~~~~\n\n- Ctor metaclass.\n\n0.2.1 (2018-07-13)\n------------------\n\nFixed\n~~~~~\n\n- Removed an incorrect classifier. This code cannot run on pypy.\n\n0.2.0 (2018-07-13)\n------------------\n\nAdded\n~~~~~\n\n- Explicit ``__bool__`` implementation, to consider all constructor instances as truthy, unless defined otherwise.\n- Python 3.7 support.\n\nChanged\n~~~~~~~\n\n- Marked the enum constructor base class as private. (``EnumConstructor`` -> ``_EnumConstructor``)\n- Switched scope of test coverage to supported versions. (Python 3.7)\n\nRemoved\n~~~~~~~\n\n- Support for Python 3.6 and earlier.\n- Incidental functionality required by supported Python 3.6 versions. (Hooks to enable restricted subclassing.)\n\n0.1.0 (2018-06-10)\n------------------\n\n- First release on PyPI.\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/mwchase/python-structured-data", "keywords": "", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "structured-data", "package_url": "https://pypi.org/project/structured-data/", "platform": "", "project_url": "https://pypi.org/project/structured-data/", "project_urls": { "Homepage": "https://github.com/mwchase/python-structured-data" }, "release_url": "https://pypi.org/project/structured-data/0.13.0/", "requires_dist": [ "astor" ], "requires_python": ">=3.7", "summary": "Code generators for immutable structured data, including algebraic data types, and functions to destructure them.", "version": "0.13.0" }, "last_serial": 5904343, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "b61ad3c32ca5266f80551b0a39f77c83", "sha256": "cb140ba9635f39afe4622630941705756856fa9c11efd5b4a8b6f7bc42b79902" }, "downloads": -1, "filename": "structured_data-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b61ad3c32ca5266f80551b0a39f77c83", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7722, "upload_time": "2018-06-10T16:54:47", "url": "https://files.pythonhosted.org/packages/fe/4c/f707222f582fae21a0f7f8d2f2e164754f5a3b174825b427f93308ecc8b4/structured_data-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "363a18deabae1705be7de33fc34bccee", "sha256": "fd6c703b954e87f91b1d5273df17b3baa31964f8fe55c4d191465a7225437b88" }, "downloads": -1, "filename": "structured-data-0.1.0.tar.gz", "has_sig": false, "md5_digest": "363a18deabae1705be7de33fc34bccee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19217, "upload_time": "2018-07-13T17:11:11", "url": "https://files.pythonhosted.org/packages/33/f6/727888c96492fda3986055c4b9d8162de07dd490eea5642934b2c0289d9a/structured-data-0.1.0.tar.gz" } ], "0.10.0": [ { "comment_text": "", "digests": { "md5": "39f5442c4286c6af2169946a587a3e62", "sha256": "1200626de0ed60bb0a485afe17a54e68a1cfe8ec0bdd469440a6753ebb356464" }, "downloads": -1, "filename": "structured_data-0.10.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "39f5442c4286c6af2169946a587a3e62", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 18490, "upload_time": "2019-03-21T11:04:36", "url": "https://files.pythonhosted.org/packages/0e/50/8c4f51183df5f7d25377017010c265f9179dd96e596e2d1cda0b0e783f1f/structured_data-0.10.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0fc06a99a707188fc9d48b9ae91dce7c", "sha256": "88a28d4da039acd899cf8ba60f1ced2ddd092272152f96de6f804599ff1dbe8d" }, "downloads": -1, "filename": "structured-data-0.10.0.tar.gz", "has_sig": false, "md5_digest": "0fc06a99a707188fc9d48b9ae91dce7c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 36246, "upload_time": "2019-03-21T11:04:37", "url": "https://files.pythonhosted.org/packages/5c/62/5de321c415922cc764cc24812b3258fa9f422d98c62a057441a93ad88228/structured-data-0.10.0.tar.gz" } ], "0.10.1": [ { "comment_text": "", "digests": { "md5": "36e03763060a6846601956a64db6e657", "sha256": "097cd1913d585d971b5b7cca67a1a2760dacc89664e6453d28a27901988ccfcf" }, "downloads": -1, "filename": "structured_data-0.10.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "36e03763060a6846601956a64db6e657", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 18676, "upload_time": "2019-03-23T01:38:04", "url": "https://files.pythonhosted.org/packages/0f/a8/853d80f7dcf1fe925e2f1d186f93df22d995a5bb8dcb541ce7d117452299/structured_data-0.10.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0abaf92e34430d5d60d2c2dbc9caac6c", "sha256": "0864dd14eb5fc92cff63063520b8c44f1341c14948ed6f8389ccf91b1270981c" }, "downloads": -1, "filename": "structured-data-0.10.1.tar.gz", "has_sig": false, "md5_digest": "0abaf92e34430d5d60d2c2dbc9caac6c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 36486, "upload_time": "2019-03-23T01:38:05", "url": "https://files.pythonhosted.org/packages/d2/79/70f96501ee3081bdae916c38e16d14eb8ee54feed0037f1c7b9b21fa9322/structured-data-0.10.1.tar.gz" } ], "0.11.0": [ { "comment_text": "", "digests": { "md5": "ce28770c95ad700688d57bd6b71846d5", "sha256": "33d739fbe5f7792d8ec5eaf41e29813564a1615bc0e8932c708a19d03af1002d" }, "downloads": -1, "filename": "structured_data-0.11.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ce28770c95ad700688d57bd6b71846d5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 18743, "upload_time": "2019-03-24T03:22:09", "url": "https://files.pythonhosted.org/packages/4a/26/c968074b2e318a36627f8317506bd5ae5bae02496606aa7f9285b490bc75/structured_data-0.11.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9eaaca7ab0ae99ab36e7e65505f2c7cb", "sha256": "cb80bb0f9e52902b6780c66ca3567a03eb099ae1777fab159dc36c211a593011" }, "downloads": -1, "filename": "structured-data-0.11.0.tar.gz", "has_sig": false, "md5_digest": "9eaaca7ab0ae99ab36e7e65505f2c7cb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 36588, "upload_time": "2019-03-24T03:22:11", "url": "https://files.pythonhosted.org/packages/db/82/549eeb29c14f440a5bbeee95fee2f64927ca3a36abe41793144d88a37ed2/structured-data-0.11.0.tar.gz" } ], "0.11.1": [ { "comment_text": "", "digests": { "md5": "c58e841ece81b8f56d637de5225a6eb3", "sha256": "3eb64c0edb8b42ddc2fd7e9f8d73b7d139afc7b4e57bd4c92a9af1c861684c76" }, "downloads": -1, "filename": "structured_data-0.11.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c58e841ece81b8f56d637de5225a6eb3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 18754, "upload_time": "2019-03-24T03:50:50", "url": "https://files.pythonhosted.org/packages/ed/19/c307c953d47c466f4d80c961d0c3c75a0800c6604523b37cdb0ddace5330/structured_data-0.11.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6bb67a898c08f4d5249175a669932847", "sha256": "b97b2a3f1b8b3b88d1c842726ed624cfd9cdee0ae2922564eed05cd6ba759878" }, "downloads": -1, "filename": "structured-data-0.11.1.tar.gz", "has_sig": false, "md5_digest": "6bb67a898c08f4d5249175a669932847", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 36626, "upload_time": "2019-03-24T03:50:52", "url": "https://files.pythonhosted.org/packages/93/85/874786647369e30194d35270e50503283642c7e2ab25c589868d4f36588a/structured-data-0.11.1.tar.gz" } ], "0.12.0": [ { "comment_text": "", "digests": { "md5": "02ccd44ddd86bb970546db7437879f43", "sha256": "77b7822cebdeba286a2dfbc0b9b179acc3cb7865e18d7074cede63d1383cd79b" }, "downloads": -1, "filename": "structured_data-0.12.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "02ccd44ddd86bb970546db7437879f43", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 28983, "upload_time": "2019-09-04T02:17:44", "url": "https://files.pythonhosted.org/packages/37/2a/88a7ee9dab52dc1520bd2bc148be0a289053340cfe06690db8daf80a5c9c/structured_data-0.12.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "61903a2c3b6c3949fd5639c61a2def8c", "sha256": "d9de5532f8d1520032681edab06ecb2c2d5c390eb34a2a22e796f18e3748f3d7" }, "downloads": -1, "filename": "structured-data-0.12.0.tar.gz", "has_sig": false, "md5_digest": "61903a2c3b6c3949fd5639c61a2def8c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 46912, "upload_time": "2019-09-04T02:17:46", "url": "https://files.pythonhosted.org/packages/c1/cf/f8f4e779f3ec63bb9ce670406e74fc278efda9e2c4bc72658996de2df8f4/structured-data-0.12.0.tar.gz" } ], "0.12.1": [ { "comment_text": "", "digests": { "md5": "cd815baa4df7c55ac2cd83afff800e2e", "sha256": "2d1b6bf5180dbe0052fafaa9823fece7a36d7624aca29f6c9a34aae8333b9e84" }, "downloads": -1, "filename": "structured_data-0.12.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cd815baa4df7c55ac2cd83afff800e2e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 29063, "upload_time": "2019-09-04T19:38:04", "url": "https://files.pythonhosted.org/packages/81/b9/15adb2c65adc2b41bd270971c80e0369e1e8bc7f25564d932ff8e983745c/structured_data-0.12.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "16cbe1681e0ce3f2791b737e79029238", "sha256": "21734dd00236b7c28598ae8a009823344ec58552bac409059912d831ecf58e1b" }, "downloads": -1, "filename": "structured-data-0.12.1.tar.gz", "has_sig": false, "md5_digest": "16cbe1681e0ce3f2791b737e79029238", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 47118, "upload_time": "2019-09-04T19:38:23", "url": "https://files.pythonhosted.org/packages/88/70/b58298b1c3b569a7a363c81f28180618b500c312cdd3522f31653411488d/structured-data-0.12.1.tar.gz" } ], "0.13.0": [ { "comment_text": "", "digests": { "md5": "1f27fca7d371c088acafe4fe00d85aa6", "sha256": "50b3706f61feb023640355006c38502288f1584c6f9fcde44267b5a32dccc98e" }, "downloads": -1, "filename": "structured_data-0.13.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1f27fca7d371c088acafe4fe00d85aa6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 35857, "upload_time": "2019-09-30T01:42:26", "url": "https://files.pythonhosted.org/packages/bb/d7/aa6cfb3799ee536edd74bee9d549bc2af8dd374ae727e71a34fdcbc95fe8/structured_data-0.13.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "04cbb8e43fb909550454d181b06f7a0d", "sha256": "39900d389bc9a106c84d67eaa141756a6b6e36fb7394b022163327eaaaec017b" }, "downloads": -1, "filename": "structured-data-0.13.0.tar.gz", "has_sig": false, "md5_digest": "04cbb8e43fb909550454d181b06f7a0d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 52967, "upload_time": "2019-09-30T01:42:28", "url": "https://files.pythonhosted.org/packages/eb/cf/551b647e81461823a289cd24e6ffa1cab5e49de7ed93394ed0150694f678/structured-data-0.13.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "9f910c16820c20c7c70d6e2d0ca650df", "sha256": "662e973b3b5859d94f09d9945fe56b746d54d1f7822ce7c59816453b9a844e06" }, "downloads": -1, "filename": "structured_data-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9f910c16820c20c7c70d6e2d0ca650df", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 6316, "upload_time": "2018-07-13T17:11:10", "url": "https://files.pythonhosted.org/packages/40/80/44e3a2631ad03ebc38194a62caafb3ec1edce67e9bc119f067cd4772f93b/structured_data-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8cc3dda0101776d228a05e5fae08b860", "sha256": "f74c84990a96193a3242e5097fc32ec442f31f0fdac6bcc9147ed269d1b417db" }, "downloads": -1, "filename": "structured-data-0.2.0.tar.gz", "has_sig": false, "md5_digest": "8cc3dda0101776d228a05e5fae08b860", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 20072, "upload_time": "2018-07-13T17:11:12", "url": "https://files.pythonhosted.org/packages/9a/87/abb241be6f00f47644f53b321631191dda3ed31c587b000a9a6be12594ec/structured-data-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "2195e119afde243ea675b088f462bb9b", "sha256": "dd7af6d49d3c536eecfc6b5c508bcb647a558b2192dd3f6b8328db026262b12e" }, "downloads": -1, "filename": "structured_data-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2195e119afde243ea675b088f462bb9b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 6307, "upload_time": "2018-07-13T17:16:58", "url": "https://files.pythonhosted.org/packages/9d/4a/45b519b0f4c212389052dd6f738cac711d29cdd8f65fe4f65e42aa22f0df/structured_data-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9419b890d4273d3e07deb5e75e815423", "sha256": "9f2fe0fb499f9290cd6319d4e3bef0e95c5af9df5cba8a7e7ce3116bcb8b11ef" }, "downloads": -1, "filename": "structured-data-0.2.1.tar.gz", "has_sig": false, "md5_digest": "9419b890d4273d3e07deb5e75e815423", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 20054, "upload_time": "2018-07-13T17:16:59", "url": "https://files.pythonhosted.org/packages/cd/69/deea0bc32623a9d70f477fa4727bf78e6487dd39c3cbfa47d1a83dcf36e7/structured-data-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "aeec2e2c8415cc534030eb4d39e688ce", "sha256": "5c53ad532abad33fb65419a97217be6514429b81d4966f4a17b39a0ffaf4dfe9" }, "downloads": -1, "filename": "structured_data-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "aeec2e2c8415cc534030eb4d39e688ce", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 10990, "upload_time": "2018-07-16T02:51:13", "url": "https://files.pythonhosted.org/packages/63/ec/89647e5fa8694a25988aad8bc7523ff1587edd028abfc34ec8d3ae65c93f/structured_data-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0241dbc009f763c7a25ba32a9772583f", "sha256": "7ce3053007fb36fff0b48c088514667e1c1b3bbdc488335aae68932785777bc7" }, "downloads": -1, "filename": "structured-data-0.3.0.tar.gz", "has_sig": false, "md5_digest": "0241dbc009f763c7a25ba32a9772583f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 27054, "upload_time": "2018-07-16T02:51:15", "url": "https://files.pythonhosted.org/packages/4f/c3/9892b12c9823fb1d11ad7c8da38f448bd7bebb7b6140ee1ea55891e72d68/structured-data-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "b59b879759e07793175b26d0ad41483f", "sha256": "43e1a594ed45abc81aecbe74946878663fbe996fda736da80b4e7fa149a97569" }, "downloads": -1, "filename": "structured_data-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b59b879759e07793175b26d0ad41483f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 12114, "upload_time": "2018-07-22T04:01:13", "url": "https://files.pythonhosted.org/packages/f5/cc/f43a27cb418d5ef7750dc540e6cdcc28775cb2045ac88fe98477090b191b/structured_data-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bead81d8c1c4b54144bbf08f41503f89", "sha256": "5ac64521bf29396e3c3c1512c28f46f59c319e19b090f0991568f0db5483d6ff" }, "downloads": -1, "filename": "structured-data-0.4.0.tar.gz", "has_sig": false, "md5_digest": "bead81d8c1c4b54144bbf08f41503f89", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 30545, "upload_time": "2018-07-22T04:01:14", "url": "https://files.pythonhosted.org/packages/d9/7f/13b72d5b5e819dca1fbd56946a21fc369ea7e2a20cf00ac0b86ef260fc64/structured-data-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "e627809b2cad1461b3387336beda79be", "sha256": "64e3544b360bbcb0be9c7baea7269a14c0aa157f08bbc5815f3e4e64cae2fb72" }, "downloads": -1, "filename": "structured_data-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e627809b2cad1461b3387336beda79be", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 12359, "upload_time": "2018-07-22T15:16:10", "url": "https://files.pythonhosted.org/packages/2b/1e/51fe560a2068aed0e2800c4deb7097c026347f4477ae33a78fa2bfae40c6/structured_data-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "acbf84016645547f2ab1c6b5df89d35a", "sha256": "aa7d2131ab510fac1ce82a5068af34b9aa06cd6a8974fc16177728ac74d1334b" }, "downloads": -1, "filename": "structured-data-0.5.0.tar.gz", "has_sig": false, "md5_digest": "acbf84016645547f2ab1c6b5df89d35a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 33985, "upload_time": "2018-07-22T15:16:13", "url": "https://files.pythonhosted.org/packages/d1/70/da87a8bb93a8516101e855b5cb78bbafd50d13b0d1d61ef5ef5818bcc63c/structured-data-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "592fb16f8b2037a82b3ae5020f3e8f97", "sha256": "bb82f3c7dffbec2bc87b3b9b2842e44a93f567d4b4f7c01eab6a6fa1a2e2d99d" }, "downloads": -1, "filename": "structured_data-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "592fb16f8b2037a82b3ae5020f3e8f97", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 13341, "upload_time": "2018-07-27T20:30:14", "url": "https://files.pythonhosted.org/packages/df/2a/a28e717c6f98e72d5fb1242c150975cb96b6b52c0281f14e3779522ea038/structured_data-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f2f215ee6c34492afb5da7a19de6f9df", "sha256": "b1d65bb523a07e7ce692f3da639a7d3fc67986b3ebefdfae3096b3eb8b230237" }, "downloads": -1, "filename": "structured-data-0.6.0.tar.gz", "has_sig": false, "md5_digest": "f2f215ee6c34492afb5da7a19de6f9df", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 32680, "upload_time": "2018-07-27T20:30:15", "url": "https://files.pythonhosted.org/packages/e7/8f/1b3ad4dda1a44c5a9c869f6d1640c274034c626a96b6347939547573b3b7/structured-data-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "9b588e7d1597023d02a65396472b042b", "sha256": "68e8898da9182de967b01f5aa29eb542150e308bd6cb28bfee5f9cb6c1adad14" }, "downloads": -1, "filename": "structured_data-0.6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9b588e7d1597023d02a65396472b042b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 18239, "upload_time": "2019-03-19T01:44:28", "url": "https://files.pythonhosted.org/packages/d0/1a/da39d392f406744a882b539b0b31201c1695fc51e32f6478c7379748657d/structured_data-0.6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6a2999b11f5ff479c03bfaa8365206d0", "sha256": "31987b4e31df72825241a9e482cf10b2b6ba92eb083acd385f0819d8d7440a7e" }, "downloads": -1, "filename": "structured-data-0.6.1.tar.gz", "has_sig": false, "md5_digest": "6a2999b11f5ff479c03bfaa8365206d0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 35786, "upload_time": "2019-03-19T01:44:30", "url": "https://files.pythonhosted.org/packages/f9/cd/d5b798d74cfb4597bb78d500e762421cbf09e94313f73b49a94ed95ea31b/structured-data-0.6.1.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "b8871aec17278a1a3b3ef259c02b024f", "sha256": "4cb898e39df58cec4ed9459c06819158fa9b62fc7875316eed7e6c993a746f6a" }, "downloads": -1, "filename": "structured_data-0.7.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b8871aec17278a1a3b3ef259c02b024f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 18332, "upload_time": "2019-03-19T16:30:07", "url": "https://files.pythonhosted.org/packages/24/7e/9d4b25705cce0954f8e273ae43333ecc277bb243e57fe46b187280b441d8/structured_data-0.7.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5b18b754ac3f43d40960b38fc2818cd3", "sha256": "32c598beff1bcb35fbab73c556cec0631c715133412e965ad9d651d86004f32b" }, "downloads": -1, "filename": "structured-data-0.7.0.tar.gz", "has_sig": false, "md5_digest": "5b18b754ac3f43d40960b38fc2818cd3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 35928, "upload_time": "2019-03-19T16:30:09", "url": "https://files.pythonhosted.org/packages/53/fc/cfa237e786e65f321a9d0a8624e449fcca32b501ef43100bf0a0332e33c7/structured-data-0.7.0.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "8ae1821cc667a438eacf6b596d0bc372", "sha256": "fc6181ee115b8a87cd83c9a02b5ad6338f2d234b3522d7af97ef3bcd4109bfaf" }, "downloads": -1, "filename": "structured_data-0.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8ae1821cc667a438eacf6b596d0bc372", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 18390, "upload_time": "2019-03-19T20:27:17", "url": "https://files.pythonhosted.org/packages/61/bf/9c1a7ddff452ff4c1e316159ad3c7f3a8dc7bf8a56847b11ae903802fc54/structured_data-0.8.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "40c32e47f818747dd9e7658ee6341be5", "sha256": "d1c258baf55331e49668aea1013dc73076c1e4a11a53e958c810bec78b87b1e8" }, "downloads": -1, "filename": "structured-data-0.8.0.tar.gz", "has_sig": false, "md5_digest": "40c32e47f818747dd9e7658ee6341be5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 36046, "upload_time": "2019-03-19T20:27:18", "url": "https://files.pythonhosted.org/packages/3f/50/5cd1214252d470482158ac6f088a172e55d45b54c03231ef7b7e82866458/structured-data-0.8.0.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "1cdb89a6e2fda1853d38ecaca6f2a559", "sha256": "61bebc565c1dc76584f48adf75f86bd4807c492571ca89992165dd812cb04afa" }, "downloads": -1, "filename": "structured_data-0.9.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1cdb89a6e2fda1853d38ecaca6f2a559", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 18494, "upload_time": "2019-03-21T02:50:39", "url": "https://files.pythonhosted.org/packages/81/59/3fcbae326489e3b679c56f2beeeb52b98b5edb077dcb7c1c646b33e7ea2b/structured_data-0.9.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ed095da912a790ad975303c264b49fec", "sha256": "96649da1af3539bb553263486991f190ad0833f5823f303cfdad03ca094edbf8" }, "downloads": -1, "filename": "structured-data-0.9.0.tar.gz", "has_sig": false, "md5_digest": "ed095da912a790ad975303c264b49fec", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 36210, "upload_time": "2019-03-21T02:50:41", "url": "https://files.pythonhosted.org/packages/33/ee/4d6023fd748ed7ef017c8313e6e492b9692909a9043161530239c34c5dc1/structured-data-0.9.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1f27fca7d371c088acafe4fe00d85aa6", "sha256": "50b3706f61feb023640355006c38502288f1584c6f9fcde44267b5a32dccc98e" }, "downloads": -1, "filename": "structured_data-0.13.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1f27fca7d371c088acafe4fe00d85aa6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 35857, "upload_time": "2019-09-30T01:42:26", "url": "https://files.pythonhosted.org/packages/bb/d7/aa6cfb3799ee536edd74bee9d549bc2af8dd374ae727e71a34fdcbc95fe8/structured_data-0.13.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "04cbb8e43fb909550454d181b06f7a0d", "sha256": "39900d389bc9a106c84d67eaa141756a6b6e36fb7394b022163327eaaaec017b" }, "downloads": -1, "filename": "structured-data-0.13.0.tar.gz", "has_sig": false, "md5_digest": "04cbb8e43fb909550454d181b06f7a0d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 52967, "upload_time": "2019-09-30T01:42:28", "url": "https://files.pythonhosted.org/packages/eb/cf/551b647e81461823a289cd24e6ffa1cab5e49de7ed93394ed0150694f678/structured-data-0.13.0.tar.gz" } ] }