{ "info": { "author": "Johan L\u00fcbcke", "author_email": "johan.lubcke@trioptima.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6" ], "description": ".. image:: https://travis-ci.org/TriOptima/tri.declarative.svg?branch=master\n :target: https://travis-ci.org/TriOptima/tri.declarative\n.. image:: http://codecov.io/github/TriOptima/tri.declarative/coverage.svg?branch=master\n :target: http://codecov.io/github/TriOptima/tri.declarative?branch=master\n\ntri.declarative\n===============\n\ntri.declarative contains tools that make it easy to write declarative code. This includes:\n\n- `class decorators`_ to define classes with subclass semantics in the style of django Model classes\n- recursively evaluating_ embedded lambda expressions in complex data structures\n- recursively filtering_ of complex data structures\n- `keyword argument dispatching`_\n- `get/set attribute given a path string`_ (e.g. 'foo__bar__baz')\n\n\nClass decorators\n----------------\n\nWith just a few lines of code, turn your API from:\n\n.. code-block:: python\n\n quux = Foo(things=[Bar(name='a', param=1), Bar(name='b', param=2), Bar(name='c', param=2)], baz=3)\n\ninto:\n\n.. code-block:: python\n\n class Quux(Foo):\n a = Bar(param=1)\n b = Bar(param=2)\n c = Bar(param=2)\n\n class Meta:\n baz = 3\n\nAnd you can still use the first style when it's more convenient!\n\nMore detailed usage examples on `@declarative`_ below.\n\n\nEvaluating\n----------\n\n.. code-block:: python\n\n d = dict(\n foo=lambda x: x*2,\n bar=lambda y: y+5,\n baz=[\n foo=lambda x: x*6,\n ],\n )\n\n # evaluate only one level\n assert evaluate(d, x=2) == dict(\n foo=4,\n bar=lambda y: y+5, # this function doesn't match the signature so isn't evaluated\n baz=[\n foo=lambda x: x*6, # one level down so isn't evaluated\n ],\n )\n\n # evaluate recursively\n assert evaluate_recursive(d, x=2) == dict(\n foo=4,\n bar=lambda y: y+5, # this function doesn't match the signature so isn't evaluated\n baz=[\n foo=12,\n ],\n )\n\n\nFiltering\n---------\n\n.. code-block:: python\n\n d = dict(\n foo=dict(\n show=False,\n x=1,\n ),\n bar=dict(\n show=True,\n x=2,\n ),\n )\n\n assert filter_show_recursive(d) == dict(\n bar=dict(\n show=True,\n x=2,\n ),\n )\n\n\nKeyword argument dispatching\n----------------------------\n\n@dispatch:\n\n.. code-block:: python\n\n @dispatch(\n bar={},\n baz__foo=2)\n def foo(bar, baz):\n do_bar(**bar)\n do_baz(**baz)\n\n\n\nGet/set attribute given a path string\n-------------------------------------\n\n.. code-block:: python\n\n class Foo:\n def __init__(a):\n self.a = a\n\n class Bar:\n def __init__(b):\n self.b = b\n\n class Baz:\n def __init__(c):\n self.c = c\n\n x = Foo(Bar(Baz(c=3)))\n\n assert getattr_path(x, 'a__b__c') == 3\n\n assert setattr_path(x, 'a__b__c', 10)\n assert getattr_path(x, 'a__b__c') == 10\n\n\nRunning tests\n-------------\n\nYou need tox installed then just `make test`.\n\n\nLicense\n-------\n\nBSD\n\n\nDocumentation\n-------------\n\nhttps://trideclarative.readthedocs.org.\n\n\nUsage\n=====\n\n\n@declarative\n------------\n\nIn the example below, the :code:`@declarative(str)` decorator will ensure that all :code:`str` members of class Foo will be\ncollected and sent as :code:`members` constructor keyword argument.\n\n.. code-block:: python\n\n from tri_declarative import declarative\n\n @declarative(str)\n class Foo:\n bar = 'barbar'\n baz = 'bazbaz'\n boink = 17\n\n def __init__(self, members):\n assert members['bar'] == 'barbar'\n assert members['baz'] == 'bazbaz'\n assert 'boink' not in members\n\n f = Foo()\n\nThe value of the :code:`members` argument will also be collected from sub-classes:\n\n.. code-block:: python\n\n from tri_declarative import declarative\n\n @declarative(str)\n class Foo:\n\n def __init__(self, members):\n assert members['bar'] == 'barbar'\n assert members['baz'] == 'bazbaz'\n\n class MyFoo(Foo):\n bar = 'barbar'\n baz = 'bazbaz'\n\n def __init__(self):\n super(MyFoo, self).__init__()\n\n f = MyFoo()\n\n\nThe :code:`members` argument can be given another name (:code:`things` in the example below).\n\n.. code-block:: python\n\n from tri_declarative.declarative import declarative\n\n @declarative(str, 'things')\n class Foo:\n\n bar = 'barbar'\n\n def __init__(self, **kwargs):\n assert 'things' in kwargs\n assert kwargs['things']['bar'] == 'barbar'\n\n f = Foo()\n\n\nNote that the collected dict is ordered by class inheritance and by using\n:code:`sorted` of the values within each class. (In the 'str' example, :code:`sorted` yields in alphabetical order).\n\nAlso note that the collection of *class* members based on their class does *not* interfere with *instance* constructor\nargument of the same type.\n\n.. code-block:: python\n\n from tri_declarative import declarative\n\n @declarative(str)\n class Foo:\n charlie = '3'\n alice = '1'\n\n def __init__(self, members):\n assert list(members.items()) == [('alice', '1'), ('charlie', '3'),\n ('bob', '2'), ('dave', '4'),\n ('eric', '5')])\n assert 'animal' not in members\n\n\n class MyFoo(Foo):\n dave = '4'\n bob = '2'\n\n class MyOtherFoo(MyFoo):\n eric = '5'\n\n def __init__(self, animal)\n assert animal == 'elephant'\n\n f = MyOtherFoo('elephant')\n\n\nReal world use-case\n-------------------\n\nBelow is a more complete example of using @declarative:\n\n.. code-block:: python\n\n from tri_declarative import declarative, creation_ordered\n\n\n @creation_ordered\n class Field:\n pass\n\n\n class IntField(Field):\n def render(self, value):\n return '%s' % value\n\n\n class StringField(Field):\n def render(self, value):\n return \"'%s'\" % value\n\n\n @declarative(Field, 'table_fields')\n class SimpleSQLModel:\n\n def __init__(self, **kwargs):\n self.table_fields = kwargs.pop('table_fields')\n\n for name in kwargs:\n assert name in self.table_fields\n setattr(self, name, kwargs[name])\n\n def insert_statement(self):\n return 'INSERT INTO %s(%s) VALUES (%s)' % (self.__class__.__name__,\n ', '.join(self.table_fields.keys()),\n ', '.join([field.render(getattr(self, name))\n for name, field in self.table_fields.items()]))\n\n\n class User(SimpleSQLModel):\n username = StringField()\n password = StringField()\n age = IntField()\n\n\n my_user = User(username='Bruce_Wayne', password='Batman', age=42)\n assert my_user.username == 'Bruce_Wayne'\n assert my_user.password == 'Batman'\n assert my_user.insert_statement() == \"INSERT INTO User(username, password, age) VALUES ('Bruce_Wayne', 'Batman', 42)\"\n\n # Fields are ordered by creation time (due to having used the @creation_ordered decorator)\n assert list(my_user.get_declared('table_fields').keys()) == ['username', 'password', 'age']\n\n\n@with_meta\n----------\n\nClass decorator to enable a class (and it's sub-classes) to have a 'Meta' class attribute.\n\nThe members of the Meta class will be injected as arguments to constructor calls. e.g.:\n\n.. code-block:: python\n\n from tri_declarative import with_meta\n\n @with_meta\n class Foo:\n\n class Meta:\n foo = 'bar'\n\n def __init__(self, foo, buz):\n assert foo == 'bar'\n assert buz == 'buz'\n\n foo = Foo(buz='buz')\n\n # Members of the 'Meta' class can be accessed thru the get_meta() class method.\n assert foo.get_meta() == {'foo': 'bar'}\n assert Foo.get_meta() == {'foo': 'bar'}\n\n Foo() # Crashes, has 'foo' parameter, but no has no 'buz' parameter.\n\n\nThe passing of the merged name space to the constructor is optional.\nIt can be disabled by passing :code:`add_init_kwargs=False` to the decorator.\n\n.. code-block:: python\n\n from tri_declarative import with_meta\n\n @with_meta(add_init_kwargs=False)\n class Foo:\n class Meta:\n foo = 'bar'\n\n Foo() # No longer crashes\n assert Foo().get_meta() == {'foo': 'bar'}\n\n\nAnother example:\n\n.. code-block:: python\n\n from tri_declarative import with_meta\n\n class Foo:\n\n class Meta:\n foo = 'bar'\n bar = 'bar'\n\n @with_meta\n class Bar(Foo):\n\n class Meta:\n foo = 'foo'\n buz = 'buz'\n\n def __init__(self, *args, **kwargs):\n assert kwargs['foo'] == 'foo' # from Bar (overrides Foo)\n assert kwargs['bar'] == 'bar' # from Foo\n assert kwargs['buz'] == 'buz' # from Bar\n\n\nThis can be used e.g to enable sub-classes to modify constructor default arguments.\n\n\nChangelog\n---------\n\n5.7.0 (2020-12-18)\n------------------\n\n* Make getattr_path more in line with the standard library getattr semantics\n\n If a default value is provided, return that on missing attributes\n\n If no default value is given, give a more detailed error message of what was missing\n\n* Added the special case of the empty path returning the object\n\n\n5.6.0 (2020-12-02)\n------------------\n\n* Fix corner case of class Meta failing to merge with None namespace values\n\n\n5.5.0 (2020-08-21)\n------------------\n\n* Include tri.struct 4.x as possible requirement\n\n\n5.4.1 (2020-06-34)\n------------------\n\n* Optimizations\n\n\n5.4.0 (2020-04-16)\n------------------\n\n* Minor bug fix on trailing comma explanation TypeException\n\n* Fix bug when nesting `@class_shortcut` with same name i sub classes\n\n* Refactor code to separate modules to get better stack traces\n\n\n5.3.0 (2020-04-01)\n------------------\n\n* Enable `@class_shortcut` to override baseclass shortcuts with the same name.\n\n* Fix `@with_meta` failing on method declarations with `@staticmethod` declaration\n\n\n5.2.0 (2020-02-28)\n------------------\n\n* The namespace merge is narrowed to only affect the @with_meta case.\n\n* Handle calling `Namespace` with `call_target__attribute=None`\n\n\n5.1.1 (2020-02-11)\n------------------\n\n* Improve namespace merge in @with_meta to not trip up @declarative\n\n\n5.1.0 (2020-02-11)\n------------------\n\n* Fix @with_meta argument injector to merge namespaces\n\n\n5.0.1 (2019-02-03)\n------------------\n\n* A minor update to the documentation generation to make it play nice with rST\n\n\n5.0.0 (2019-01-30)\n------------------\n\n* Added private field to shortcuts: `__tri_declarative_shortcut_stack`. This is useful to be able to figure out a shortcut stack after the fact\n\n* `get_callable_description` thought stuff that contained a lambda in its string representation was a lambda\n\n* Removed all deprecated APIs/behaviors:\n * `creation_ordered`\n * The promotion of string values to keys in `Namespace`\n\n* Much improved error messages\n\n\n4.0.1 (2019-10-23)\n------------------\n\n* Bugfix to correctly handle Namespace as callable/not callable depending on content\n\n\n4.0.0 (2019-10-11)\n------------------\n\n* `get_meta()` now collects extra arguments in a `Namespace` to get consistent override behaviour.\n\n* `should_show` no longer accepts a callable as a valid return value. It will assert on this, because it's always a mistake.\n\n* Added `evaluate_strict` and `evaluate_recursive_strict` that will not accept callables left over after the evaluation. If possible prefer these methods because they will stop the user of your library from making the mistake of not matching the given signature and ending up with an unevaluated callable in the output.\n\n\n3.1.0 (2019-06-28)\n------------------\n\n* Fixed issues when Namespace contained a key called any of items, values, keys, or get\n\n* Removed sorting on Namespace kwargs that isn't needed in python 3 anymore. The sorting also destroys the given order which can be surprising\n\n* Removed old obsolete functions collect_namespaces, extract_subkeys, and setdefaults\n\n\n3.0.0 (2019-06-10)\n------------------\n\n* Renamed module from `tri.declarative` to `tri_declarative`. This is a breaking change\n\n* Dropped support for python2\n\n\n2.0.0 (2019-04-12)\n------------------\n\n* Fixed `get_signature` cache to not pollute struct-like dicts\n\n* New call_target semantics for class method shortcuts, this is a potential breaking change\n\n\n1.2.1 (2019-13-15)\n------------------\n\n* Improved documentation output\n\n\n1.2.0 (2019-13-14)\n------------------\n\n* Add get_members function to enable reuse of @declarative attribute collection\n\n* Add @class_shortcut decorator to enable @with_meta aware class shortcuts\n\n\n1.1.0 (2018-11-22)\n------------------\n\n* Added `generate_rst_docs` function.\n\n\n1.0.6 (2018-09-28)\n------------------\n\n* `Shortcut` is now a special case when merging `Namespace` objects.\n When already in a Namespace, a Shortcut now get overwritten by `setitem_path()`, not merged into the written value.\n\n\n1.0.5 (2018-09-21)\n------------------\n\n* Fix broken handling of empty key\n\n\n1.0.4 (2018-09-21)\n------------------\n\n* Cleanup Namespace path logic and make sure it is symmetrical and tested.\n\n* Added deprecation warning on string to dict promotion on namespace merge.\n\n\n1.0.3 (2018-06-26)\n~~~~~~~~~~~~~~~~~~\n\n* Fixed release functionality\n\n\n1.0.2 (2018-06-18)\n~~~~~~~~~~~~~~~~~~\n\n* Don't support `RefinableObject` in `evaluate_recursive`. This was a mistake.\n\n\n1.0.1 (2018-06-15)\n~~~~~~~~~~~~~~~~~~\n\n* Support `RefinableObject` in `evaluate_recursive`.\n\n\n1.0.0 (2018-05-23)\n~~~~~~~~~~~~~~~~~~\n\n* Cleanup deprecation warnings from inspect.getargspec\n\n\n0.34.0 (2017-08-21)\n~~~~~~~~~~~~~~~~~~~\n\n* Fix bug in 0.33.0 when promoting callable to `Namespace`.\n\n\n0.33.0 (2017-08-21)\n~~~~~~~~~~~~~~~~~~~\n\n* Fix bug when promoting callable to `Namespace`.\n\n* Fix handling of `EMPTY` marker.\n\n\n0.32.0 (2017-07-04)\n~~~~~~~~~~~~~~~~~~~\n\n* Added promoting callable namespace members to `Namespace` with `call_target` in \n `setdefaults_path`.\n\n\n0.31.0 (2017-06-15)\n~~~~~~~~~~~~~~~~~~~\n\n* Improve `sort_after` to allow more combinations of `after=...` specifications.\n e.g. by name of an entry also moved by spec.\n\n* Changed name of first parameter of `setdefaults_path` to `__target__` to avoid\n collitions with namespace parameters.\n\n* Added `RefinableObject` base for reuse by classes wanting to be able to be configured\n via constructor kwarg parameters in a declarative fashion. (The namespace of possible \n constructor overrides are declared with `Refinable()` for values and the decorator \n `@refinable` for methods.\n\n* Added first incarnation of crawling the definitions to recursively find available \n parameters on objects and their aggregates.\n\n* Added `Shortcut` abstraction to be able to find pre-defined set of overrides of \n `RefinableObject` classes.\n\n\n0.30.0 (2017-02-10)\n~~~~~~~~~~~~~~~~~~~\n\n* `evaluate` and `evaluate_recursive` also works for methods as well as for functions.\n\n\n0.29.0 (2016-09-12)\n~~~~~~~~~~~~~~~~~~~\n\n* Fixed loop detection in flatten for `Namespace`\\ s. This resulted in data\n corruption.\n\n\n0.28.0 (2016-07-15)\n~~~~~~~~~~~~~~~~~~~\n\n* Added `Namespace` subclass of `tri.struct.Struct` to explicit capture the\n path splitting semantics. (And added method for flattening a `Namespace` back\n to path notation.)\n\n\n0.27.0 (2016-07-13)\n~~~~~~~~~~~~~~~~~~~\n\n* Fix bug in `evaluate` signature detection with optional arguments. \n (`lambda a, b=17: a+b` was correctly matched but `lambda b, a=17: a+b` was not)\n\n\n0.26.0 (2016-05-06)\n~~~~~~~~~~~~~~~~~~~\n\n* Added `EMPTY` marker to `setdefaults_path` to avoid mixup when empty dict is \n provided in function defaults.\n\n\n0.25.0 (2016-04-28)\n~~~~~~~~~~~~~~~~~~~\n\n* Added @dispatch decorator\n\n\n0.24.0 (2016-04-20)\n~~~~~~~~~~~~~~~~~~~\n\n* Fix bug in `setdefault_path` tripping up on key ordering.\n\n* Dropped `namespace_factory` keyword argument to `setdefaults_path` not likely\n ever beeing used.\n\n\n0.23.0 (2016-04-15)\n~~~~~~~~~~~~~~~~~~~\n\n* `setdefaults_path` now accepts multiple default dicts. (To simplify the pattern of\n shortcuts in tri.form, tri.query and tri.table where we now will end up with:\n `new_kwargs = setdefaults_path(Struct(), kwargs, dict(....))`\n\n\n0.22.0 (2016-03-24)\n~~~~~~~~~~~~~~~~~~~\n\n* `sort_after()` should produce an error when attempting to sort after non-existant keys\n\n* Tweaked namespace merge in `setdefaults_path`\n\n\n0.21.0 (2016-03-01)\n~~~~~~~~~~~~~~~~~~~\n\n* Fix corner case in collect_namespaces where one parameter imply a value and\n others imply a namespace.\n\n* Added `setdefaults_path` helper with `__` namespace traversal.\n\n\n0.20.0 (2016-02-29)\n~~~~~~~~~~~~~~~~~~~\n\n* Added `assert_kwargs_not_empty` convenience function.\n\n* Improved documentation.\n\n\n0.19.0 (2016-01-12)\n~~~~~~~~~~~~~~~~~~~\n\n* When making instances of a class decorated with `@declarative` the declared\n values are copied (shallow) before being passed to `__init__`.\n\n* Instances will get an own copy of the declared attributes written to their\n `__dict__`\n\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/TriOptima/tri.declarative", "keywords": "tri.declarative", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "tri.declarative", "package_url": "https://pypi.org/project/tri.declarative/", "platform": "", "project_url": "https://pypi.org/project/tri.declarative/", "project_urls": { "Homepage": "https://github.com/TriOptima/tri.declarative" }, "release_url": "https://pypi.org/project/tri.declarative/5.7.0/", "requires_dist": [ "tri.struct (<5.0.0,>=3.0.0)" ], "requires_python": "", "summary": "tri.declarative contains class decorators to define classes with subclass semantics in the style of django Model classes.", "version": "5.7.0", "yanked": false, "yanked_reason": null }, "last_serial": 8932765, "releases": { "0.17.0": [ { "comment_text": "", "digests": { "md5": "c2068ff9a2721c2621ca763117912126", "sha256": "f5ab5a9dbdc94ac10b251cecea78ff5b61849ffcfed82f5a7e7a41f65c798a45" }, "downloads": -1, "filename": "tri.declarative-0.17.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c2068ff9a2721c2621ca763117912126", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10772, "upload_time": "2015-12-14T12:49:45", "upload_time_iso_8601": "2015-12-14T12:49:45.382390Z", "url": "https://files.pythonhosted.org/packages/37/32/dbd44cfbaf2864ce997992b1df16ae480038003d63d69f06e5de8232384a/tri.declarative-0.17.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "3dab4cee4b90281f7369edb202b94951", "sha256": "4548f86239e6fffbfed188c6bea42a8febf30d239488b529c3f5375b2e1531b2" }, "downloads": -1, "filename": "tri.declarative-0.17.0.tar.gz", "has_sig": false, "md5_digest": "3dab4cee4b90281f7369edb202b94951", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9848, "upload_time": "2015-12-14T12:49:50", "upload_time_iso_8601": "2015-12-14T12:49:50.468543Z", "url": "https://files.pythonhosted.org/packages/70/56/fd4f34443b237c40133fc3fe69ef86ed624e672d02e344f87abd2b1bf755/tri.declarative-0.17.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.18.0": [ { "comment_text": "", "digests": { "md5": "21fe41350dd545bb9e68e6248a6e3de5", "sha256": "94fb9538252b9ea9c53176c5c2c4bea997cd7c3cb356164067850030df2d90a5" }, "downloads": -1, "filename": "tri.declarative-0.18.0-py2.7.egg", "has_sig": false, "md5_digest": "21fe41350dd545bb9e68e6248a6e3de5", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 14668, "upload_time": "2015-12-18T06:59:13", "upload_time_iso_8601": "2015-12-18T06:59:13.402435Z", "url": "https://files.pythonhosted.org/packages/76/48/8a3e5ce0517c6c89f7bcd3402a1be6f53602ac2b95cd9f14c474cd06c220/tri.declarative-0.18.0-py2.7.egg", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "109f18a1fe43535a6397a0cd629e0a6c", "sha256": "0c173fc52773b8a99002941c60501cb46ee734fb202529405e2a93e52e898689" }, "downloads": -1, "filename": "tri.declarative-0.18.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "109f18a1fe43535a6397a0cd629e0a6c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10617, "upload_time": "2015-12-18T06:59:08", "upload_time_iso_8601": "2015-12-18T06:59:08.794676Z", "url": "https://files.pythonhosted.org/packages/2f/f7/ba9d8fcd844fd1a7c5b7cdd19f50a6c88a9838c9f90747330899bb762d59/tri.declarative-0.18.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2b1c26fef3029b62fb37a967d2fb005a", "sha256": "e6fdaee73e5aa461aa4ce012e406272f5f28c44d35404ff7946307e9bf1b3fcf" }, "downloads": -1, "filename": "tri.declarative-0.18.0.tar.gz", "has_sig": false, "md5_digest": "2b1c26fef3029b62fb37a967d2fb005a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10558, "upload_time": "2015-12-18T06:59:18", "upload_time_iso_8601": "2015-12-18T06:59:18.371733Z", "url": "https://files.pythonhosted.org/packages/01/1d/6736325287f70f7bb633be3a28951042b60a9fe7925b0feacba2742406d5/tri.declarative-0.18.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.19.0": [ { "comment_text": "", "digests": { "md5": "caaf7d68e07a7dea6435d2c36a923022", "sha256": "0e40a5619faa8b4e304200104854d0b4490f509df763a800e73d2e47cd306c55" }, "downloads": -1, "filename": "tri.declarative-0.19.0.tar.gz", "has_sig": false, "md5_digest": "caaf7d68e07a7dea6435d2c36a923022", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11104, "upload_time": "2016-01-12T14:33:47", "upload_time_iso_8601": "2016-01-12T14:33:47.301502Z", "url": "https://files.pythonhosted.org/packages/f1/a5/38b7c2cebb4deecd2f48e83df63392b39ab5f7b4ec8912b50e2806eb2bbc/tri.declarative-0.19.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.20.0": [ { "comment_text": "", "digests": { "md5": "6514cf1ebe45f9084da2c22cbde2ec4d", "sha256": "ec475a08c07f02a73ff93b785f142de3bcba37c1c3bc24d1f5013908ce776a8f" }, "downloads": -1, "filename": "tri.declarative-0.20.0.tar.gz", "has_sig": false, "md5_digest": "6514cf1ebe45f9084da2c22cbde2ec4d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12750, "upload_time": "2016-02-29T20:58:41", "upload_time_iso_8601": "2016-02-29T20:58:41.898524Z", "url": "https://files.pythonhosted.org/packages/6d/21/bd4471d54d00aa2f1b5ade90aec19f077f0b046f727db16f3fffba1077fa/tri.declarative-0.20.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.21.0": [ { "comment_text": "", "digests": { "md5": "a043e415affbecd12468a76606ce5ee0", "sha256": "8536a5a70dcfc6336e493248db8adfebe6aa19da23fbfcc4daa26abfaa278ffb" }, "downloads": -1, "filename": "tri.declarative-0.21.0.tar.gz", "has_sig": false, "md5_digest": "a043e415affbecd12468a76606ce5ee0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13088, "upload_time": "2016-03-01T19:27:37", "upload_time_iso_8601": "2016-03-01T19:27:37.510772Z", "url": "https://files.pythonhosted.org/packages/20/58/754d3cb75b365fbe139a2f5a9af10fe85575df345e62f99d585b2ec0e544/tri.declarative-0.21.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.22.0": [ { "comment_text": "", "digests": { "md5": "22d44752b1e5f3cad611fff7b072aa50", "sha256": "5bcd046fcdc727ae3de51adf851603ffd30df168e63d018fc8f4039cf15d2a80" }, "downloads": -1, "filename": "tri.declarative-0.22.0.tar.gz", "has_sig": false, "md5_digest": "22d44752b1e5f3cad611fff7b072aa50", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13430, "upload_time": "2016-03-24T09:46:15", "upload_time_iso_8601": "2016-03-24T09:46:15.713965Z", "url": "https://files.pythonhosted.org/packages/bd/f9/0ad655a95d3f7a3edbc24bea9f27dc958281e72e84115e9a3ba0b59e413f/tri.declarative-0.22.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.23.0": [ { "comment_text": "", "digests": { "md5": "8e416ff2a6c3e8ca8b8a3ca6e26bf995", "sha256": "e6e33f1cf11c66948da91d9097f69d1612c219c229dcddc5a480cffcb4d8c030" }, "downloads": -1, "filename": "tri.declarative-0.23.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8e416ff2a6c3e8ca8b8a3ca6e26bf995", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13874, "upload_time": "2016-04-18T07:17:54", "upload_time_iso_8601": "2016-04-18T07:17:54.340189Z", "url": "https://files.pythonhosted.org/packages/04/8b/3b4ee4feb40a0fa662f66795d8355c7603dbd1f24ddda6e534b8e5f2f040/tri.declarative-0.23.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "0a4c90b81d4597633ccc18e719c2a647", "sha256": "d74c5e72ff01d0f087ee4526f02fcdd67a5243563119993341cd079c4bc88de4" }, "downloads": -1, "filename": "tri.declarative-0.23.0.tar.gz", "has_sig": false, "md5_digest": "0a4c90b81d4597633ccc18e719c2a647", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12756, "upload_time": "2016-04-18T07:17:59", "upload_time_iso_8601": "2016-04-18T07:17:59.679567Z", "url": "https://files.pythonhosted.org/packages/fe/42/f2284d318e9ed414ed0af04952953b32a7221025acfc2242186b1295b933/tri.declarative-0.23.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.24.0": [ { "comment_text": "", "digests": { "md5": "a8d397f5345011d728f3d0b3b4014ae2", "sha256": "e29cebf9251e4abcdc7fcb56d92ff881bf28249b2e13fd6bfed7c86c0f272756" }, "downloads": -1, "filename": "tri.declarative-0.24.0.tar.gz", "has_sig": false, "md5_digest": "a8d397f5345011d728f3d0b3b4014ae2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13832, "upload_time": "2016-04-20T07:03:10", "upload_time_iso_8601": "2016-04-20T07:03:10.621311Z", "url": "https://files.pythonhosted.org/packages/f9/09/4bdf8087f71646305875dcdfe03ce8130bdc1012e2ca133469a08aa6120c/tri.declarative-0.24.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.25.0": [ { "comment_text": "", "digests": { "md5": "6a8658129ab379f70f99d162bd4a11a0", "sha256": "86cb96df8a007d1937bffdac35e03665cd086e154fe55e5bc0e4d586f31ecf4a" }, "downloads": -1, "filename": "tri.declarative-0.25.0.tar.gz", "has_sig": false, "md5_digest": "6a8658129ab379f70f99d162bd4a11a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13903, "upload_time": "2016-04-28T11:58:24", "upload_time_iso_8601": "2016-04-28T11:58:24.616165Z", "url": "https://files.pythonhosted.org/packages/8c/4e/67d91b3773c8c63fbb7db4483d7388a0b364a26782dcd4f9237c0ec6aa1b/tri.declarative-0.25.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.26.0": [ { "comment_text": "", "digests": { "md5": "2ec743f3eaf472fcea93873f962e3233", "sha256": "6a6555ca87f0bb53710efc11aeef3c06ba24684ffa076f6b7ba413dca88e6729" }, "downloads": -1, "filename": "tri.declarative-0.26.0.tar.gz", "has_sig": false, "md5_digest": "2ec743f3eaf472fcea93873f962e3233", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14047, "upload_time": "2016-05-06T10:52:30", "upload_time_iso_8601": "2016-05-06T10:52:30.730159Z", "url": "https://files.pythonhosted.org/packages/c1/5e/a838124da3865b4bb6868898e06d036d0bb45fad5e0efe024b44f710365c/tri.declarative-0.26.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.27.0": [ { "comment_text": "", "digests": { "md5": "0167889ab71cc779115685af626fb460", "sha256": "2a9786c75c0631a26c2806380370e8315a762c7df87945d41bb23001fb38202e" }, "downloads": -1, "filename": "tri.declarative-0.27.0.tar.gz", "has_sig": false, "md5_digest": "0167889ab71cc779115685af626fb460", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14188, "upload_time": "2016-07-15T11:26:04", "upload_time_iso_8601": "2016-07-15T11:26:04.215342Z", "url": "https://files.pythonhosted.org/packages/68/3d/1b315b509f87675bde663c976fe3bc18613610c9328affb15766c9444e26/tri.declarative-0.27.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.28.0": [ { "comment_text": "", "digests": { "md5": "39cd5260111f56cf1a85d84e7109ffc4", "sha256": "c74339be5580c7abdc279d7a686e6606f82da3746fb781aad491845eb612fbde" }, "downloads": -1, "filename": "tri.declarative-0.28.0.tar.gz", "has_sig": false, "md5_digest": "39cd5260111f56cf1a85d84e7109ffc4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14709, "upload_time": "2016-07-15T11:25:38", "upload_time_iso_8601": "2016-07-15T11:25:38.178130Z", "url": "https://files.pythonhosted.org/packages/ed/e7/7f99fda09e6777007e52dc445c83bac880d6d7edba9a0b3ebda18c7fc034/tri.declarative-0.28.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.29.0": [ { "comment_text": "", "digests": { "md5": "55586538480792d89ee2545fae663a7f", "sha256": "6baaf61fac9b752284e9eca7f2b0fc32a2b5bb7e4539f60cf7b1235a67834800" }, "downloads": -1, "filename": "tri.declarative-0.29.0.tar.gz", "has_sig": false, "md5_digest": "55586538480792d89ee2545fae663a7f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14829, "upload_time": "2016-09-12T13:18:40", "upload_time_iso_8601": "2016-09-12T13:18:40.939812Z", "url": "https://files.pythonhosted.org/packages/72/dd/dc5529403948eba7b9f127153f6e2898804bd2594a158806bb0ea270f04e/tri.declarative-0.29.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.30.0": [ { "comment_text": "", "digests": { "md5": "04709aeca055c5181369b66a3ba31899", "sha256": "7f92756f93a3d2ed7ead38e570357ca3f466e5907faa43fb64700910f4d92e59" }, "downloads": -1, "filename": "tri.declarative-0.30.0.tar.gz", "has_sig": false, "md5_digest": "04709aeca055c5181369b66a3ba31899", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14986, "upload_time": "2017-02-10T13:34:34", "upload_time_iso_8601": "2017-02-10T13:34:34.366966Z", "url": "https://files.pythonhosted.org/packages/f9/b2/a7d9cf63415bad771a3a706c24b8ee1951f94372bdafe315bd833b8af684/tri.declarative-0.30.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.31.0": [ { "comment_text": "", "digests": { "md5": "6f414cebfff61502c5103a88ee86d1b7", "sha256": "c00f38bab273a50523085d64dd23b89079a6c9b021889e191ded02e9d469678a" }, "downloads": -1, "filename": "tri.declarative-0.31.0.tar.gz", "has_sig": false, "md5_digest": "6f414cebfff61502c5103a88ee86d1b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16567, "upload_time": "2017-06-15T14:13:35", "upload_time_iso_8601": "2017-06-15T14:13:35.075740Z", "url": "https://files.pythonhosted.org/packages/99/76/d5210773bd8117f03057698494de607af9c475349a7d5a719f27e4cfb731/tri.declarative-0.31.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.32.0": [ { "comment_text": "", "digests": { "md5": "920967ac66dae37f4b24a5a9e23a157b", "sha256": "583fdb08084c335c8ab6ec5eed274b05325a619729872ec75d9ddd0541087a78" }, "downloads": -1, "filename": "tri.declarative-0.32.0.tar.gz", "has_sig": false, "md5_digest": "920967ac66dae37f4b24a5a9e23a157b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16887, "upload_time": "2017-07-04T09:48:10", "upload_time_iso_8601": "2017-07-04T09:48:10.277476Z", "url": "https://files.pythonhosted.org/packages/60/4b/ef0d4cc1dc1c1151b5fa354849cde3ebf80fe09c135af7bfb2f01e56f917/tri.declarative-0.32.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.33.0": [ { "comment_text": "", "digests": { "md5": "f7e00d6d2584df207dd4dceeb64a94a4", "sha256": "74b7720120ff02954d1ca86095f9afc1dba2fb489ceee5dd7df51cf281fcd485" }, "downloads": -1, "filename": "tri.declarative-0.33.0.tar.gz", "has_sig": false, "md5_digest": "f7e00d6d2584df207dd4dceeb64a94a4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17369, "upload_time": "2017-08-21T08:52:35", "upload_time_iso_8601": "2017-08-21T08:52:35.020444Z", "url": "https://files.pythonhosted.org/packages/13/f8/409e483dc807de9fa12b681b930e4996b22de14c2bed204ffa740584ef47/tri.declarative-0.33.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.34.0": [ { "comment_text": "", "digests": { "md5": "f4c15fe6b4aeb24415f89c52aea3aaea", "sha256": "cfd8ba2d80c9d3132823eb732e97a9f2705893a7c040d854fe0e7f7bf5f7176c" }, "downloads": -1, "filename": "tri.declarative-0.34.0.tar.gz", "has_sig": false, "md5_digest": "f4c15fe6b4aeb24415f89c52aea3aaea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17401, "upload_time": "2017-08-22T09:20:29", "upload_time_iso_8601": "2017-08-22T09:20:29.433175Z", "url": "https://files.pythonhosted.org/packages/c9/82/273582d4de654d158e514e92dd0a0c03b497287e0324d1ef5fd436af05ff/tri.declarative-0.34.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "0572666c035fb633836a2cbbb476b932", "sha256": "c3a2aeed610bc194559d380c4c33744cba1dc8b11626bc7a8b9b04066dd1fc69" }, "downloads": -1, "filename": "tri.declarative-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0572666c035fb633836a2cbbb476b932", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8679, "upload_time": "2015-10-06T09:20:00", "upload_time_iso_8601": "2015-10-06T09:20:00.355283Z", "url": "https://files.pythonhosted.org/packages/2f/71/2543f4c64a141e46c59a0925937377e5f412b2d6d14e0400413f7d162821/tri.declarative-0.4.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "183e2a74aa2dcec9fbcc26c14749e2d8", "sha256": "74201ebf62dfbda7048b85c517f20530d69d1edbec225f2934caf9d997ecc17f" }, "downloads": -1, "filename": "tri.declarative-0.4.0.tar.gz", "has_sig": false, "md5_digest": "183e2a74aa2dcec9fbcc26c14749e2d8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7757, "upload_time": "2015-10-06T09:20:16", "upload_time_iso_8601": "2015-10-06T09:20:16.628724Z", "url": "https://files.pythonhosted.org/packages/0e/09/fd8d99d44ca44866bfa922c8531ce256a6879f5ebfa72a4fcb3c163502d7/tri.declarative-0.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "5dd633857f3684019a6305ab1a679474", "sha256": "ce4d144f1473447e00afd10159b366d8484135c47f648265175cfc40aeed2cdd" }, "downloads": -1, "filename": "tri.declarative-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5dd633857f3684019a6305ab1a679474", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8831, "upload_time": "2015-10-07T13:56:28", "upload_time_iso_8601": "2015-10-07T13:56:28.831993Z", "url": "https://files.pythonhosted.org/packages/e3/e4/b3d1ff33397352ffab11ef969c4fdb30c70b825913e58ad030a8ad3b200e/tri.declarative-0.5.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "1d7fadd989b7d5eb755a063d2cea97c6", "sha256": "dbc6b009b7ea63c6fa910291731593f79696ec4cf75df416680bf50098366bec" }, "downloads": -1, "filename": "tri.declarative-0.5.0.tar.gz", "has_sig": false, "md5_digest": "1d7fadd989b7d5eb755a063d2cea97c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7880, "upload_time": "2015-10-07T13:56:32", "upload_time_iso_8601": "2015-10-07T13:56:32.309576Z", "url": "https://files.pythonhosted.org/packages/38/2a/ed397d0469236acdad8d227f45172bedb8a82fe2d1cd08aa1c9e9d5ff557/tri.declarative-0.5.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "7c809c5e66316a39d10351e51584fd2e", "sha256": "1a1b80648d4623751b30be706b93770f45c05d71162a2b722740583eb9dd7bf2" }, "downloads": -1, "filename": "tri.declarative-0.7.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7c809c5e66316a39d10351e51584fd2e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8735, "upload_time": "2015-10-08T06:23:30", "upload_time_iso_8601": "2015-10-08T06:23:30.640036Z", "url": "https://files.pythonhosted.org/packages/cd/8a/59dd5ebc5de5c0a138bd234cb6d4e7f01a0db9c99c51c3c9f324385a2d53/tri.declarative-0.7.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f691f66e783448f7510193a031f5d366", "sha256": "b46ae6cd1262b1f7e47726e918ed8e7e711cb17976730a7326390f48517b02ac" }, "downloads": -1, "filename": "tri.declarative-0.7.0.tar.gz", "has_sig": false, "md5_digest": "f691f66e783448f7510193a031f5d366", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7785, "upload_time": "2015-10-08T06:23:35", "upload_time_iso_8601": "2015-10-08T06:23:35.529091Z", "url": "https://files.pythonhosted.org/packages/ff/a3/58c1be205ecd4440bb8e6fabb24e5c3ca78079c9c69e4240fce449e64dfe/tri.declarative-0.7.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "e9baa7604d40860186573d9670d033ae", "sha256": "ab18cfdb1c1bb15705420ced4622e3f2d5c8962c539f288a7a966fd74ad58eca" }, "downloads": -1, "filename": "tri.declarative-0.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e9baa7604d40860186573d9670d033ae", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9001, "upload_time": "2015-10-09T14:49:39", "upload_time_iso_8601": "2015-10-09T14:49:39.368418Z", "url": "https://files.pythonhosted.org/packages/7b/34/32074d476f221b887f79dcd0b8ab89aae94a2fbb0710e4af0dd4447bbc56/tri.declarative-0.8.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e62d7bc64e671fdc81f959bf0ab57b20", "sha256": "cd7074656c173c63aa2fc8dec0c900078157e964ff43ee2d8063fafe8e0259a2" }, "downloads": -1, "filename": "tri.declarative-0.8.0.tar.gz", "has_sig": false, "md5_digest": "e62d7bc64e671fdc81f959bf0ab57b20", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8008, "upload_time": "2015-10-09T14:49:46", "upload_time_iso_8601": "2015-10-09T14:49:46.450152Z", "url": "https://files.pythonhosted.org/packages/f7/5d/c89c889a7789ada96fb402ad09b5470afdbd50258ee3ecd81b5eefd4dcc6/tri.declarative-0.8.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "d05c203382a62b0171ed8e40b83caae5", "sha256": "5f384e51088e32db6f5db076c0f07ab1952b806e0854cbfd7cb469c578badaa1" }, "downloads": -1, "filename": "tri.declarative-0.9.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d05c203382a62b0171ed8e40b83caae5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8996, "upload_time": "2015-10-13T10:42:34", "upload_time_iso_8601": "2015-10-13T10:42:34.991806Z", "url": "https://files.pythonhosted.org/packages/8d/12/1076b6eff9d462ff2f7478db40d7266dfdc7fc2cd51d5d27c68b8c052870/tri.declarative-0.9.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "6168ce1073dae85ccdb0aafc9c440895", "sha256": "73e949e9ade9a622507f6187e8d5c44f4065e28714de368cba69e685d130c087" }, "downloads": -1, "filename": "tri.declarative-0.9.0.tar.gz", "has_sig": false, "md5_digest": "6168ce1073dae85ccdb0aafc9c440895", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8015, "upload_time": "2015-10-13T10:42:39", "upload_time_iso_8601": "2015-10-13T10:42:39.462588Z", "url": "https://files.pythonhosted.org/packages/27/57/31c42ec399f1f8a071a1228f58ea18524bac73ab2186a20cc77a61bfb7cc/tri.declarative-0.9.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "c496209218c727534bcf5b9971c893a9", "sha256": "2304b2b81f0fc033ba63e04df26f735d3ffe2e773589968f5e9d27e0bef0d6f7" }, "downloads": -1, "filename": "tri.declarative-1.0.0.tar.gz", "has_sig": false, "md5_digest": "c496209218c727534bcf5b9971c893a9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17628, "upload_time": "2018-05-23T09:00:14", "upload_time_iso_8601": "2018-05-23T09:00:14.158455Z", "url": "https://files.pythonhosted.org/packages/14/c5/7c8f00fe2754b7253c2c7295a9c17e16badf42aa83fa36acf6dbbd4416cd/tri.declarative-1.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "2335b9956f2aadb5051ffbaa9cd00b3f", "sha256": "a77787d813d6e2010aefc50a0f9c21311b849141feb17e2fdd4fada7cf0f25f4" }, "downloads": -1, "filename": "tri.declarative-1.0.1.tar.gz", "has_sig": false, "md5_digest": "2335b9956f2aadb5051ffbaa9cd00b3f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17995, "upload_time": "2018-06-15T09:55:29", "upload_time_iso_8601": "2018-06-15T09:55:29.894981Z", "url": "https://files.pythonhosted.org/packages/99/3a/be032402fa0a7e12811956b12718a74bd97fba5954c5d4966eaa7665599c/tri.declarative-1.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "bb355a26f0f5390e51256caf53eb0a14", "sha256": "d4618a1074af610c64eb89e0aba139a5eb2d944ddf97a0266afda141b01667b4" }, "downloads": -1, "filename": "tri.declarative-1.0.2.tar.gz", "has_sig": false, "md5_digest": "bb355a26f0f5390e51256caf53eb0a14", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18020, "upload_time": "2018-06-18T13:39:05", "upload_time_iso_8601": "2018-06-18T13:39:05.287128Z", "url": "https://files.pythonhosted.org/packages/d3/5c/359f227017d51a74fa31493e44c24c1a2aedfa031b1a62ae9c6601cc1178/tri.declarative-1.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "9e318cbf7f3d2786c5bbad060adfd657", "sha256": "31b133d9250c54988f4e35725be00050aabc24e383aecae8ae06de0d2be9d2f0" }, "downloads": -1, "filename": "tri.declarative-1.0.3.tar.gz", "has_sig": false, "md5_digest": "9e318cbf7f3d2786c5bbad060adfd657", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18085, "upload_time": "2018-06-28T08:54:16", "upload_time_iso_8601": "2018-06-28T08:54:16.243063Z", "url": "https://files.pythonhosted.org/packages/5c/d9/76576de1d455379f32203c0518f7819560284769d29abdb8d3f4d1494ede/tri.declarative-1.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "5933b256c9b6cd7af377746f4365a369", "sha256": "1980445c6df6192b377f3dc640b0169661428c9cd0f867f8d3c68163a1c9e409" }, "downloads": -1, "filename": "tri.declarative-1.0.4.tar.gz", "has_sig": false, "md5_digest": "5933b256c9b6cd7af377746f4365a369", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18658, "upload_time": "2018-09-21T07:27:18", "upload_time_iso_8601": "2018-09-21T07:27:18.067478Z", "url": "https://files.pythonhosted.org/packages/ca/14/f05f93a42bfc9736eda75d3bfbdc8caa43e7e7f33dc21b5828973b898a84/tri.declarative-1.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "e2dd8da984a07d398af6c7bce9239a05", "sha256": "a5366914afe9cbc82c306db61b514ac845790689d6cf45be0e5fa9542f64368d" }, "downloads": -1, "filename": "tri.declarative-1.0.5.tar.gz", "has_sig": false, "md5_digest": "e2dd8da984a07d398af6c7bce9239a05", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18723, "upload_time": "2018-09-21T09:40:57", "upload_time_iso_8601": "2018-09-21T09:40:57.886314Z", "url": "https://files.pythonhosted.org/packages/20/83/be5c64afa2a1182062c9ff90e8ca4fa0beb5e324981c786d0b7dd5f5fc38/tri.declarative-1.0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "ce71f1581267f6fb0ed9765ada8e24d3", "sha256": "4e22e54fb9e3a9da5b3f4a6fd805f6607f5443574b2ce9cdab25dab48b549aa1" }, "downloads": -1, "filename": "tri.declarative-1.0.6.tar.gz", "has_sig": false, "md5_digest": "ce71f1581267f6fb0ed9765ada8e24d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19576, "upload_time": "2018-09-28T14:15:45", "upload_time_iso_8601": "2018-09-28T14:15:45.635388Z", "url": "https://files.pythonhosted.org/packages/5f/fa/90c235b7584ed7911647fae04ae642bd31f1953a4bb281adb28c7c267d75/tri.declarative-1.0.6.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "d188ada68cdb69dfebfc845c17bf5a71", "sha256": "e661d95f8537bcbb666f07799ba8594478c21f27defc458d2b28aa9682c3c597" }, "downloads": -1, "filename": "tri.declarative-1.1.0.tar.gz", "has_sig": false, "md5_digest": "d188ada68cdb69dfebfc845c17bf5a71", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16632, "upload_time": "2018-11-22T14:46:29", "upload_time_iso_8601": "2018-11-22T14:46:29.463879Z", "url": "https://files.pythonhosted.org/packages/c5/38/90c428d5e7245acbfef1aae34731a92f8096baf87aa21e1bb439cf39b152/tri.declarative-1.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "d8b93bfe404e512410435949106b2ad6", "sha256": "def34727c6372c18cb4634a228ef8a6b9fe48d6b9117f9cfa8e49b1a9fb47135" }, "downloads": -1, "filename": "tri.declarative-1.2.0.tar.gz", "has_sig": false, "md5_digest": "d8b93bfe404e512410435949106b2ad6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16970, "upload_time": "2019-03-14T08:18:23", "upload_time_iso_8601": "2019-03-14T08:18:23.195617Z", "url": "https://files.pythonhosted.org/packages/f8/8f/667890f9abb42a1ae5165af2725646b16a3770869f67e5358e94e4c17e1e/tri.declarative-1.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "a7336a0568633aeb0b190a3165cfc031", "sha256": "20acfcfbab2f48e6c9ab90f859baa4c545c07ddf35586ef8949a24ac8994d7ba" }, "downloads": -1, "filename": "tri.declarative-1.2.1.tar.gz", "has_sig": false, "md5_digest": "a7336a0568633aeb0b190a3165cfc031", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17362, "upload_time": "2019-03-15T11:46:10", "upload_time_iso_8601": "2019-03-15T11:46:10.361073Z", "url": "https://files.pythonhosted.org/packages/14/93/64cabe646f27563fa48877a1d78f7bc0b31a460ffc8eba0be5cc46ca59f7/tri.declarative-1.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "365261bb54ed3a4c8d073fc47ea4dcee", "sha256": "e7b9f5b7b88ce63dff11b54661cb359bbbbaaee8b1b38e07721de4bd67921e94" }, "downloads": -1, "filename": "tri.declarative-2.0.0.tar.gz", "has_sig": false, "md5_digest": "365261bb54ed3a4c8d073fc47ea4dcee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17544, "upload_time": "2019-04-12T13:33:00", "upload_time_iso_8601": "2019-04-12T13:33:00.124444Z", "url": "https://files.pythonhosted.org/packages/79/d8/34116de029c3aea245438df30e5518e6b7aa6a762c6d035ffdd5808b4faa/tri.declarative-2.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "3.0.0": [ { "comment_text": "", "digests": { "md5": "53f07adcd0d5bf56d701bc0b4ad4318d", "sha256": "17ab36d1f1326a1ff51a769de4e4acbec5a9c14bc9ba15b961fee62c411250a6" }, "downloads": -1, "filename": "tri.declarative-3.0.0.tar.gz", "has_sig": false, "md5_digest": "53f07adcd0d5bf56d701bc0b4ad4318d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17463, "upload_time": "2019-06-10T13:04:24", "upload_time_iso_8601": "2019-06-10T13:04:24.871309Z", "url": "https://files.pythonhosted.org/packages/4b/82/4e9b053c767846dbf0f600ef17ec2700e0c28841e8e27eed31e4b94d28e6/tri.declarative-3.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "3.1.0": [ { "comment_text": "", "digests": { "md5": "6af0d2eea5096939c2ff49051becbda7", "sha256": "a70617f2fbfecce12e10beddba8db469ebe6aa6eebec86f2f2eca6fd9a6e83c3" }, "downloads": -1, "filename": "tri.declarative-3.1.0.tar.gz", "has_sig": false, "md5_digest": "6af0d2eea5096939c2ff49051becbda7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16874, "upload_time": "2019-06-28T07:11:23", "upload_time_iso_8601": "2019-06-28T07:11:23.552325Z", "url": "https://files.pythonhosted.org/packages/55/d6/61e1c0846e0be863c7667a0fdebbe1d53cb3632c1be9da056408135237ca/tri.declarative-3.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "4.0.0": [ { "comment_text": "", "digests": { "md5": "f482c92d334a1494e6da5df4f299d897", "sha256": "dcca34041e9b1dbdbbb11751a46129970bc45b1df3a7050fcdedde2e83fe9479" }, "downloads": -1, "filename": "tri.declarative-4.0.0.tar.gz", "has_sig": false, "md5_digest": "f482c92d334a1494e6da5df4f299d897", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19815, "upload_time": "2019-10-11T14:02:24", "upload_time_iso_8601": "2019-10-11T14:02:24.270735Z", "url": "https://files.pythonhosted.org/packages/c5/29/9ac0257559909a6a0cd5980ef2e3f488c54ccadc8f2556278e72eb18cb15/tri.declarative-4.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "4.0.1": [ { "comment_text": "", "digests": { "md5": "a4b59433c7329d4c5d23952feb091228", "sha256": "b77a541be9e841719463d46bbcaffc600b653b7658c421de8ea896cf1683eb5b" }, "downloads": -1, "filename": "tri.declarative-4.0.1.tar.gz", "has_sig": false, "md5_digest": "a4b59433c7329d4c5d23952feb091228", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19948, "upload_time": "2019-10-23T13:32:37", "upload_time_iso_8601": "2019-10-23T13:32:37.817781Z", "url": "https://files.pythonhosted.org/packages/87/dd/9fc50d47fe5a66bd0217db4d9ed3337fb924c76b96650ccae8792dc78f17/tri.declarative-4.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "4.2.0": [ { "comment_text": "", "digests": { "md5": "4f2edaa78eb63f36c033ce4015807dad", "sha256": "c882668da28de2149745ba8fe0a089ed4ed4cd9ec2a8d51c0242d1ffc50147fd" }, "downloads": -1, "filename": "tri.declarative-4.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4f2edaa78eb63f36c033ce4015807dad", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15264, "upload_time": "2020-03-05T14:41:49", "upload_time_iso_8601": "2020-03-05T14:41:49.000646Z", "url": "https://files.pythonhosted.org/packages/42/85/def7eb9b0a1ffda90ef752d73e61a344670b7ef3544d20267c9c504d8388/tri.declarative-4.2.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "872ff9c20bb98092c400c1705b4389e6", "sha256": "f61339cc19ddec449b7d75087d98cbb567a51254c386f38b8084717e8622dd34" }, "downloads": -1, "filename": "tri.declarative-4.2.0.tar.gz", "has_sig": false, "md5_digest": "872ff9c20bb98092c400c1705b4389e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22135, "upload_time": "2020-03-05T14:41:51", "upload_time_iso_8601": "2020-03-05T14:41:51.310948Z", "url": "https://files.pythonhosted.org/packages/d6/5f/52202b8f69802932a1279fb830784859f5ef8aa437c6d3984c783ca202ff/tri.declarative-4.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "4.3.0": [ { "comment_text": "", "digests": { "md5": "431193e3ee78ccb25e29f29106fe153d", "sha256": "6914e4d9e75e91896d408fc55a56755c4ca4617702eb006eab0f8df22a9d215b" }, "downloads": -1, "filename": "tri.declarative-4.3.0.tar.gz", "has_sig": false, "md5_digest": "431193e3ee78ccb25e29f29106fe153d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21000, "upload_time": "2020-04-01T13:13:33", "upload_time_iso_8601": "2020-04-01T13:13:33.330530Z", "url": "https://files.pythonhosted.org/packages/6a/b4/503bdd7defa2633c6305d5e11e40f32c809c2f6f34df57ea7fc11e11b669/tri.declarative-4.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "4.4.0": [ { "comment_text": "", "digests": { "md5": "6bee5c7a91b26254570cfe210e35f20d", "sha256": "4d4e12a2923c53a386b37874a36cab403d83fac839dab5476553040eac844396" }, "downloads": -1, "filename": "tri.declarative-4.4.0.tar.gz", "has_sig": false, "md5_digest": "6bee5c7a91b26254570cfe210e35f20d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22252, "upload_time": "2020-04-16T20:31:44", "upload_time_iso_8601": "2020-04-16T20:31:44.203226Z", "url": "https://files.pythonhosted.org/packages/55/39/816b1b28edbbab1a9de5e5de966212869db68f8f665aa38ac1d10959a125/tri.declarative-4.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "5.0.0": [ { "comment_text": "", "digests": { "md5": "3f06a3abc99a0a3f3f6b423276760212", "sha256": "21b4e0331d4baa144602f221cb28007891696d3b6e9f11841ef2c983be752e0f" }, "downloads": -1, "filename": "tri.declarative-5.0.0.tar.gz", "has_sig": false, "md5_digest": "3f06a3abc99a0a3f3f6b423276760212", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20274, "upload_time": "2020-01-30T10:57:10", "upload_time_iso_8601": "2020-01-30T10:57:10.342158Z", "url": "https://files.pythonhosted.org/packages/a8/26/de72a5cd2d44d0b9295ec8e66b0b75471d384164b9ce9c422dcb43e26a82/tri.declarative-5.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "5.0.1": [ { "comment_text": "", "digests": { "md5": "37e62f915beb8be5c28f04517f3c4511", "sha256": "125c739dd85ffcf448999ef7e394b3c2654fd34c67e48bf148a5cded010cbe85" }, "downloads": -1, "filename": "tri.declarative-5.0.1.tar.gz", "has_sig": false, "md5_digest": "37e62f915beb8be5c28f04517f3c4511", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20387, "upload_time": "2020-02-03T12:03:29", "upload_time_iso_8601": "2020-02-03T12:03:29.338436Z", "url": "https://files.pythonhosted.org/packages/fa/49/ccf06aaf5b4f291a7f919cbc843ce781332f655e22bb1bd738914d114ae7/tri.declarative-5.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "5.1.0": [ { "comment_text": "", "digests": { "md5": "363edf8649cc3044b1bea37dcbcc7e3e", "sha256": "ab41d478c8bae3ed3f6298954a98a13c04987e5019ffd1cd5ddacab93cda3275" }, "downloads": -1, "filename": "tri.declarative-5.1.0.tar.gz", "has_sig": false, "md5_digest": "363edf8649cc3044b1bea37dcbcc7e3e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20440, "upload_time": "2020-02-11T12:32:57", "upload_time_iso_8601": "2020-02-11T12:32:57.392550Z", "url": "https://files.pythonhosted.org/packages/e4/99/9f89eba7ebf6a272b6e01a20f6a09c163c5759bdaba3854ee8d29ec10e0f/tri.declarative-5.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "5.1.1": [ { "comment_text": "", "digests": { "md5": "23858f8aaf3b87fef4b3eaf1c2627354", "sha256": "ea5ee6d1cb7b185a7586b5aac4b59301742f5c3e6dc1113625bb4c59478a15b3" }, "downloads": -1, "filename": "tri.declarative-5.1.1.tar.gz", "has_sig": false, "md5_digest": "23858f8aaf3b87fef4b3eaf1c2627354", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20509, "upload_time": "2020-02-11T16:02:01", "upload_time_iso_8601": "2020-02-11T16:02:01.280519Z", "url": "https://files.pythonhosted.org/packages/26/99/e0e53dc55ee9f954c53e05e873f39bc538d69c114a1cb701ad955e260dbf/tri.declarative-5.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "5.2.0": [ { "comment_text": "", "digests": { "md5": "8dd0f8a7b8dddb6ddee3d5ac758c6a21", "sha256": "f81ba10c0affbcc4a22e7246c0394a879bb355ceebde8cb633c10fccd2c327ce" }, "downloads": -1, "filename": "tri.declarative-5.2.0.tar.gz", "has_sig": false, "md5_digest": "8dd0f8a7b8dddb6ddee3d5ac758c6a21", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20715, "upload_time": "2020-02-28T07:44:02", "upload_time_iso_8601": "2020-02-28T07:44:02.386915Z", "url": "https://files.pythonhosted.org/packages/0d/b6/e33a106aa06d808c4734d06589497e4ac6c7205deb985ddfbedb0b82abc5/tri.declarative-5.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "5.3.0": [ { "comment_text": "", "digests": { "md5": "73ac4dd573119b8e335c0be9deb25a54", "sha256": "3e26f4ebfcb0c6e60787411f7ae6fbc64dbee50fdaef3d8f5cf782fd08414465" }, "downloads": -1, "filename": "tri.declarative-5.3.0.tar.gz", "has_sig": false, "md5_digest": "73ac4dd573119b8e335c0be9deb25a54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21015, "upload_time": "2020-04-01T13:03:11", "upload_time_iso_8601": "2020-04-01T13:03:11.449313Z", "url": "https://files.pythonhosted.org/packages/8d/ac/bbca63a4ff379addc3d4f2280f65d35911038492b4ab858af8f6b753b24a/tri.declarative-5.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "5.4.0": [ { "comment_text": "", "digests": { "md5": "ee1ac5e849bf8f2d325dc14199ad9e2f", "sha256": "d3df6ad7e09290c6ad068b506c5af9f64e395a02f2d4f40df8c46a8eeb1b11d7" }, "downloads": -1, "filename": "tri.declarative-5.4.0.tar.gz", "has_sig": false, "md5_digest": "ee1ac5e849bf8f2d325dc14199ad9e2f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22231, "upload_time": "2020-04-16T20:30:49", "upload_time_iso_8601": "2020-04-16T20:30:49.663669Z", "url": "https://files.pythonhosted.org/packages/2e/92/cae33d763ffba353f109d10547e722c932ab037093d6bf5c419e03326521/tri.declarative-5.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "5.4.1": [ { "comment_text": "", "digests": { "md5": "c62c668a6732a513b9dcd7f288fa26e4", "sha256": "a34c689275aef67e548e20b3b54bb5451afffd309cf1e5d2afecbd89c1319a1d" }, "downloads": -1, "filename": "tri.declarative-5.4.1.tar.gz", "has_sig": false, "md5_digest": "c62c668a6732a513b9dcd7f288fa26e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22412, "upload_time": "2020-06-24T07:09:14", "upload_time_iso_8601": "2020-06-24T07:09:14.981527Z", "url": "https://files.pythonhosted.org/packages/a5/c0/cd5e0bfe89178567b05dc48a526f800ce661c618c4c7c470c03862e2bc75/tri.declarative-5.4.1.tar.gz", "yanked": false, "yanked_reason": null } ], "5.5.0": [ { "comment_text": "", "digests": { "md5": "ff0fc1ee4af2060bc92124781d273a0f", "sha256": "9d0a3502244b1964ff8b5799656120d913032f1c87fa429838c8e1af84d61ffd" }, "downloads": -1, "filename": "tri.declarative-5.5.0.tar.gz", "has_sig": false, "md5_digest": "ff0fc1ee4af2060bc92124781d273a0f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22476, "upload_time": "2020-08-21T08:40:46", "upload_time_iso_8601": "2020-08-21T08:40:46.833649Z", "url": "https://files.pythonhosted.org/packages/17/c0/3856c25fd515d4ded708e74a85f01afcb8d456732ed8435274c9124e4c55/tri.declarative-5.5.0.tar.gz", "yanked": false, "yanked_reason": null } ], "5.6.0": [ { "comment_text": "", "digests": { "md5": "d52b7243417efc19c64179999a54f13f", "sha256": "b99d2da956400ef86b9e5d48cd61455739a4ac2728169d8fab493d484fff2708" }, "downloads": -1, "filename": "tri.declarative-5.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d52b7243417efc19c64179999a54f13f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19899, "upload_time": "2020-12-02T07:22:24", "upload_time_iso_8601": "2020-12-02T07:22:24.123188Z", "url": "https://files.pythonhosted.org/packages/e1/ba/8cab30fa00d5c9e58e89b897061d044c5892c97ed5f8b0ce6f9fd78db45c/tri.declarative-5.6.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ae43ab9610a91c296036f0237cfa4cb1", "sha256": "4b7557edbc2f3ca985f9c3eece08b18f5d7fac916863e5ae12088212d1fd8592" }, "downloads": -1, "filename": "tri.declarative-5.6.0.tar.gz", "has_sig": false, "md5_digest": "ae43ab9610a91c296036f0237cfa4cb1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22852, "upload_time": "2020-12-02T07:22:26", "upload_time_iso_8601": "2020-12-02T07:22:26.498034Z", "url": "https://files.pythonhosted.org/packages/ec/73/417c97c20413fbe8747330e2bb371c4afb28eeab04352e888eb030c00378/tri.declarative-5.6.0.tar.gz", "yanked": false, "yanked_reason": null } ], "5.7.0": [ { "comment_text": "", "digests": { "md5": "69d37f46279dba90c395067a8befc6fb", "sha256": "cb0ee59b183b0d17fe0f1eb7518de883bd5e20b1129db9351e90c4099973a105" }, "downloads": -1, "filename": "tri.declarative-5.7.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "69d37f46279dba90c395067a8befc6fb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20218, "upload_time": "2020-12-18T12:04:42", "upload_time_iso_8601": "2020-12-18T12:04:42.238389Z", "url": "https://files.pythonhosted.org/packages/ac/0b/4c756966d84f77a18760cf11641da2a796ac63eec953052570ff981884c0/tri.declarative-5.7.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "1e7da8b0a4d7c4025448e9e047704a5f", "sha256": "0980e3877a7896f519b108ffee75d1501c430a0bb0120b1f8825a3d118285b5f" }, "downloads": -1, "filename": "tri.declarative-5.7.0.tar.gz", "has_sig": false, "md5_digest": "1e7da8b0a4d7c4025448e9e047704a5f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24156, "upload_time": "2020-12-18T12:04:44", "upload_time_iso_8601": "2020-12-18T12:04:44.527540Z", "url": "https://files.pythonhosted.org/packages/c0/a2/5789afc9cba1c5ecd956172e83ea18d15db1cbcea24c8ebc2964ec3823b5/tri.declarative-5.7.0.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "69d37f46279dba90c395067a8befc6fb", "sha256": "cb0ee59b183b0d17fe0f1eb7518de883bd5e20b1129db9351e90c4099973a105" }, "downloads": -1, "filename": "tri.declarative-5.7.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "69d37f46279dba90c395067a8befc6fb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20218, "upload_time": "2020-12-18T12:04:42", "upload_time_iso_8601": "2020-12-18T12:04:42.238389Z", "url": "https://files.pythonhosted.org/packages/ac/0b/4c756966d84f77a18760cf11641da2a796ac63eec953052570ff981884c0/tri.declarative-5.7.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "1e7da8b0a4d7c4025448e9e047704a5f", "sha256": "0980e3877a7896f519b108ffee75d1501c430a0bb0120b1f8825a3d118285b5f" }, "downloads": -1, "filename": "tri.declarative-5.7.0.tar.gz", "has_sig": false, "md5_digest": "1e7da8b0a4d7c4025448e9e047704a5f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24156, "upload_time": "2020-12-18T12:04:44", "upload_time_iso_8601": "2020-12-18T12:04:44.527540Z", "url": "https://files.pythonhosted.org/packages/c0/a2/5789afc9cba1c5ecd956172e83ea18d15db1cbcea24c8ebc2964ec3823b5/tri.declarative-5.7.0.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }