{ "info": { "author": "Seequent", "author_email": "it@seequent.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Natural Language :: English", "Operating System :: MacOS", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Operating System :: Unix", "Programming Language :: Python", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Mathematics", "Topic :: Scientific/Engineering :: Physics" ], "description": "properties\n**********\n\n\n.. image:: https://img.shields.io/pypi/v/properties.svg\n :target: https://pypi.org/project/properties\n :alt: Latest PyPI version\n\n.. image:: https://img.shields.io/badge/license-MIT-blue.svg\n :target: https://github.com/seequent/properties/blob/master/LICENSE\n :alt: MIT license\n\n.. image:: https://readthedocs.org/projects/propertiespy/badge/\n :target: http://propertiespy.readthedocs.io/en/latest/\n :alt: ReadTheDocs\n\n.. image:: https://travis-ci.org/seequent/properties.svg?branch=master\n :target: https://travis-ci.org/seequent/properties\n :alt: Travis tests\n\n.. image:: https://codecov.io/gh/seequent/properties/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/seequent/properties\n :alt: Code coverage\n\n\nOverview Video\n--------------\n\n.. image:: https://img.youtube.com/vi/DJfOHVaglqs/0.jpg\n :target: https://www.youtube.com/watch?v=DJfOHVaglqs\n :alt: Python Properties\n\nAn overview of Properties, November 2016.\n\nWhy\n---\n\nProperties provides structure to aid development in an interactive programming\nenvironment while allowing for an easy transition to production code.\nIt emphasizes usability and reproducibility for developers and users at\nevery stage of the code life cycle.\n\nScope\n-----\n\nThe :code:`properties` package enables the creation of **strongly typed** objects in a\nconsistent, declarative way. This allows **validation** of developer expectations and hooks\ninto **notifications** and other libraries. It provides **documentation** with\nno extra work, and **serialization** for portability and reproducibility.\n\nGoals\n-----\n\n* Keep a clean namespace for easy interactive programming\n* Prioritize documentation\n* Provide built-in serialization/deserialization\n* Connect to other libraries for GUIs and visualizations\n\nDocumentation\n-------------\n\nAPI Documentation is available at `ReadTheDocs `_.\n\nAlternatives\n------------\n\n* `attrs `_ - \"Python Classes Without\n Boilerplate\" - This is a popular, actively developed library that aims to\n simplify class creation, especially around object protocols (i.e. dunder\n methods), with concise, declarative code.\n\n Similarities to Properties include type-checking, defaults, validation, and\n coercion. There are a number of differences:\n\n 1. attrs acts somewhat like a `namedtuple`, whereas properties acts\n more like a `dict` or mutable object.\n\n * as a result, attrs is able to tackle hashing, comparison methods,\n string representation, etc.\n * attrs does not suffer runtime performance penalties as much as properties\n * on the other hand, properties focuses on interactivity, with\n notifications, serialization/deserialization, and mutable,\n possibly invalid states.\n\n 2. properties has many built-in types with existing, complex validation\n already in place. This includes recursive validation of container\n and instance properties. attrs only allows attribute type to be specified.\n 3. properties is more prescriptive and detailed around auto-generated\n class documentation, for better or worse.\n\n* `traitlets `_ (Jupyter project) and\n `traits `_ (Enthought) - These libraries\n are driven by GUI development (much of the Jupyter environment is built\n on traitlets; traits has automatic GUI generation) which leads to many\n similar features as properties such as strong typing, validation, and\n notifications. Also, some Properties features and aspects of the API take\n heavy inspiration from traitlets.\n\n However, There are a few key areas where properties differs:\n\n 1. properties has a clean namespace - this (in addition to `?` docstrings)\n allows for very easy discovery in an interactive programming environment.\n 2. properties prioritizes documentation - this is not explicitly implemented\n yet in traits or traitlets, but works out-of-the-box in properties.\n 3. properties prioritizes serialization - this is present in traits with\n pickling (but difficult to customize) and in traitlets with configuration\n files (which require extra work beyond standard class definition); in\n properties, serialization works out of the box but is also highly\n customizable.\n 4. properties allows invalid object states - the GUI focus of traits/traitlets\n means an invalid object state at any time is never ok; without that constraint,\n properties allows interactive object building and experimentation.\n Validation then occurs when the user is ready and calls :code:`validate`\n\n Significant advantages of traitlets and traits over properties are\n GUI interaction and larger suites of existing property types.\n Besides numerous types built-in to these libraries, some other examples are\n `trait types that support unit conversion `_\n and `NumPy/SciPy trait types `_\n (note: properties has a NumPy array property type).\n\n .. note::\n\n properties provides a :code:`link` object which inter-operates with\n traitlets and follows the same API as traitlets links\n\n* `param `_ - This library also provides\n type-checking, validation, and notification. It has a few unique features\n and parameter types (possibly of note is the ability to provide dynamic\n values for parameters at any time, not just as the default). This was first\n introduced before built-in Python properties, and current development is\n very slow.\n\n* `built-in Python dataclass decorator `_ -\n provides \"mutable named tuples with defaults\" - this provides similar functionality\n to the attrs by adding several object protocol dunder methods to a class. Data\n Classes are clean, lightweight and included with Python 3.7. However, they\n don't provide as much builtin functionality or customization as the above\n libraries.\n\n* `built-in Python property `_ -\n properties/traits-like behavior can be mostly recreated using :code:`@property`.\n This requires significantly more work by the programmer, and results in\n not-declarative, difficult-to-read code.\n\n* `mypy `_, `PEP 484 `_,\n and `PEP 526 `_ -\n This provides static typing for Python without coersion, notifications, etc.\n It has a very different scope and implementation than traits-like libraries.\n\nConnections\n-----------\n\n* `casingSimulations `_ - Research repository for\n electromagnetic simulations in the presence of well casing\n* `OMF `_ - Open Mining Format API and file serialization\n* `SimPEG `_ - Simulation and Parameter Estimation in Geophysics\n* `Steno3D `_ - Python client for building and uploading 3D models\n\nInstallation\n------------\n\nTo install the repository, ensure that you have\n`pip installed `_ and run:\n\n.. code::\n\n pip install properties\n\nFor the development version:\n\n.. code::\n\n git clone https://github.com/seequent/properties.git\n cd properties\n pip install -e .\n\nExamples\n========\n\nLets start by making a class to organize your coffee habits.\n\n.. code:: python\n\n import properties\n class CoffeeProfile(properties.HasProperties):\n name = properties.String('What should I call you?')\n count = properties.Integer(\n 'How many coffees have you had today?',\n default=0\n )\n had_enough_coffee = properties.Bool(\n 'Have you had enough coffee today?',\n default=False\n )\n caffeine_choice = properties.StringChoice(\n 'How do you take your caffeine?' ,\n choices=['coffee', 'tea', 'latte', 'cappuccino', 'something fancy'],\n required=False\n )\n\n\nThe :code:`CoffeeProfile` class has 4 properties, all of which are documented!\nThese can be set on class instantiation:\n\n.. code:: python\n\n profile = CoffeeProfile(name='Bob')\n print(profile.name)\n\n Out [1]: Bob\n\nSince a default value was provided for :code:`had_enough_coffee`, the response is (naturally)\n\n.. code:: python\n\n print(profile.had_enough_coffee)\n\n Out [2]: False\n\nWe can set Bob's :code:`caffeine_choice` to one of the available choices; he likes coffee\n\n.. code:: python\n\n profile.caffeine_choice = 'coffee'\n\nAlso, Bob is half way through his fourth cup of coffee today:\n\n.. code:: python\n\n profile.count = 3.5\n\n Out [3]: ValueError: The 'count' property of a CoffeeProfile instance must\n be an integer.\n\nOk, Bob, chug that coffee:\n\n.. code:: python\n\n profile.count = 4\n\nNow that Bob's :code:`CoffeeProfile` is established, :code:`properties` can\ncheck that it is valid:\n\n.. code:: python\n\n profile.validate()\n\n Out [4]: True\n\nProperty Classes are auto-documented in Sphinx-style reStructuredText!\nWhen you ask for the doc string of :code:`CoffeeProfile`, you get\n\n.. code:: rst\n\n **Required Properties:**\n\n * **count** (:class:`Integer `): How many coffees have you had today?, an integer, Default: 0\n * **had_enough_coffee** (:class:`Bool `): Have you had enough coffee today?, a boolean, Default: False\n * **name** (:class:`String `): What should I call you?, a unicode string\n\n **Optional Properties:**\n\n * **caffeine_choice** (:class:`StringChoice `): How do you take your caffeine?, any of \"coffee\", \"tea\", \"latte\", \"cappuccino\", \"something fancy\"\n", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/seequent/properties", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/seequent/properties", "keywords": "declarative", "license": "", "maintainer": "", "maintainer_email": "", "name": "properties", "package_url": "https://pypi.org/project/properties/", "platform": "Windows", "project_url": "https://pypi.org/project/properties/", "project_urls": { "Download": "https://github.com/seequent/properties", "Homepage": "https://github.com/seequent/properties" }, "release_url": "https://pypi.org/project/properties/0.6.1/", "requires_dist": null, "requires_python": "", "summary": "properties: an organizational aid and wrapper for validation and tab completion of class properties", "version": "0.6.1" }, "last_serial": 5876380, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "08f678cfc89bbe545f66bc26464a038f", "sha256": "1fbd8f1f117ab69c58a5f3bdb6680b9096363c29f59f5027b1846c185591dd0a" }, "downloads": -1, "filename": "properties-0.0.1.tar.gz", "has_sig": false, "md5_digest": "08f678cfc89bbe545f66bc26464a038f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17601, "upload_time": "2016-05-26T01:20:02", "url": "https://files.pythonhosted.org/packages/ef/80/8054755acb8415f9835f81c29c4780c8283bca85ee246cd0dd8d2a3147d8/properties-0.0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "b63a32fbf1c3aea953b7fac0be283faa", "sha256": "2ea3409901f283eb3f6b87a1a388abe07f8e8a43a2d4b134d83503c78b56d9c1" }, "downloads": -1, "filename": "properties-0.1.1.tar.gz", "has_sig": false, "md5_digest": "b63a32fbf1c3aea953b7fac0be283faa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18267, "upload_time": "2016-06-10T14:36:12", "url": "https://files.pythonhosted.org/packages/b1/84/31c701c2b94ce619686dc41925b6dbe0a1e43734aa8c1b69e037a1e4973d/properties-0.1.1.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "085f349b21c9540515e607ff3a53fa79", "sha256": "4dc0640981612fb12778983adc6e39f48701d154d7c424ac4d8cdf16201a2095" }, "downloads": -1, "filename": "properties-0.1.3.tar.gz", "has_sig": false, "md5_digest": "085f349b21c9540515e607ff3a53fa79", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19386, "upload_time": "2016-06-23T12:05:43", "url": "https://files.pythonhosted.org/packages/22/13/3cc9bf044a42be0988ef5ec2f712d751d9f83d5fc82c1f0cad1d2d6cf24d/properties-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "80c97f05b97661b6c07a9e267bab543f", "sha256": "be77de863fd27881135e3a63adb94f9b43f1939fc7f61839335391b385c8897e" }, "downloads": -1, "filename": "properties-0.1.4.tar.gz", "has_sig": false, "md5_digest": "80c97f05b97661b6c07a9e267bab543f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19674, "upload_time": "2016-06-30T16:04:40", "url": "https://files.pythonhosted.org/packages/aa/7f/0ed94fe4caeb8f0e1ba51f420d227ebf138204131ab1f63738bc09adc3e7/properties-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "e484e0fffa8143f5ea860b6edd6e9e96", "sha256": "2b5958561c5c8efc39381b62374265a00f3a065772a757aee3eace9929a9af8f" }, "downloads": -1, "filename": "properties-0.1.5.tar.gz", "has_sig": false, "md5_digest": "e484e0fffa8143f5ea860b6edd6e9e96", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19659, "upload_time": "2016-07-14T22:50:37", "url": "https://files.pythonhosted.org/packages/4d/0a/5854cfcb38de27244f1937249e8d98f150cbf82ebe55502b02a04c3746de/properties-0.1.5.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "4af8d922f4165925dd67c5dc6b4cddde", "sha256": "843a6cd61efb178a669617aad2e60af7d2e5089465ea94ec8934b4a868c0e478" }, "downloads": -1, "filename": "properties-0.2.0.tar.gz", "has_sig": false, "md5_digest": "4af8d922f4165925dd67c5dc6b4cddde", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19612, "upload_time": "2016-10-23T01:46:01", "url": "https://files.pythonhosted.org/packages/58/eb/6454bbe56cd92495ca9085eac13b4285dd4eeccb38dd102ac57216bba430/properties-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "a1101a52844716c282318e57e7adec1a", "sha256": "d79d47c2ec6aaa54f70395e754bbd76819282e43a60f87eb740609b4ba436786" }, "downloads": -1, "filename": "properties-0.2.1.tar.gz", "has_sig": false, "md5_digest": "a1101a52844716c282318e57e7adec1a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20342, "upload_time": "2016-10-23T05:18:57", "url": "https://files.pythonhosted.org/packages/ad/41/207021ab92879355472a4754a07848ba8d8dd97982bf4ee35cab33570a47/properties-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "a333f5896b2fab15807d452c57eb1b95", "sha256": "1cfd9fa75a58ac7b0fd95a224d54e809345636fc8dbec1c82d5eb1f3808086fe" }, "downloads": -1, "filename": "properties-0.2.2.tar.gz", "has_sig": false, "md5_digest": "a333f5896b2fab15807d452c57eb1b95", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14851, "upload_time": "2016-10-24T21:11:58", "url": "https://files.pythonhosted.org/packages/5f/01/578f265b9ba3c45545e7fb56bb48a735782e68716e72167e75000619c042/properties-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "2211b0b5b83541c98e1e08f3148ea0fe", "sha256": "8424c35ad23077e0cff6110f4c732e62eb3c71d68be7430bbf9c4955a89dd4a9" }, "downloads": -1, "filename": "properties-0.2.3.tar.gz", "has_sig": false, "md5_digest": "2211b0b5b83541c98e1e08f3148ea0fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17936, "upload_time": "2016-11-01T23:15:54", "url": "https://files.pythonhosted.org/packages/ea/0d/ff004391351271ce05b429e06cc99c74a9582644db2b7a07e469ce836a00/properties-0.2.3.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "813c26e9ce32a7081c1edddc18fa71c7", "sha256": "a704fc02bde1de4742527622ad2eff0927fe7c9a101292729af337e7a7952ad6" }, "downloads": -1, "filename": "properties-0.3.0.tar.gz", "has_sig": false, "md5_digest": "813c26e9ce32a7081c1edddc18fa71c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23175, "upload_time": "2016-11-29T17:25:32", "url": "https://files.pythonhosted.org/packages/a4/e9/60358eadac346c0bb4c786afd0b077e496ef453beb5de99384a67366dc89/properties-0.3.0.tar.gz" } ], "0.3.0b0": [ { "comment_text": "", "digests": { "md5": "9efe919a72f4c53b674376358bc813b1", "sha256": "f3caf45f10094ae70a43f7db419831e638876c32072019793e89b5ba47b8476c" }, "downloads": -1, "filename": "properties-0.3.0b0.tar.gz", "has_sig": false, "md5_digest": "9efe919a72f4c53b674376358bc813b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22968, "upload_time": "2016-11-23T19:28:00", "url": "https://files.pythonhosted.org/packages/f2/c5/a5af75da3f14ce55b942dfe3d18a23aedab04f70670856bfee54c4956ccf/properties-0.3.0b0.tar.gz" } ], "0.3.0b1": [ { "comment_text": "", "digests": { "md5": "3da8f9facf7d28a2f3d8236827caa9ae", "sha256": "2237da714783fb240e9de4eb49dc05d9f1d168ae21bb9fa001f3ed8c6febd295" }, "downloads": -1, "filename": "properties-0.3.0b1.tar.gz", "has_sig": false, "md5_digest": "3da8f9facf7d28a2f3d8236827caa9ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23181, "upload_time": "2016-11-24T23:45:53", "url": "https://files.pythonhosted.org/packages/1a/e7/2bdbbfd4e2bb304cc9bd359533fc08b8dfecf75c46a4c1178cd7bd5f2a94/properties-0.3.0b1.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "e20ecc5ede325ccbb69e760f30e21152", "sha256": "560bb248745d835f8d9509b88ee7ccf6502283316084ad72db0a5b872b445b3b" }, "downloads": -1, "filename": "properties-0.3.1.tar.gz", "has_sig": false, "md5_digest": "e20ecc5ede325ccbb69e760f30e21152", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35930, "upload_time": "2017-03-15T22:21:40", "url": "https://files.pythonhosted.org/packages/6d/f7/8dd0f02fbdb524852e06f49a3d18d525b8cceaee04a8592df59f01f13005/properties-0.3.1.tar.gz" } ], "0.3.1b0": [ { "comment_text": "", "digests": { "md5": "a1e7e34ee6c951b33b3966346c4638aa", "sha256": "56c2c38929a2aa930ef79308f39129e481f2e3cf2f478957c29f9320711c098b" }, "downloads": -1, "filename": "properties-0.3.1b0.tar.gz", "has_sig": false, "md5_digest": "a1e7e34ee6c951b33b3966346c4638aa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30813, "upload_time": "2017-02-15T00:34:17", "url": "https://files.pythonhosted.org/packages/36/ae/7a1cacb4246ad7ff1afd1598ea147804c0bb51271d589c9d2ca964d44ec8/properties-0.3.1b0.tar.gz" } ], "0.3.1b1": [ { "comment_text": "", "digests": { "md5": "95d738cc785fe48899c2592e79b1cb25", "sha256": "aa72961ff806a07ba69a43cebcc67a92e11dc118d41b17d0db118a347e67bd6c" }, "downloads": -1, "filename": "properties-0.3.1b1.tar.gz", "has_sig": false, "md5_digest": "95d738cc785fe48899c2592e79b1cb25", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30802, "upload_time": "2017-02-20T02:47:43", "url": "https://files.pythonhosted.org/packages/5c/8b/556ba39479fe78c1ea9da101caeb4c678ad1ccd2d0a188d27791b7437fdf/properties-0.3.1b1.tar.gz" } ], "0.3.1b2": [ { "comment_text": "", "digests": { "md5": "a61d074ecd2045bd8e7c5646a1fc209d", "sha256": "6f44c2165625f01e13d1be4c917e03ded218ea133791fdb70d8be7d8586d6b18" }, "downloads": -1, "filename": "properties-0.3.1b2.tar.gz", "has_sig": false, "md5_digest": "a61d074ecd2045bd8e7c5646a1fc209d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30834, "upload_time": "2017-03-03T20:25:49", "url": "https://files.pythonhosted.org/packages/b9/26/07c51fa1f2f1fc8062ec40e822309a4ba2ef7e6f34eef2e01dad204c1f48/properties-0.3.1b2.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "02f13910e59979440c1ff30a7873fe69", "sha256": "3624262edca34db3bb2cb9a303567bc835e6c0ac8c88904ebf8b99e116f67c80" }, "downloads": -1, "filename": "properties-0.3.2.tar.gz", "has_sig": false, "md5_digest": "02f13910e59979440c1ff30a7873fe69", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35937, "upload_time": "2017-03-16T18:48:40", "url": "https://files.pythonhosted.org/packages/f7/de/0d2631e1356ecf485b649a19eb7d7851ee51dbe2d165d56e1d03e0ba1a56/properties-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "d214f690284a7aff429aca18a4aa2ccb", "sha256": "5c3747778b01bc0ec851662a41224faab1261cda1f87993aeae713b366ac84b6" }, "downloads": -1, "filename": "properties-0.3.3.tar.gz", "has_sig": false, "md5_digest": "d214f690284a7aff429aca18a4aa2ccb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36579, "upload_time": "2017-03-23T07:25:31", "url": "https://files.pythonhosted.org/packages/81/39/3d7dac15b04d8389c64396ad2788d59df184720e88029e466e53c02ad6bd/properties-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "d25b8e68d13e6234b9df981f12858039", "sha256": "8cb5873cde769f529f6bf9fb9997feb90bbec008788bec5d668f25a5908522fc" }, "downloads": -1, "filename": "properties-0.3.4.tar.gz", "has_sig": false, "md5_digest": "d25b8e68d13e6234b9df981f12858039", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37792, "upload_time": "2017-07-18T20:25:51", "url": "https://files.pythonhosted.org/packages/2e/af/9d04660f566da888dda648b0fe0e24be0e43a1951c3ddeeebe57dc332860/properties-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "89c07b178297fe4e0399b24c8fc6be94", "sha256": "97e7928708f197370a9821be1903c7d3b0e2047979db313640ebc67bc91ab291" }, "downloads": -1, "filename": "properties-0.3.5.tar.gz", "has_sig": false, "md5_digest": "89c07b178297fe4e0399b24c8fc6be94", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37841, "upload_time": "2017-07-20T22:36:17", "url": "https://files.pythonhosted.org/packages/34/32/9af278557e40842faa0c412df3dc76edd465f43d8e0188c04af08fe37769/properties-0.3.5.tar.gz" } ], "0.3.6b0": [ { "comment_text": "", "digests": { "md5": "e8ad14f0d68b1132ca7dc08ee93cef90", "sha256": "df46bc1dc12fb045cae8223951e4889661cd713c105eca7955cfea3f83b374b0" }, "downloads": -1, "filename": "properties-0.3.6b0.tar.gz", "has_sig": false, "md5_digest": "e8ad14f0d68b1132ca7dc08ee93cef90", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40967, "upload_time": "2017-09-09T08:48:26", "url": "https://files.pythonhosted.org/packages/b6/86/2b58c5ded3b90da0284637518af3717933fb89ed3257832b3cb74f8ad508/properties-0.3.6b0.tar.gz" } ], "0.3.6b1": [ { "comment_text": "", "digests": { "md5": "295b316fd3c7d645c96d747fdcf7ad38", "sha256": "d779284b30da41e1eb5de7cb40c6af092ffca8993109a8f0ebeacdcda39d9b80" }, "downloads": -1, "filename": "properties-0.3.6b1.tar.gz", "has_sig": false, "md5_digest": "295b316fd3c7d645c96d747fdcf7ad38", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41153, "upload_time": "2017-11-10T00:20:04", "url": "https://files.pythonhosted.org/packages/6d/11/55c284065e431e20933a925b80552d00f0aa36f8216e04e856cd77214614/properties-0.3.6b1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "10048bff6c1bc556e9fdb28d97546dc1", "sha256": "896098b884fc219816b8c91c1ab2c93e5f43773537eab65ab5636cc343428c0d" }, "downloads": -1, "filename": "properties-0.4.0.tar.gz", "has_sig": false, "md5_digest": "10048bff6c1bc556e9fdb28d97546dc1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42382, "upload_time": "2018-02-22T06:50:56", "url": "https://files.pythonhosted.org/packages/0f/22/fbe30f1db967f80f0604dc0f59abf6087c2eb074aab91759e45ba53d3ae2/properties-0.4.0.tar.gz" } ], "0.4.0b1": [ { "comment_text": "", "digests": { "md5": "ce94ea1d813a3d01b1db788ce50fdc42", "sha256": "e57f022faffe756e62fb4ee4ed50c74867d34f1a82db4f75e178fe679cefcb6c" }, "downloads": -1, "filename": "properties-0.4.0b1.tar.gz", "has_sig": false, "md5_digest": "ce94ea1d813a3d01b1db788ce50fdc42", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42384, "upload_time": "2018-02-16T21:07:17", "url": "https://files.pythonhosted.org/packages/ce/1e/bbaec4aeaef25feeb3dd1e80b30f8fa3148ba788a6fb3b4ca6cea34645ff/properties-0.4.0b1.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "08ca1b6b77cd838027e48a8b06a4c82c", "sha256": "ce38343ee09efd67206da428c8ec19beba819fa544d256cbc4e93ad9117a0385" }, "downloads": -1, "filename": "properties-0.5.0.tar.gz", "has_sig": false, "md5_digest": "08ca1b6b77cd838027e48a8b06a4c82c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47703, "upload_time": "2018-06-07T08:50:57", "url": "https://files.pythonhosted.org/packages/02/f4/48b1f4a012c6a33c838dcaa68f7af4a0714ebc2e1c9413b8728d1780fb73/properties-0.5.0.tar.gz" } ], "0.5.0b0": [ { "comment_text": "", "digests": { "md5": "1e68afcc3facfcab0d43ed52787d69d0", "sha256": "c7f26211f391ab9e63570d00b0fe4b067c07c6e538b313e9d95fe4add38d46b1" }, "downloads": -1, "filename": "properties-0.5.0b0.tar.gz", "has_sig": false, "md5_digest": "1e68afcc3facfcab0d43ed52787d69d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46317, "upload_time": "2018-03-29T08:32:05", "url": "https://files.pythonhosted.org/packages/6f/30/85ae3fbb4e62240e1c49cd720f967ec920e5c14ca4dfaefd98ae8f640063/properties-0.5.0b0.tar.gz" } ], "0.5.0b1": [ { "comment_text": "", "digests": { "md5": "2abe08f34300e45a0a268e588bf8b0da", "sha256": "0bea8a7b974375cfa94342d6122efb0e48dc019ab15c781a93a12c47cb8d92c1" }, "downloads": -1, "filename": "properties-0.5.0b1.tar.gz", "has_sig": false, "md5_digest": "2abe08f34300e45a0a268e588bf8b0da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46317, "upload_time": "2018-04-02T20:49:08", "url": "https://files.pythonhosted.org/packages/1a/d8/1b2c08f3ed2004c7e322e00fdeab187385dcca37d8eeaf019a7fe1ed2e8a/properties-0.5.0b1.tar.gz" } ], "0.5.0b2": [ { "comment_text": "", "digests": { "md5": "e7bb6df9f174876490cbeb0af261dea1", "sha256": "a26f85ba29dab0a79856940a1a004aa5e491c9aaff7fde5f373c1e32adf2b8fc" }, "downloads": -1, "filename": "properties-0.5.0b2.tar.gz", "has_sig": false, "md5_digest": "e7bb6df9f174876490cbeb0af261dea1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47608, "upload_time": "2018-05-04T07:36:31", "url": "https://files.pythonhosted.org/packages/2a/35/98ec23f375165d92622345c17e73f09cc6ca446c9df8435189fda4e41061/properties-0.5.0b2.tar.gz" } ], "0.5.0b3": [ { "comment_text": "", "digests": { "md5": "0838fb69b5e63d7762338d5d28a91355", "sha256": "f96d4b2495a364f513e940df9104ae30844a84c410eb071edcd2202a57137d2f" }, "downloads": -1, "filename": "properties-0.5.0b3.tar.gz", "has_sig": false, "md5_digest": "0838fb69b5e63d7762338d5d28a91355", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47625, "upload_time": "2018-05-04T21:05:47", "url": "https://files.pythonhosted.org/packages/94/88/77d3ff99bb9747cdb7e4cab7ccf2f010f372bcbc7c0bdb4b189ad68c8498/properties-0.5.0b3.tar.gz" } ], "0.5.0b4": [ { "comment_text": "", "digests": { "md5": "bed2d3414294a7fd9d060504beb2969e", "sha256": "80f5d75416a62d49212617d7a94d6a2d9e2bfae8eab46ca7ba3e14db3a6b9c94" }, "downloads": -1, "filename": "properties-0.5.0b4.tar.gz", "has_sig": false, "md5_digest": "bed2d3414294a7fd9d060504beb2969e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47698, "upload_time": "2018-05-04T22:56:27", "url": "https://files.pythonhosted.org/packages/bf/ff/b7ad3f0a4d27f4f3e8e74e95194257eb1917e74588aa342704b4949707bf/properties-0.5.0b4.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "adf84132b4a067ed0ff4d449b785be04", "sha256": "c8ad65e9f6596392fc4918f179248b0fae30e17dde2fa4667dfcccd064d827f1" }, "downloads": -1, "filename": "properties-0.5.1.tar.gz", "has_sig": false, "md5_digest": "adf84132b4a067ed0ff4d449b785be04", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47604, "upload_time": "2018-06-19T04:49:33", "url": "https://files.pythonhosted.org/packages/be/c2/741923ef444f53a14d88f0c30fa7c265abd5da18dd299d0ab951b7137e2f/properties-0.5.1.tar.gz" } ], "0.5.1b0": [ { "comment_text": "", "digests": { "md5": "e2530586c787e82798e4b16262e41dcd", "sha256": "3092a2f4030e3e8eae0f65c4153156d0af67b56b59ba13945b5d7158cc1a207a" }, "downloads": -1, "filename": "properties-0.5.1b0.tar.gz", "has_sig": false, "md5_digest": "e2530586c787e82798e4b16262e41dcd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47603, "upload_time": "2018-06-07T16:41:19", "url": "https://files.pythonhosted.org/packages/9c/76/1e67460b9eaadace3443be92c139f63eb02aeaa79d780f73dc077c909131/properties-0.5.1b0.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "8ddfa895b9e672110ba0df8b8cb600d6", "sha256": "9df178fd4c54b6442328423ad65c7a2c6b94cc4267ee47e3a3590ed2e2026efb" }, "downloads": -1, "filename": "properties-0.5.2.tar.gz", "has_sig": false, "md5_digest": "8ddfa895b9e672110ba0df8b8cb600d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47605, "upload_time": "2018-07-03T09:08:16", "url": "https://files.pythonhosted.org/packages/d6/2e/df31fa5386d88ca88331513f186b3f853c7c4e7645e032189119e613af33/properties-0.5.2.tar.gz" } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "e70b51598418722b9ee458d92c9bc711", "sha256": "2b92773313ff681833eecd7e1d62799d23ba27da33c842f953acaf3fc422be3b" }, "downloads": -1, "filename": "properties-0.5.3.tar.gz", "has_sig": false, "md5_digest": "e70b51598418722b9ee458d92c9bc711", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48336, "upload_time": "2018-08-17T16:35:39", "url": "https://files.pythonhosted.org/packages/61/9c/034bb67472f33d399a789875e98c3fc47c8ad9f6a59efbf23f3d65a6dd1e/properties-0.5.3.tar.gz" } ], "0.5.4": [ { "comment_text": "", "digests": { "md5": "502d43eaabf1459fb8e6eee430254075", "sha256": "eea9586540ce644868ba1ac0465adb39ba892c293027eec803fe7043fe609987" }, "downloads": -1, "filename": "properties-0.5.4.tar.gz", "has_sig": false, "md5_digest": "502d43eaabf1459fb8e6eee430254075", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48979, "upload_time": "2018-10-02T23:04:02", "url": "https://files.pythonhosted.org/packages/22/74/b635f83a423697799fea8e195f6bd44ce53ca12d76ae62b2cc8cb978980d/properties-0.5.4.tar.gz" } ], "0.5.5": [ { "comment_text": "", "digests": { "md5": "f5c0e49a8605e04e96f2d52827eed169", "sha256": "9a3f7f858531818dc5ac5f3c15046f0958430bb1ca1794951c100af0edbe7b3f" }, "downloads": -1, "filename": "properties-0.5.5.tar.gz", "has_sig": false, "md5_digest": "f5c0e49a8605e04e96f2d52827eed169", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48670, "upload_time": "2019-01-16T01:34:57", "url": "https://files.pythonhosted.org/packages/85/52/acb19946bb4913446be94f5c63ce07b44ec0279984c72810a6d0cf38ef3a/properties-0.5.5.tar.gz" } ], "0.5.5b0": [ { "comment_text": "", "digests": { "md5": "fb6fd44ad3972aa394f87ab0e2344b87", "sha256": "9fdb9d398869cc93133342c57017a09ff4c5a2b6227e9b08555c80daf6a9b78e" }, "downloads": -1, "filename": "properties-0.5.5b0.tar.gz", "has_sig": false, "md5_digest": "fb6fd44ad3972aa394f87ab0e2344b87", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49477, "upload_time": "2018-11-30T06:38:39", "url": "https://files.pythonhosted.org/packages/ba/8b/35ea5f5c457490e69228f798be1a98894e0e1ae948186e7ee772ab02e1ed/properties-0.5.5b0.tar.gz" } ], "0.5.6": [ { "comment_text": "", "digests": { "md5": "d951a9acba1539b61b085bea9abae958", "sha256": "2d69381563ea2c8f7caab3d36b210dc56068f3618ce1139701a3ef1bc83f39da" }, "downloads": -1, "filename": "properties-0.5.6.tar.gz", "has_sig": false, "md5_digest": "d951a9acba1539b61b085bea9abae958", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48641, "upload_time": "2019-03-01T21:30:37", "url": "https://files.pythonhosted.org/packages/9f/d1/40c260d71846b659e6e6c837c376bfec326beb036aea26f96f7fc17fd30c/properties-0.5.6.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "046d35d9a1769471dd607d2bba6344b6", "sha256": "a28649f07154eb3819030e7e75b888321bec6418fc96de0f0bdbc72e5814baab" }, "downloads": -1, "filename": "properties-0.6.0.tar.gz", "has_sig": false, "md5_digest": "046d35d9a1769471dd607d2bba6344b6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51964, "upload_time": "2019-09-18T20:06:24", "url": "https://files.pythonhosted.org/packages/99/2b/956de006d06fdea2e26b10afb577f2fcf9a0110b0bc86429d53eb3bd85ec/properties-0.6.0.tar.gz" } ], "0.6.0b0": [ { "comment_text": "", "digests": { "md5": "d621e84972f8335897b7da464c902e40", "sha256": "7895960f3040d2e176cb374068c2003f83aa5a2424b04f4fc7bbaf898acc27cf" }, "downloads": -1, "filename": "properties-0.6.0b0.tar.gz", "has_sig": false, "md5_digest": "d621e84972f8335897b7da464c902e40", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49126, "upload_time": "2019-04-16T20:14:29", "url": "https://files.pythonhosted.org/packages/f6/cb/ba544b3498afbb279a8d5f9cc31ddb85f64dd063e20199d0312b5688a7dd/properties-0.6.0b0.tar.gz" } ], "0.6.0b1": [ { "comment_text": "", "digests": { "md5": "610abbda0b4e8dafa419435a9d177ac8", "sha256": "ade903a60bbc1edfaca603964f5984bb3331c3e230c3e38decd3a031f1f4842b" }, "downloads": -1, "filename": "properties-0.6.0b1.tar.gz", "has_sig": false, "md5_digest": "610abbda0b4e8dafa419435a9d177ac8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49124, "upload_time": "2019-04-29T22:29:10", "url": "https://files.pythonhosted.org/packages/ea/8b/4bb57f8648eb5eff66190a6f4558891b0e1332445b2fb9957667b945ef13/properties-0.6.0b1.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "17a21f4833a23714abe2f776f93a6e62", "sha256": "b119ce4c53f4717fa29371c1bb929f422dda7ed90a4559b3583ea77389177263" }, "downloads": -1, "filename": "properties-0.6.1.tar.gz", "has_sig": false, "md5_digest": "17a21f4833a23714abe2f776f93a6e62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52000, "upload_time": "2019-09-23T22:20:56", "url": "https://files.pythonhosted.org/packages/c0/9a/cd2def3421cd077d80d4973c802d29dcb3fba625190b3678480f228a85bf/properties-0.6.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "17a21f4833a23714abe2f776f93a6e62", "sha256": "b119ce4c53f4717fa29371c1bb929f422dda7ed90a4559b3583ea77389177263" }, "downloads": -1, "filename": "properties-0.6.1.tar.gz", "has_sig": false, "md5_digest": "17a21f4833a23714abe2f776f93a6e62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52000, "upload_time": "2019-09-23T22:20:56", "url": "https://files.pythonhosted.org/packages/c0/9a/cd2def3421cd077d80d4973c802d29dcb3fba625190b3678480f228a85bf/properties-0.6.1.tar.gz" } ] }