{ "info": { "author": "Pawel", "author_email": "inne.poczta@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3 :: Only", "Topic :: Software Development :: Libraries" ], "description": "data\\_object\n============\n\nDescription:\n------------\n\nSimple base class for creating data object (it means objects, dedicated\nto storing data only). It's a little bit similar to `case\nclass `__ from\nScala. Using it as base class, You don't need to take care of data\nobjects boilerplate (like \\_\\_str\\_\\_, \\_\\_eq\\_\\_, \\_\\_hash\\_\\_\nmethods). Main features: \\* Objects are considered to be equal based on\npublic fields (method with names started with \\_ are not took into\naccount) values instead of object identity \\* \\_\\_str\\_\\_ and\n\\_\\_repr\\_\\_ methods return values based on public fields \\* Static\nmethod for creating instances from dictionary. Main difference to dict\nunpacking is that all non matching keys are ignored and default values\nare supported \\* there are two base classes: **DataObject** and\n**ImmutableDataObject**. The second on creates immutable object (so\nvalue assigned once to field, cannot be changed)\n\n**WARNING:** > In future version default behavior may change. It's still\nunder consideration, whether two different classes with the same set of\nfields and values should be equal\n\nInstall\n-------\n\n``pip install data_object``\n\nUsage\n-----\n\nDataObject\n^^^^^^^^^^\n\n.. code:: python\n\n from data_object import DataObject\n\n\n class CustomClass(DataObject):\n class_member = 'XYZ'\n\n def __init__(self, foo, bar):\n self.foo = foo\n self.bar = bar\n\n @property\n def other(self):\n return 'ABC'\n\nStr and Repr:\n\n\n.. code:: python\n\n a = CustomClass('a', 'b')\n print(a) # output: CustomClass: {\"bar\": b, \"class_member\": XYZ, \"foo\": a, \"other\": ABC}\n print(repr(a)) # output: CustomClass(bar=b, class_member=XYZ, foo=a, other=ABC)\n\nEquality and Hash\n\n\n.. code:: python\n\n class OtherClass(DataObject):\n def __init__(self, foo, bar):\n self.foo = foo\n self.bar = bar\n\n a = CustomClass('a', 'b')\n b = CustomClass('a', 'b')\n c = CustomClass('a', 'z')\n d = OtherClass('a', 'b')\n\n a == b # True\n a == c # False\n a == d # True\n\n z = set()\n z.add(a)\n z.add(b)\n z.add(c)\n z.add(d)\n print(z) # output: {CustomClass(bar=z, foo=a), CustomClass(bar=b, foo=a)}\n\nCreating instances from dict\n\n\n.. code:: python\n\n class OtherClass(DataObject):\n def __init__(self, a, b, c='xyz'):\n self.a = a\n self.b = b\n self.c = c\n\n params1 = {'a': 'aaa', 'b': 'bbb', 'c': 'ccc'}\n params2 = {'a': 'xxx', 'b': 'yyy'}\n params3 = {'a': 'xxx'}\n\n inst1 = OtherClass.from_dict(params1)\n inst2 = OtherClass.from_dict(params2)\n inst3 = OtherClass.from_dict(params3, none_if_not_found=True)\n\n print(inst1) # output: OtherClass: {\"a\": aaa, \"b\": bbb, \"c\": ccc}\n print(inst2) # output: OtherClass: {\"a\": xxx, \"b\": yyy, \"c\": xyz}\n print(inst3) # output: OtherClass: {\"a\": xxx, \"b\": None, \"c\": xyz}\n\nCopy instance (especially useful for immutable objects)\n\n\n.. code:: python\n\n primary_inst = CustomClass(foo='abc', bar='xyz')\n inst1 = primary_inst.copy()\n inst2 = primary_inst.copy(bar='aaa')\n inst3 = primary_inst.copy(bar='aaa', other='some')\n\n print(repr(primary_inst)) # output: CustomClass(bar=xyz, foo=abc)\n print(repr(inst1)) # output: CustomClass(bar=xyz, foo=abc)\n print(repr(inst2)) # output: CustomClass(bar=aaa, foo=abc)\n print(repr(inst3)) # output: CustomClass(bar=aaa, foo=abc)\n\nImmutableDataObject\n^^^^^^^^^^^^^^^^^^^\n\n.. code:: python\n\n from data_object import ImmutableDataObject\n\n class CustomImmutableClass(ImmutableDataObject):\n def __init__(self, foo, bar):\n self.foo = foo\n self.bar = bar\n\n inst = CustomImmutableClass('abc', 'xyz')\n print(inst) # output: CustomImmutableClass: {\"bar\": xyz, \"foo\": abc}\n\n inst.foo = 'aaa'\n\nwill produce exception:\n\n::\n\n Traceback (most recent call last):\n ...\n data_object.exceptions.ImmutableObjectViolation: Changing attributes not permitted for immutable object\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/PawelJ-PL/data_object", "keywords": "Python data object case class boilerplate dto", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "data-object", "package_url": "https://pypi.org/project/data-object/", "platform": "", "project_url": "https://pypi.org/project/data-object/", "project_urls": { "Homepage": "https://github.com/PawelJ-PL/data_object" }, "release_url": "https://pypi.org/project/data-object/1.5.0/", "requires_dist": [ "coverage; extra == 'test'", "nose; extra == 'test'", "flake8; extra == 'test'" ], "requires_python": ">=3", "summary": "Base class for data objects", "version": "1.5.0" }, "last_serial": 3766928, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "5b0f4f91171dc6c0d6c3e5c067a82559", "sha256": "11094c4b724ada81dc98bc9b1fa56af4204483ce6204bf72aeae6c46787a7cd2" }, "downloads": -1, "filename": "data_object-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5b0f4f91171dc6c0d6c3e5c067a82559", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 8731, "upload_time": "2018-01-22T22:14:34", "url": "https://files.pythonhosted.org/packages/df/7f/6b9a92b517ea722480bc8eb6c90e140c9bd1c658c87e9a9bca5ce1b97d1e/data_object-1.0.0-py3-none-any.whl" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "fd9ff0a121a0f870ab42340b72e80cd3", "sha256": "f0d869a282230e2b66ef00ce37531bf6f6eb3d0ca340b05d8e4d2682bdf97a78" }, "downloads": -1, "filename": "data_object-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fd9ff0a121a0f870ab42340b72e80cd3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 8882, "upload_time": "2018-01-23T20:58:21", "url": "https://files.pythonhosted.org/packages/d4/bc/b3f00132034e71b286a2f3d2736d2fa0c6efae0542555c28e436f15dcb0e/data_object-1.1.0-py3-none-any.whl" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "f51ba84a0021f950c9b28743d9eac8e5", "sha256": "564ef1129c132753a7ae62e04f7b444e5182699e3dd4727c1ef894d8930394ba" }, "downloads": -1, "filename": "data_object-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f51ba84a0021f950c9b28743d9eac8e5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 9106, "upload_time": "2018-01-23T22:18:08", "url": "https://files.pythonhosted.org/packages/e7/93/02de18b08f862e8a43ea128ab061bcbae7a81bf26a661392a1cecc153546/data_object-1.2.0-py3-none-any.whl" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "f3ad7f3405eb85809fa87c6befe9763d", "sha256": "f4b4aeb3316eab50cb6a26b4266e77c0df47e41e472d6dd0f570894a27b99e99" }, "downloads": -1, "filename": "data_object-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f3ad7f3405eb85809fa87c6befe9763d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 9311, "upload_time": "2018-01-23T22:20:27", "url": "https://files.pythonhosted.org/packages/39/55/8d732b8e3c3a372851ec16970189bd4a503f508f6d4b753df4c56b81cdf8/data_object-1.2.1-py3-none-any.whl" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "7fb68c83fc40a1d5fb46d1a40c1ba789", "sha256": "79447cf25dcbf9f0a800f8eebf2f5aaa19b4c35fd25c3eaab50bd2ab246e4b1e" }, "downloads": -1, "filename": "data_object-1.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7fb68c83fc40a1d5fb46d1a40c1ba789", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 9044, "upload_time": "2018-01-27T20:13:37", "url": "https://files.pythonhosted.org/packages/a9/ed/b3f4b2feb4f49727cf0bc88d72a0518ddd0c5b660b53bec8beac8b389194/data_object-1.3.0-py3-none-any.whl" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "25f033dcc77abb25a96f7c1b95b24cb2", "sha256": "2cfc8ffcfb6aca8b78099aca5e6e2b00d4d2d5215728dca007bc42445a485237" }, "downloads": -1, "filename": "data_object-1.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "25f033dcc77abb25a96f7c1b95b24cb2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 8942, "upload_time": "2018-01-28T16:36:53", "url": "https://files.pythonhosted.org/packages/18/15/f3688f6a3e434c72c674b6426a07e373121d66ee14bc9602e78b5ca79997/data_object-1.4.0-py3-none-any.whl" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "aa17aa8fb9a21e49096a9bce9637e29e", "sha256": "12b9144f8cf1031073b2ef2d60bb222e900157e88c307400387387f56cf0fbf3" }, "downloads": -1, "filename": "data_object-1.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "aa17aa8fb9a21e49096a9bce9637e29e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 9214, "upload_time": "2018-04-15T19:27:03", "url": "https://files.pythonhosted.org/packages/50/31/1264987329e79d3bafbf00404d2b1a03f2b05ef98612aa8b2cc3418bc7cd/data_object-1.5.0-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "aa17aa8fb9a21e49096a9bce9637e29e", "sha256": "12b9144f8cf1031073b2ef2d60bb222e900157e88c307400387387f56cf0fbf3" }, "downloads": -1, "filename": "data_object-1.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "aa17aa8fb9a21e49096a9bce9637e29e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 9214, "upload_time": "2018-04-15T19:27:03", "url": "https://files.pythonhosted.org/packages/50/31/1264987329e79d3bafbf00404d2b1a03f2b05ef98612aa8b2cc3418bc7cd/data_object-1.5.0-py3-none-any.whl" } ] }