{ "info": { "author": "Patrick Zhao", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython" ], "description": "Python Data Classes\n===================\n\nPython Data Classes support Python 2 and 3 with many human-friendly features.\n\nThis project has been tested in Python 2.7 and Python 3.4+.\nIt is not related to the ``dataclasses`` module introduced in Python 3.7.\n\n\nFeature Support\n---------------\n\nPython Data Classes generally support\n\n- untyped data, typed data, and typed data list\n- arbitrary attribute names in the dictionary input\n- no python attribute naming conflict or pollution\n- lazy and auto object creation on-the-fly\n- lazy loading of the dict input (default: enabled)\n- synchronous updates of the dict input (default: disabled)\n\n\nGetting Started\n---------------\n\n- Install the Python Data Classes\n\n.. code-block::\n\n pip install pydataclasses\n\n\n- Create the Python Data Classes\n\n.. code-block:: python\n\n from pydataclasses import DataClass\n\n\n class TT(DataClass):\n\n attr = None\n\n\n class ONCE(DataClass):\n\n data = None\n\n\n class TWICE(ONCE):\n\n tear = TT\n tears = [TT]\n\n def __init__(self, *args, **kwargs):\n\n super(TWICE, self).__init__(*args, **kwargs)\n\n self.pair = TWICE\n self.pairs = [TWICE]\n\n\n- Play with the Python Data Classes\n\n.. code-block:: python\n\n old_data = 'hello'\n new_data = 'world'\n old_dict = {'data': old_data}\n new_dict = {'data': new_data}\n\n # lazy and auto object creation on-the-fly\n twice = TWICE()\n assert twice.pairs[1].tear.attr is None\n twice.pairs[1].tear.attr = old_data\n assert old_data == twice.pairs[1].tear.attr\n\n # lazy loading of the dict input (default: enabled)\n twice = TWICE(old_dict)\n assert old_data == twice.data\n assert old_dict == twice.__as_dict__(dict, 0)\n\n # synchronous updates of the dict input (default: disabled)\n assert old_dict != new_dict\n twice = TWICE(old_dict, __sync__=True)\n twice.data = new_data\n assert old_dict == new_dict\n\n\nBest Practices\n---------------\n\nPlease\n\n- read and refer to ``pydataclasses.utils.JSONData`` as an example\n- put a tailored subclass between ``pydataclasses`` and your project\n- write (or copy from ``pydataclasses``) as many tests as possible for this subclass\n\n.. code-block:: python\n\n from pydataclasses import DataClass\n\n\n class ProjectDataClass(DataClass):\n\n def as_dict(self, dict_class=OrderedDict):\n return self.__as_dict__(dict_class, 0)\n\n\n.. :changelog:\n\nRelease History\n---------------\n\n1.0.1 (2019-05-04)\n++++++++++++++++++\n\n- Bump the version again\n\n1.0.1 (2019-05-04)\n++++++++++++++++++\n\n- Bump the version\n\n1.0.0 (2019-05-04)\n++++++++++++++++++\n\n- Support the annotations of native dataclasses\n\n0.0.2 (2018-08-28)\n++++++++++++++++++\n\n- Fix the python packaging issues\n- Add the tox, pylint, pytest, coverage tools\n\n0.0.1 (2018-08-26)\n++++++++++++++++++\n\n- Birthday\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/shzhao17/pydataclasses", "keywords": "", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "pydataclasses", "package_url": "https://pypi.org/project/pydataclasses/", "platform": "", "project_url": "https://pypi.org/project/pydataclasses/", "project_urls": { "Homepage": "https://github.com/shzhao17/pydataclasses" }, "release_url": "https://pypi.org/project/pydataclasses/1.0.2/", "requires_dist": [ "six", "typing" ], "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,<4", "summary": "Python Data Classes", "version": "1.0.2" }, "last_serial": 5221082, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "d82edaee69fc4bdff884eff2aaf1319a", "sha256": "5426e1df8c3a030d8ca39b97fabfd59f2e378ced5c4d7d93b9daa4d3fb5a5b0e" }, "downloads": -1, "filename": "pydataclasses-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d82edaee69fc4bdff884eff2aaf1319a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7, >=3.6", "size": 9066, "upload_time": "2018-08-26T14:40:02", "url": "https://files.pythonhosted.org/packages/bf/9d/7806c3f7a2e1e853d76aae2b19c1ef451f3c9a03b8e86d2b70fd76ee777e/pydataclasses-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "be27849023b04c96ebcfcebc6e683c46", "sha256": "4996bd1ec2e4623d75688f59aaf5dfc36e9dfcc8b3650d58587e7221cb1177b3" }, "downloads": -1, "filename": "pydataclasses-0.0.1.tar.gz", "has_sig": false, "md5_digest": "be27849023b04c96ebcfcebc6e683c46", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, >=3.6", "size": 9808, "upload_time": "2018-08-26T14:40:04", "url": "https://files.pythonhosted.org/packages/93/f5/6221fc4c0855e5314441dfdfc3c3a22c429b544be271d729e3868b8f7a16/pydataclasses-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "2df99fb7ca8b2565042774ff1305ddc3", "sha256": "c2081a9c5792d648ccefd3fd80c270fc2c587ba53e6c16160ea6884dfa8b700e" }, "downloads": -1, "filename": "pydataclasses-0.0.2.tar.gz", "has_sig": false, "md5_digest": "2df99fb7ca8b2565042774ff1305ddc3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,<4", "size": 18784, "upload_time": "2018-08-28T16:40:26", "url": "https://files.pythonhosted.org/packages/d2/f7/23ff63eac992533a275b8086f7036cf94b942089f6b753be88b1cce2e68f/pydataclasses-0.0.2.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "bb95f74760372aa482b4bc656390cd5e", "sha256": "31174f0f030dcb514ee0a5ce0e2529d667015305878c9bc4d732c0b582b389fa" }, "downloads": -1, "filename": "pydataclasses-1.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "bb95f74760372aa482b4bc656390cd5e", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,<4", "size": 13015, "upload_time": "2019-05-03T09:22:42", "url": "https://files.pythonhosted.org/packages/89/4c/2126bc5f69325cbe64b9f432e2be84a80ba15161653b501349f26a075553/pydataclasses-1.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c16dafbe19631620990c182d8038aa9c", "sha256": "631771c9c3146503076e673e2e33a89ae05fa695500159b15fe241ba0a23fe4a" }, "downloads": -1, "filename": "pydataclasses-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c16dafbe19631620990c182d8038aa9c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,<4", "size": 13015, "upload_time": "2019-05-03T09:29:09", "url": "https://files.pythonhosted.org/packages/fb/ed/69f5c44d194d3cb71877fdc8de3cbbe571dd689f037e9b83b6cb03d4e8dc/pydataclasses-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b508eb8968c62739c8e04cdafc0bbae4", "sha256": "d2f5f5419368abae4b068c5ad6adf53b4f6a7014c081d73a233b0e38374ae412" }, "downloads": -1, "filename": "pydataclasses-1.0.1.tar.gz", "has_sig": false, "md5_digest": "b508eb8968c62739c8e04cdafc0bbae4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,<4", "size": 18583, "upload_time": "2019-05-03T09:22:43", "url": "https://files.pythonhosted.org/packages/70/a7/6262657162166e01bc01fc35afa88011496392e0410e11b7890cf9f69bd8/pydataclasses-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "50fdf8224da9419e3e253af2c78f4103", "sha256": "bdf1da95e3f6e24ad02cf3f3da91767c08e1fd7f51d845a08bb543d319ad6765" }, "downloads": -1, "filename": "pydataclasses-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "50fdf8224da9419e3e253af2c78f4103", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,<4", "size": 13026, "upload_time": "2019-05-03T09:30:38", "url": "https://files.pythonhosted.org/packages/7f/47/73090af1542892989d4ae181a60fc31f83d0472003f94f2778e5beca778c/pydataclasses-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "65adf90808ae3c5dc5c546bf9ca1a320", "sha256": "a9ee3de69d18c0a46ab790a844154b2ed8f4b109176b0590b456441305bcc2de" }, "downloads": -1, "filename": "pydataclasses-1.0.2.tar.gz", "has_sig": false, "md5_digest": "65adf90808ae3c5dc5c546bf9ca1a320", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,<4", "size": 18795, "upload_time": "2019-05-03T09:30:40", "url": "https://files.pythonhosted.org/packages/82/e7/9a8d3fdca8b9c1a4b349f56d534b65b6b90b917aacc705eaf67a8505308e/pydataclasses-1.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "50fdf8224da9419e3e253af2c78f4103", "sha256": "bdf1da95e3f6e24ad02cf3f3da91767c08e1fd7f51d845a08bb543d319ad6765" }, "downloads": -1, "filename": "pydataclasses-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "50fdf8224da9419e3e253af2c78f4103", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,<4", "size": 13026, "upload_time": "2019-05-03T09:30:38", "url": "https://files.pythonhosted.org/packages/7f/47/73090af1542892989d4ae181a60fc31f83d0472003f94f2778e5beca778c/pydataclasses-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "65adf90808ae3c5dc5c546bf9ca1a320", "sha256": "a9ee3de69d18c0a46ab790a844154b2ed8f4b109176b0590b456441305bcc2de" }, "downloads": -1, "filename": "pydataclasses-1.0.2.tar.gz", "has_sig": false, "md5_digest": "65adf90808ae3c5dc5c546bf9ca1a320", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,<4", "size": 18795, "upload_time": "2019-05-03T09:30:40", "url": "https://files.pythonhosted.org/packages/82/e7/9a8d3fdca8b9c1a4b349f56d534b65b6b90b917aacc705eaf67a8505308e/pydataclasses-1.0.2.tar.gz" } ] }