{ "info": { "author": "Quique Porta", "author_email": "quiqueporta@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Utilities" ], "description": "Value Object\n============\n\n|Version Number| |Build Status| |Coverage Status| |Requirements Status| |Python Version| |License GPLv3|\n\n\nBased on Ruby Gem by NoFlopSquad (https://github.com/noflopsquad/value-object)\n\nA **value object** is a small object that represents a simple entity whose equality isn't based on identity:\ni.e. two value objects are equal when they have the same value, not necessarily being the same object.\n\n\n`Wikipedia `_.\n\n\nInstallation\n------------\n\n.. code-block:: sh\n\n > pip install simple-value-object\n\nUsage\n-----\n\nConstructor and field readers\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n from simple_value_object import ValueObject\n\n class Point(ValueObject):\n def __init__(self, x, y):\n pass\n\n point = Point(1, 2)\n\n point.x\n # 1\n\n point.y\n # 2\n\n point.x = 5\n # CannotBeChangeException: You cannot change values from a Value Object, create a new one\n\n class Date(ValueObject):\n def __init__(self, day, month, year):\n pass\n\n date = Date(1, 10, 2015)\n\n date.day\n # 1\n\n date.month\n # 10\n\n date.year\n # 2015\n\n date.month = 5\n # CannotBeChangeException: You cannot change values from a Value Object, create a new one\n\n\nEquality based on field values\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n from simple_value_object import ValueObject\n\n class Point(ValueObject):\n def __init__(self, x, y):\n pass\n\n a_point = Point(5, 3)\n\n same_point = Point(5, 3)\n\n a_point == same_point\n # True\n\n a_different_point = Point(6, 3)\n\n a_point == a_different_point\n # False\n\n\nHash code based on field values\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n from simple_value_object import ValueObject\n\n class Point(ValueObject):\n def __init__(self, x, y):\n pass\n\n a_point = Point(5, 3)\n\n same_point = Point(5, 3)\n\n a_point.hash == same_point.hash\n # True\n\n a_different_point = Point.new(6, 3)\n\n a_point.hash == a_different_point.hash\n # False\n\n\nInvariants\n~~~~~~~~~~\n\n.. code-block:: python\n\n from simple_value_object import ValueObject, invariant\n\n class Point(ValueObject):\n\n def __init__(self, x, y):\n pass\n\n @invariant\n def inside_first_quadrant(cls, instance):\n return instance.x > 0 and instance.y > 0\n\n @invariant\n def x_less_than_y(cls, instance):\n return instance.x < instance.y\n\n Point(-5, 3)\n #ViolatedInvariantException: Args values [-5, 3] violates invariant: inside_first_cuadrant\n\n Point(6, 3)\n #ViolatedInvariantException: Args values [6, 3] violates invariant: x_less_than_y\n\n Point(1,3)\n #<__main__.Point at 0x7f2bd043c780>\n\n\nMutable types not allowed\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n from simple_value_object import ValueObject, invariant\n\n class AValueObject(ValueObject):\n\n def __init__(self, an_arg):\n pass\n\n AValueObject(an_arg={'key': 'value'})\n #MutableTypeNotAllowedException: 'an_arg' cannot be a mutable data type.\n\n AValueObject({'key': 'value'})\n #MutableTypeNotAllowedException: Mutable args are not allowed.\n\nValueObject within ValueObject\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n from simple_value_object import ValueObject, invariant\n\n class Money(ValueObject):\n def __init__(self, amount, currency):\n pass\n\n class Currency(ValueObject):\n def __init__(self, symbol):\n pass\n\n Money(amount=100, currency=Currency(symbol=\"\u20ac\"))\n\n\nTest\n----\n\n.. code-block:: sh\n\n > pip install -r requirements-test.txt\n > PYTHONPATH=$PYTHONPATH:. mamba\n\n\n.. |Version Number| image:: https://img.shields.io/badge/version-1.3.0-blue.svg\n\n.. |Build Status| image:: https://travis-ci.org/quiqueporta/simple-value-object.svg?branch=master\n :target: https://travis-ci.org/quiqueporta/simple-value-object\n\n.. |Coverage Status| image:: https://coveralls.io/repos/quiqueporta/simple-value-object/badge.svg?branch=master&service=github\n :target: https://coveralls.io/github/quiqueporta/simple-value-object?branch=master\n\n.. |Requirements Status| image:: https://requires.io/github/quiqueporta/simple-value-object/requirements.svg?branch=master\n :target: https://requires.io/github/quiqueporta/simple-value-object/requirements/?branch=master\n :alt: Requirements Status\n\n.. |License GPLv3| image:: https://img.shields.io/badge/license-GPLv3-red.svg\n :target: https://opensource.org/licenses/GPL-3.0\n\n.. |Python Version| image:: https://img.shields.io/badge/python-2.7,_3.3,_3.4,_3.5-blue.svg\n", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/quiqueporta/simple-value-object/releases", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/quiqueporta/value-object", "keywords": "python", "license": "GPLv3", "maintainer": "", "maintainer_email": "", "name": "simple-value-object", "package_url": "https://pypi.org/project/simple-value-object/", "platform": "", "project_url": "https://pypi.org/project/simple-value-object/", "project_urls": { "Download": "https://github.com/quiqueporta/simple-value-object/releases", "Homepage": "https://github.com/quiqueporta/value-object" }, "release_url": "https://pypi.org/project/simple-value-object/1.3/", "requires_dist": null, "requires_python": "", "summary": "A simple mixin for create Value Objects", "version": "1.3" }, "last_serial": 5203502, "releases": { "0.2": [ { "comment_text": "", "digests": { "md5": "a0a725a0fffcf8bbfaaaf93a44f6783e", "sha256": "8a027faa9f13ca4e1432725641b7fe4984cee3b48b3ca3525d740ebb6729bd91" }, "downloads": -1, "filename": "simple-value-object-0.2.tar.gz", "has_sig": false, "md5_digest": "a0a725a0fffcf8bbfaaaf93a44f6783e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3815, "upload_time": "2015-10-03T11:08:38", "url": "https://files.pythonhosted.org/packages/55/46/e66dad4bcbf4dde4abd692932df386cc87af59d3c08f9d6f4e18d4205df1/simple-value-object-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "087014bef61c3a7fb621a7bff413c855", "sha256": "761dac54fc31dc87a2879dc77ef7892b6c074fcbd8302f89d13bcf8af9301095" }, "downloads": -1, "filename": "simple-value-object-0.2.1.tar.gz", "has_sig": false, "md5_digest": "087014bef61c3a7fb621a7bff413c855", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3781, "upload_time": "2015-10-05T06:44:35", "url": "https://files.pythonhosted.org/packages/e9/c6/b3335abc2f70af505073d6f5ad3462f92df1b1287b6673da2dae357d9aae/simple-value-object-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "d51a59e2d2e935c70015e9dc3bb5f147", "sha256": "b70f9541ceda016a77b2a46024953911c7a68523726192d48f4c86b44abc74da" }, "downloads": -1, "filename": "simple-value-object-0.2.2.tar.gz", "has_sig": false, "md5_digest": "d51a59e2d2e935c70015e9dc3bb5f147", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3882, "upload_time": "2018-09-05T06:33:50", "url": "https://files.pythonhosted.org/packages/e3/fe/99b70152eb0479a522eee8d502db4af588ae23b4e84a162d5f888e59bf4f/simple-value-object-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "adbfed6305890b06365beec42565b9bd", "sha256": "a868b5de9a8d580f89eacd12c897e9d96ab25635c8711c33ea4eea6a531fea1d" }, "downloads": -1, "filename": "simple-value-object-0.2.3.tar.gz", "has_sig": false, "md5_digest": "adbfed6305890b06365beec42565b9bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3884, "upload_time": "2018-09-05T15:31:27", "url": "https://files.pythonhosted.org/packages/94/e8/1b7cb49af3dd562ab35cb5b8057a4384c598ebb435f366c28c2151887b2e/simple-value-object-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "d8f0187537b639039a01ecc15715644e", "sha256": "49e1eb458431172e8b8abbd8c06ff3846eaff36160671c13f51d1d8555e4778c" }, "downloads": -1, "filename": "simple-value-object-0.2.4.tar.gz", "has_sig": false, "md5_digest": "d8f0187537b639039a01ecc15715644e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3894, "upload_time": "2018-09-05T15:40:12", "url": "https://files.pythonhosted.org/packages/b1/28/f3032904f2e83b0fa69593246ed2a75c18d546ec78bae695edb4b87e44e6/simple-value-object-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "568074e690575373e42b7bfd54ac989a", "sha256": "43db3c089f88d4c55b0b84162eb8cd2c1f29008b554abb267dfd8fe0099c8e22" }, "downloads": -1, "filename": "simple_value_object-0.2.5-py2-none-any.whl", "has_sig": false, "md5_digest": "568074e690575373e42b7bfd54ac989a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 4782, "upload_time": "2018-09-29T11:28:53", "url": "https://files.pythonhosted.org/packages/8a/50/913854a66234cf579f5046a19cf057c10f509a08c1ac29d293557b2e4044/simple_value_object-0.2.5-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a57830716aa47e7193eda36c9a6c4ffb", "sha256": "46e72eb15e7b54ad6c0d641c7798cb9cffcc9af886733a15451d64e15131dd61" }, "downloads": -1, "filename": "simple-value-object-0.2.5.tar.gz", "has_sig": false, "md5_digest": "a57830716aa47e7193eda36c9a6c4ffb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4004, "upload_time": "2018-09-29T11:28:19", "url": "https://files.pythonhosted.org/packages/f5/a6/836d530498ed373b8fb31c58faae3f368a7f666365a02120f93c323d5354/simple-value-object-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "51afeb5e03c1f947727c7e25fdec27ca", "sha256": "66b72117ba13b2dc58ba1df09dd9914433efd168dcc2d4784ae9f8f883f6ced4" }, "downloads": -1, "filename": "simple_value_object-0.2.6-py2-none-any.whl", "has_sig": false, "md5_digest": "51afeb5e03c1f947727c7e25fdec27ca", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 4849, "upload_time": "2018-09-29T11:58:56", "url": "https://files.pythonhosted.org/packages/c3/b3/ffa01dcd7d30556a0f03a681b6726be5f3fb67f21df7aff7c60dc6cdcef7/simple_value_object-0.2.6-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "311df58e76b190114a0034ad26296c0a", "sha256": "76d39da486454f4fc2e6256965dd5572e0deafbf70e198569179fbeef8fea2d5" }, "downloads": -1, "filename": "simple-value-object-0.2.6.tar.gz", "has_sig": false, "md5_digest": "311df58e76b190114a0034ad26296c0a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4060, "upload_time": "2018-09-29T11:55:42", "url": "https://files.pythonhosted.org/packages/ae/1e/5679f14d7dcec8d99523f09fc5c7631b58fdac6ec73b9d26ed1d673cc506/simple-value-object-0.2.6.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "504771bd119da7d8db716e6c2aea3142", "sha256": "5cc2428b98a40c3e4a929a8f2442da686ce701473af5d8e09b09042ee78eea3b" }, "downloads": -1, "filename": "simple_value_object-0.3.1-py2-none-any.whl", "has_sig": false, "md5_digest": "504771bd119da7d8db716e6c2aea3142", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 4809, "upload_time": "2019-01-15T13:54:19", "url": "https://files.pythonhosted.org/packages/59/bc/ca1801d9616dc7b08c9ba9f6ea8862c1bafd8ee312038a3b1c7acf50db24/simple_value_object-0.3.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "601db37c3a62c06d0c33ae2a989a4880", "sha256": "1bd8155151f7f73e529dae6dc580be34191f0ee2132ef6a797c8c7f36706b376" }, "downloads": -1, "filename": "simple-value-object-0.3.1.tar.gz", "has_sig": false, "md5_digest": "601db37c3a62c06d0c33ae2a989a4880", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4013, "upload_time": "2019-01-15T13:49:44", "url": "https://files.pythonhosted.org/packages/05/57/17de2f37537f6830de6b54c4a0e4051766e3dd2edabcaf4286aea900ac66/simple-value-object-0.3.1.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "df272243b42c97623cdc2345dd3da1c8", "sha256": "8541040c6da7eab404dd7b59098159e4b74e59a97fd2a6ad74d3a71b955daf06" }, "downloads": -1, "filename": "simple-value-object-1.0.1.tar.gz", "has_sig": false, "md5_digest": "df272243b42c97623cdc2345dd3da1c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4059, "upload_time": "2018-06-22T16:10:06", "url": "https://files.pythonhosted.org/packages/cf/d0/a2decdcadbbccc8b8ae41f4f1654ac6e4e0e090021557215ae712ce007a3/simple-value-object-1.0.1.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "4d0b42c3cb3996bf0668c3e898dc3b90", "sha256": "a975b92077821c686716c737d8cb20f2c21758e97968dd99f1d5ea44a498cbe0" }, "downloads": -1, "filename": "simple-value-object-1.1.tar.gz", "has_sig": false, "md5_digest": "4d0b42c3cb3996bf0668c3e898dc3b90", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4423, "upload_time": "2018-09-04T20:45:15", "url": "https://files.pythonhosted.org/packages/58/a1/2bff80ffb3cd3a6c42083163a0323eda2012cfa85fc8a89d9cc99154745b/simple-value-object-1.1.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "89ab10a1fc9c391213f8c3c800b6a815", "sha256": "259315e88c5eb035c5d585238f632e0b16c7a15c72f8b48e09a18ae80117fbdb" }, "downloads": -1, "filename": "simple-value-object-1.1.1.tar.gz", "has_sig": false, "md5_digest": "89ab10a1fc9c391213f8c3c800b6a815", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4423, "upload_time": "2018-09-05T15:53:05", "url": "https://files.pythonhosted.org/packages/1d/cd/b8ab2e45e01f8390fccd773ad8343c6815c4167b23a7f69325e5c3a9ecc8/simple-value-object-1.1.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "26df49338921d5ec4dc47f12ecaebf78", "sha256": "769031614914aa43944fc0684a183f4a6313de22ebd914c94d7ae2647f140904" }, "downloads": -1, "filename": "simple_value_object-1.2-py2-none-any.whl", "has_sig": false, "md5_digest": "26df49338921d5ec4dc47f12ecaebf78", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 5117, "upload_time": "2019-01-15T13:55:28", "url": "https://files.pythonhosted.org/packages/57/43/e2f1d43778278ab47177dc307f30297454582909b9636f2dff2ffeefde3b/simple_value_object-1.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b1b043c775aa9f8400a98aeca31f5aa8", "sha256": "c4e54913edfed4abef00ad7605b7c2dcb29563131b285f1b3295513e5102f147" }, "downloads": -1, "filename": "simple-value-object-1.2.tar.gz", "has_sig": false, "md5_digest": "b1b043c775aa9f8400a98aeca31f5aa8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4358, "upload_time": "2019-01-15T11:41:17", "url": "https://files.pythonhosted.org/packages/7b/31/13f26d1073dbe6440b14c71d61021fb79128cafdfd0b301c3bc5812805af/simple-value-object-1.2.tar.gz" } ], "1.3": [ { "comment_text": "", "digests": { "md5": "581676e21b3c6ccee9ee8766cd434d89", "sha256": "e1502b575e04ddfd431741ec2bdcea8148303c709cf46eb25a506be56b8265dd" }, "downloads": -1, "filename": "simple_value_object-1.3-py2-none-any.whl", "has_sig": false, "md5_digest": "581676e21b3c6ccee9ee8766cd434d89", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 5140, "upload_time": "2019-04-29T14:58:23", "url": "https://files.pythonhosted.org/packages/59/93/b648c957f832f029684f9c8c5316ef5edb1f444da16f0a00e643dbc44393/simple_value_object-1.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4be4e960321660dd41e319c0fe77f5e9", "sha256": "1e7c31966f09e1c293a67240f64f4aad3a4640ded04f7b4d0bd03b369b476cb7" }, "downloads": -1, "filename": "simple-value-object-1.3.tar.gz", "has_sig": false, "md5_digest": "4be4e960321660dd41e319c0fe77f5e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4445, "upload_time": "2019-04-29T14:58:36", "url": "https://files.pythonhosted.org/packages/75/11/9916e2601208c5c3985bab26e48f07bfe06b29a4c408d995fa183e6814be/simple-value-object-1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "581676e21b3c6ccee9ee8766cd434d89", "sha256": "e1502b575e04ddfd431741ec2bdcea8148303c709cf46eb25a506be56b8265dd" }, "downloads": -1, "filename": "simple_value_object-1.3-py2-none-any.whl", "has_sig": false, "md5_digest": "581676e21b3c6ccee9ee8766cd434d89", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 5140, "upload_time": "2019-04-29T14:58:23", "url": "https://files.pythonhosted.org/packages/59/93/b648c957f832f029684f9c8c5316ef5edb1f444da16f0a00e643dbc44393/simple_value_object-1.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4be4e960321660dd41e319c0fe77f5e9", "sha256": "1e7c31966f09e1c293a67240f64f4aad3a4640ded04f7b4d0bd03b369b476cb7" }, "downloads": -1, "filename": "simple-value-object-1.3.tar.gz", "has_sig": false, "md5_digest": "4be4e960321660dd41e319c0fe77f5e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4445, "upload_time": "2019-04-29T14:58:36", "url": "https://files.pythonhosted.org/packages/75/11/9916e2601208c5c3985bab26e48f07bfe06b29a4c408d995fa183e6814be/simple-value-object-1.3.tar.gz" } ] }