{ "info": { "author": "Stephane \"Twidi\" Angel", "author_email": "s.angel@twidi.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Database", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "|PyPI Version| |Build Status|\n\nredis-limpyd-extensions\n=======================\n\nSome extensions for\n`redis-limpyd `__\n(`redis `__ orm (sort of) in python)\n\nWhere to find it:\n\n- Github repository: https://github.com/limpyd/redis-limpyd-extensions\n- Pypi package: https://pypi.python.org/pypi/redis-limpyd-extensions\n- Documentation: http://documentup.com/limpyd/redis-limpyd-extensions\n\nInstall:\n\nPython versions 2.7, and 3.5 to 3.8 are supported (CPython and PyPy).\n\nRedis-server versions >= 3 are supported.\n\nRedis-py versions >= 3 are supported.\n\nRedis-limpyd versions >= 2 are supported.\n\nYou can still use limpyd-extensions versions < 2 if you need something older than the above requirements.\n\n.. code:: bash\n\n pip install redis-limpyd-extensions\n\nList of available extensions:\n\n- Add/remove related on both sides\n- Dynamic fields\n\nAdd/remove related on both sides\n--------------------------------\n\nSay we have the following related models:\n\n.. code:: python\n\n class Person(RelatedModel):\n database = main_database\n name = HashableField(indexable=True)\n\n class Group(Relatedmodel):\n database = main_database\n name = HashableField(indexable=True)\n members = M2MSetField(Person, related_name='membership')\n\nAnd some data:\n\n.. code:: python\n\n somebody = Person(name='foobar')\n group_1 = Group(name='group 1')\n group_2 = Group(name='group 2')\n group_3 = Group(name='group 3')\n\nWe can add membership the normal way:\n\n.. code:: python\n\n group_1.members.sadd(somebody)\n\nAnd retrieving then this way:\n\n.. code:: python\n\n group_1_members = group_1.members() # somebody !\n somebody_membership = somebody.membership() # group_1\n\nBut say that we want to put a person in many groups at ones, we can do:\n\n.. code:: python\n\n group_2.members.sadd(somebody)\n group_3.members.sadd(somebody)\n\n``limpyd_extensions`` provide a way to add/remove relations via the\nother side of the relation:\n\n.. code:: python\n\n somebody.membership.sadd(group2, group3)\n\nTo use this, simple import the related fields from\n``limpyd_extensions.related`` instead of ``limpyd.contrib.related``:\n\n.. code:: python\n\n from limpyd_extensions.related import (FKStringField, FKHashableField,\n M2MSetField, M2MListField,\n M2MSortedSetField)\n\nAnd use them as usual. (Note that for convenience you can also import\nthe standard ``RelatedModel`` from there)\n\nThe added methods for the reverse side of each related field are:\n\nFKStringField\n~~~~~~~~~~~~~\n\n- ``sadd``, to set the reverse relation as the fk of the arguments:\n\nHaving:\n\n.. code:: python\n\n class Group(RelatedModel):\n parent = FKStringField(self, related_name='children')\n\nThe standard:\n\n.. code:: python\n\n child_group.parent.set(main_group)\n other_child_group.parent.set(main_group)\n\nis the same as the new:\n\n.. code:: python\n\n main_group.children.sadd(child_group, other_child_group)\n\n- ``srem`` works the same way as ``sadd`` but for deleting fk:\n\nThe standard:\n\n.. code:: python\n\n child_group.parent.delete(main_group)\n other_child_group.parent.delete(main_group)\n\nis the same as the new:\n\n.. code:: python\n\n main_group.children.srem(child_group, other_child_group)\n\nFKHashableField\n~~~~~~~~~~~~~~~\n\n- ``sadd``\n- ``srem``\n\nBoth work the exact same way as for FKStringField, the only difference\nis that ``sadd`` emulates a ``hset``, not a ``set``.\n\nM2MSetField\n~~~~~~~~~~~\n\n- ``sadd``\n\nThe standard:\n\n.. code:: python\n\n group_2.members.sadd(somebody)\n group_3.members.sadd(somebody)\n\nis the same as the new:\n\n.. code:: python\n\n somebody.membership.sadd(group2, group3)\n\n- ``srem`` works the same way as ``sadd`` but for removing relations:\n\nThe standard:\n\n.. code:: python\n\n group_2.members.srem(somebody)\n group_3.members.srem(somebody)\n\nis the same as the new:\n\n.. code:: python\n\n somebody.membership.srem(group2, group3)\n\nM2MListField\n~~~~~~~~~~~~\n\n- ``lpush`` and ``rpush``, that works for ``M2MListField`` like\n ``sadd`` for ``M2MSetField``\n\nIf in our Person/Group example ``members`` is a ``M2MListField`` instead\nof a ``M2MSetField``,\n\nThe standard:\n\n.. code:: python\n\n group_2.members.rpush(somebody)\n group_3.members.rpush(somebody)\n\nis the same as the new:\n\n.. code:: python\n\n somebody.membership.rpush(group2, group3)\n\n- ``lrem`` works the same way as ``rpush`` and ``lpush`` but for\n removing relations:\n\nThe standard:\n\n.. code:: python\n\n group_2.members.lrem(0, somebody) # 0 for \"all occurences\"\n group_3.members.lrem(0, somebody)\n\nis the same as the new:\n\n.. code:: python\n\n somebody.membership.lrem(group2, group3) # the count is forced to 0\n\nM2MSortedSetField\n~~~~~~~~~~~~~~~~~\n\n- ``zadd`` that works for ``M2MSortedSetField`` like ``sadd`` for\n ``M2MSetField``, but managing scores. Arguments can be set the same\n way as the normal ``zadd`` command.\n\nIf in our Person/Group example ``members`` is a ``M2MSortedSetField``\ninstead of a ``M2MSetField``, using the score to save the date of\nmembership\n\nThe standard:\n\n.. code:: python\n\n group_2.members.zadd({somebody: sometime}) # sometime, a float, can be a call to time.time()\n group_3.members.zadd({somebody: another_time})\n\nis the same as the new:\n\n.. code:: python\n\n somebody.membership.zadd({group2: sometime, group3: another_time})\n\n- ``zrem`` works the same way as ``zadd``, without the score, but for\n removing relations:\n\nThe standard:\n\n.. code:: python\n\n group_2.members.zrem(somebody)\n group_3.members.zrem(somebody)\n\nis the same as the new:\n\n.. code:: python\n\n somebody.membership.zrem(group2, group3)\n\nDynamic fields\n--------------\n\nDynamic fields provide a way to add unlimited fields to a model by\ndefining a (or many) dynamic field, and use it with a dynamic part. ie a\ndynamic field name \"foo\" can be used with as many dynamic parts as you\nwant to create dynamic variations: \"foo\\_bar\" for the dynamic part\n\"bar\", \"foo\\_baz\" for the dynamic part \"baz\", and so on.\n\nA simple API to use them, and filter on them, is provided.\n\nTo use a dynamic field, your model must inherit from the following\nmixin: ``ModelWithDynamicFieldMixin``, found in\n``limpyd_extensions.dynamic.model``. It's a mixin, you should use it\nwith another ``RedisModel`` class. Fields are available as field classes\n(``DynamicStringField``, ``DynamicInstanceHashField``,\n``DynamicListField``, ``DynamicSetField``, ``DynamicSortedSetField``,\n``DynamicHashField``) or as a mixin (``DynamicFieldMixin``) if you want\nto adapt an external field. You can find them in\n``limpyd_extensions.dynamic.fields``\n\nA short example on how to define a dynamic field on a model:\n\n.. code:: python\n\n from limpyd.model import RedisModel\n\n from limpyd_extension.dynamic.model import ModelWithDynamicFieldMixin\n from limpyd_extension.dynamic.fields import DynamicSetField\n\n\n class MyModel(ModelWithDynamicFieldMixin, RedisModel):\n foo = DynamicSetField(indexable=True)\n\nAs the ``foo`` field is dynamic, you cannot run any command on it, but\nonly on its dynamic variations. How to do it ?\n\nThere is two ways:\n\n- use the ``get_field`` method of the model:\n\n.. code:: python\n\n foo_bar = myinstance.get_field('foo_bar')\n\n- use the ``get_for`` method of the field:\n\n.. code:: python\n\n foo_bar = myinstance.foo.get_for('bar')\n\nThe latter is useful if you have a variable instead of known value:\n\n.. code:: python\n\n somebar = 'bar'\n foo_bar = myinstance.foo.get_for(somevar)\n\nNote that you can use this shortcut instead of using ``get_for``:\n\n.. code:: python\n\n foo_bar = myinstance.foo(somevar)\n\nKnowing this, you can do operations on these fields:\n\n.. code:: python\n\n myinstance.foo(somevar).sadd('one', 'two', 'three')\n myinstance.foo(othervar).sadd('four', 'five')\n myotherinstance.foo(somevar).sadd('three', 'thirty')\n print myinstance.foo(somevar).smembers()\n print myinstance.foo(othervar).smembers()\n print myotherinstance.foo(somevar).smembers()\n\n\nTo know the existing versions in a dynamic_field, you can use ``scan_fields``.\n\nIt takes the same argument as the ``sscan`` command of ``SetField`` (from limpyd), because it is applied on the inventory key where all versions are saved.\n\nSo if you have some versions:\n\n.. code::python\n\n myinstance.foo('foo').set('111')\n myinstance.foo('bar').set('222')\n myinstance.foo('baz').set('333')\n\nYou can retrieve them all:\n\n.. code::python\n\n set(myinstance.foo.scan_versions()) # returns {'foo', 'bar', 'baz'}\n\nOr only a part:\n\n.. code::python\n\n set(myinstance.foo.scan_versions('b*')) # returns {'bar', 'baz'}\n\n\nFiltering\n~~~~~~~~~\n\nTo filter on indexable dynamic fields, there is two ways too:\n\n- use the classic way, if you now the dynamic part in advance:\n\n.. code:: python\n\n MyModel.collection(foo_bar='three')\n\n- use the new ``dynamic_filter`` method:\n\n.. code:: python\n\n MyModel.collection().dynamic_filter('foo', 'bar', 'three')\n\nParameters are: the field name, the dynamic part, the value for the\nfilter and, not show in the previous example, the index suffix to use.\n\nThis suffix is default to ''.\n\nBut if what you want to do is\n\n.. code:: python\n\n MyModel.collection(foo_bar__eq='three')\n\nYou can use ``dynamic_filter`` this way:\n\n.. code:: python\n\n MyModel.collection().dynamic_filter('foo', 'bar', 'three', 'eq') # you can use '__eq' too\n\n\nThe collection manager used with ``ModelWithDynamicFieldMixin`` depends\non ``ExtendedCollectionManager``, so you can chain filters and dynamic\nfilters on the resulting collection.\n\nDynamic related fields\n~~~~~~~~~~~~~~~~~~~~~~\n\nDynamic fields also work with related fields, exactly the same way.\nThere is only two additions:\n\n- if you pass a model instance in the ``get_for`` method, it will be\n translated to it's pk\n- the first argument of a \"related collection\" is the dynamic part (can\n also be an instance)\n\nAn exemple using dynamic related fields:\n\n.. code:: python\n\n from limpyd.fields import PKField\n from limpyd_extensions.dynamic.model import ModelWithDynamicFieldMixin\n from limpyd_extensions.dynamic.related import DynamicM2MSetField\n\n class Tag(MyBaseModel):\n slug = PKField()\n\n class Person(MyBaseModel):\n name = PKField()\n\n class Movie(ModelWithDynamicFieldMixin, MyBaseModel):\n name = PKField()\n tags = DynamicM2MSetField(Tag, related_name='movies')\n\n somebody = Person(name='Somebody')\n matrix = Movie(name='Matrix')\n cool = Tag(name='cool')\n\n matrix.tags.get_for(somebody).sadd(cool)\n # same as: matrix.tags(somebody).sadd(cool)\n\n cool_movies_for_somebody = cool.movies(somebody) # the related collection\n # ['Matrix']\n\nProvided classes\n~~~~~~~~~~~~~~~~\n\nHere is the list of modules and classes provided with the\n``limpyd_extensions.dynamic`` module:\n\n- **model**\n\n - **mixins**\n\n - ``ModelWithDynamicFieldMixin(object)`` - A mixin tu use for\n your model with dynamic fields\n\n- **collection**\n\n - **mixins**\n\n - ``CollectionManagerForModelWithDynamicFieldMixin(object)`` - A\n mixin to use if you want to add the ``dynamic_filter`` method\n to your own collection manager\n\n - **full classes**\n\n - ``CollectionManagerForModelWithDynamicField(CollectionManagerForModelWithDynamicFieldMixin, ExtendedCollectionManager)``\n - A simple class inheriting from our mixin and the manager from\n ``limpyd.contrib.collection``\n\n- **field**\n\n - **mixins**\n\n - ``DynamicFieldMixin(object)`` - A mixin within all the stuff\n for dynamic fields is done, to use to add dynamic field support\n to your own fields\n\n - **full classes** All fields simply inherits from our mixin and the\n wanted base field, without anymore addition:\n\n - ``DynamicStringField(DynamicFieldMixin, StringField)``\n - ``DynamicInstanceHashField(DynamicFieldMixin, InstanceHashField)``\n - ``DynamicListField(DynamicFieldMixin, ListField)``\n - ``DynamicSetField(DynamicFieldMixin, SetField)``\n - ``DynamicSortedSetField(DynamicFieldMixin, SortedSetField)``\n - ``DynamicHashField(DynamicFieldMixin, HashField)``\n\n- **related**\n\n - **mixins**\n\n - ``DynamicRelatedFieldMixin(DynamicFieldMixin)`` - A mixin\n within all the stuff for dynamic related fields is done, to use\n to add dynamic field support to your own related fields\n\n - **full classes**\n\n - ``DynamicFKStringField(DynamicRelatedFieldMixin, FKStringField)``\n - ``DynamicFKInstanceHashField(DynamicRelatedFieldMixin, FKInstanceHashField)``\n - ``DynamicM2MSetField(DynamicRelatedFieldMixin, M2MSetField)``\n - ``DynamicM2MListField(DynamicRelatedFieldMixin, M2MListField)``\n - ``DynamicM2MSortedSetField(DynamicRelatedFieldMixin, M2MSortedSetField)``\n\n\n.. |PyPI Version| image:: https://img.shields.io/pypi/v/redis-limpyd-extensions.png\n :target: https://pypi.python.org/pypi/redis-limpyd-extensions\n.. |Build Status| image:: https://travis-ci.org/limpyd/redis-limpyd-extensions.png?branch=master\n :target: https://travis-ci.org/limpyd/redis-limpyd-extensions\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/limpyd/redis-limpyd-extensions", "keywords": "redis,orm", "license": "WTFPL", "maintainer": "", "maintainer_email": "", "name": "redis-limpyd-extensions", "package_url": "https://pypi.org/project/redis-limpyd-extensions/", "platform": "any", "project_url": "https://pypi.org/project/redis-limpyd-extensions/", "project_urls": { "Homepage": "https://github.com/limpyd/redis-limpyd-extensions" }, "release_url": "https://pypi.org/project/redis-limpyd-extensions/2/", "requires_dist": [ "redis (>=3)", "redis-limpyd (>=2)", "future" ], "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7", "summary": "Some extensions for redis-limpyd, a redis orm (sort of) in python.", "version": "2" }, "last_serial": 5960440, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "801451b97ddea9fb919e686a5dd9183a", "sha256": "84d87051e00c680fe788d89905104cf626ca4784dda93a7e8a93efbc318e88a7" }, "downloads": -1, "filename": "redis-limpyd-extensions-0.0.1.tar.gz", "has_sig": false, "md5_digest": "801451b97ddea9fb919e686a5dd9183a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19661, "upload_time": "2014-01-27T14:54:46", "url": "https://files.pythonhosted.org/packages/8d/d3/b79ff5cc2cf19d72b9a04413c9e879d15fee81eca4a8d04b5a3a596b04a8/redis-limpyd-extensions-0.0.1.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "c9e0bea8412ac22a2f64ab427c79d381", "sha256": "535c1379ca5ccc5530dce6802a0c140ed3fc5b6ac0ec207d369c9551284ef68a" }, "downloads": -1, "filename": "redis-limpyd-extensions-0.1.0.tar.gz", "has_sig": false, "md5_digest": "c9e0bea8412ac22a2f64ab427c79d381", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15221, "upload_time": "2014-09-07T21:12:05", "url": "https://files.pythonhosted.org/packages/3c/6a/a58138b1893b9603b9f34e4bf951aba63fd30b95b04b26a10ed988cbf1e8/redis-limpyd-extensions-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "562869f0df20c503ad272a12419f4f53", "sha256": "f987a5c08fabc09dc50bcb5a7c1cd6b56120eba0a23eb13a844270312f4560d3" }, "downloads": -1, "filename": "redis-limpyd-extensions-0.1.1.tar.gz", "has_sig": false, "md5_digest": "562869f0df20c503ad272a12419f4f53", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15049, "upload_time": "2015-01-13T14:31:11", "url": "https://files.pythonhosted.org/packages/dc/f3/837590aa2190eaee0f02790b9db9b03c93fec3181f43c92b697acb37cd3c/redis-limpyd-extensions-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "6b53540cacd9e4d8f153831a38905830", "sha256": "371cbfabad93ba6d877c5eae4228c0ce52939b3bb173eb97c54da98cb0cdad8d" }, "downloads": -1, "filename": "redis-limpyd-extensions-0.1.2.tar.gz", "has_sig": false, "md5_digest": "6b53540cacd9e4d8f153831a38905830", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15331, "upload_time": "2015-06-12T15:50:43", "url": "https://files.pythonhosted.org/packages/9c/6e/a6fce26de68bc49c04adc03a63393811c0d018717005040f0983b1229037/redis-limpyd-extensions-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "e1a0920cb9d709f51ed0d9d4f0dbeb1f", "sha256": "8725d04a709ed6c8622641b139b76b170abccbeb990800705cef4781d48c07d0" }, "downloads": -1, "filename": "redis_limpyd_extensions-0.1.3-py2-none-any.whl", "has_sig": false, "md5_digest": "e1a0920cb9d709f51ed0d9d4f0dbeb1f", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 17387, "upload_time": "2015-12-16T12:50:16", "url": "https://files.pythonhosted.org/packages/2e/5f/b01c7f2c86aa7ccf383e6e06395bca237e7a0d1c63d6528fb7e7a43b6ae8/redis_limpyd_extensions-0.1.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "480bc841a7558723d72a3fcc8ccd7568", "sha256": "9b2f2999d3ed844f35eec6cdd14e21e9174d11ae5bb44dc73ea7907e6ef11acd" }, "downloads": -1, "filename": "redis-limpyd-extensions-0.1.3.tar.gz", "has_sig": false, "md5_digest": "480bc841a7558723d72a3fcc8ccd7568", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15275, "upload_time": "2015-12-16T12:50:10", "url": "https://files.pythonhosted.org/packages/48/3a/bb372a6e25618e1a21c2071c6904c1a2c875a33f59c6f3d2b54d433211f1/redis-limpyd-extensions-0.1.3.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "ea8ef5d5d190443b9a903aff6a003438", "sha256": "68eeb8286dbb1a56ed74150e64fc1cd36c40926700dc4a2db6bdfe2550987365" }, "downloads": -1, "filename": "redis_limpyd_extensions-1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ea8ef5d5d190443b9a903aff6a003438", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18944, "upload_time": "2018-01-31T17:07:52", "url": "https://files.pythonhosted.org/packages/32/28/2213c5c15cd1733dd98936b7da253a2fbf7e0648b5f1694a0e61de7fe39d/redis_limpyd_extensions-1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a5350890d0419d9784b02607bf592907", "sha256": "70e10751697fa0ff974da637c39635c1fab403e1ad95de65e36ab5f4c2a99826" }, "downloads": -1, "filename": "redis-limpyd-extensions-1.0.tar.gz", "has_sig": false, "md5_digest": "a5350890d0419d9784b02607bf592907", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12952, "upload_time": "2018-01-31T17:07:54", "url": "https://files.pythonhosted.org/packages/e9/30/99bb51c9187e09b2d00d656d9679e53ddce8986a65198d76923aba76fea8/redis-limpyd-extensions-1.0.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "c1a05179d6a3a8c5492c8d2619203fe2", "sha256": "f2a9879f159de46d14379d6841d020988c112044f1d97a9fd5e9b16680080bd0" }, "downloads": -1, "filename": "redis_limpyd_extensions-1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c1a05179d6a3a8c5492c8d2619203fe2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*", "size": 14357, "upload_time": "2019-09-22T18:20:12", "url": "https://files.pythonhosted.org/packages/86/ec/c070aef44894fda3abd1fb3db7c5cfc3c30b9b87803f87622f7573c35440/redis_limpyd_extensions-1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d26c53312bf7df945f9ed30cf0ad6966", "sha256": "f926328fe8d8e243ffb3cbe3c37aa79cf5e79be19cd1a0c204ed0efaf84839fd" }, "downloads": -1, "filename": "redis-limpyd-extensions-1.1.tar.gz", "has_sig": false, "md5_digest": "d26c53312bf7df945f9ed30cf0ad6966", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*", "size": 16867, "upload_time": "2019-09-22T18:20:14", "url": "https://files.pythonhosted.org/packages/1c/2f/5317359517e86650b962ef8e51768365090b618fa6e29f0d3e9cc4035708/redis-limpyd-extensions-1.1.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "b32fa51bc53da04f5f450d29f4304f41", "sha256": "05d46f4cdfb544c57d963503f396a712cbad347aa5b20f2581f8382530b7ce08" }, "downloads": -1, "filename": "redis_limpyd_extensions-1.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b32fa51bc53da04f5f450d29f4304f41", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7", "size": 14387, "upload_time": "2019-10-11T13:35:25", "url": "https://files.pythonhosted.org/packages/87/ce/513660f6c466160ad9f4d2473a184df4bfe8150ed0b53e55c530895ac25c/redis_limpyd_extensions-1.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ce9941afb9fa6db34d3aaa62ced454ce", "sha256": "2c63e0d8127f2c89a8155c43a7c608971c9e41a3cc384615186b72fdf6ef226b" }, "downloads": -1, "filename": "redis-limpyd-extensions-1.1.1.tar.gz", "has_sig": false, "md5_digest": "ce9941afb9fa6db34d3aaa62ced454ce", "packagetype": "sdist", "python_version": "source", "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7", "size": 13042, "upload_time": "2019-10-11T13:35:28", "url": "https://files.pythonhosted.org/packages/c8/f0/0a43a0146cff80cb7111927126b115b0398349c025a38b81867c9154ddf4/redis-limpyd-extensions-1.1.1.tar.gz" } ], "2": [ { "comment_text": "", "digests": { "md5": "94a0379082fa69e8def824078c39f86f", "sha256": "3f456bf2b157343bd758b2ca0214bfcbbc4297172ae439bcae1e1292c18b4d97" }, "downloads": -1, "filename": "redis_limpyd_extensions-2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "94a0379082fa69e8def824078c39f86f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7", "size": 14387, "upload_time": "2019-10-11T13:57:41", "url": "https://files.pythonhosted.org/packages/fe/cd/46ea4401c1cc9091a70cb1513c009017ce5bde8e704ae1750a93da225aaf/redis_limpyd_extensions-2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "03c2d2dfb09c55695435e99d6246d4ee", "sha256": "512f50aae00ca6be952ba83c0e27da897475bfd18414df3db12620a83618f9b2" }, "downloads": -1, "filename": "redis-limpyd-extensions-2.tar.gz", "has_sig": false, "md5_digest": "03c2d2dfb09c55695435e99d6246d4ee", "packagetype": "sdist", "python_version": "source", "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7", "size": 13085, "upload_time": "2019-10-11T13:57:43", "url": "https://files.pythonhosted.org/packages/a3/12/1010171d1e844d84199a96aaa5ad4d465323aa82ec902550126efe7faa2b/redis-limpyd-extensions-2.tar.gz" } ], "2.0.dev0": [ { "comment_text": "", "digests": { "md5": "e98f74ae6f5983b4816d187e94b23085", "sha256": "5335f45bf2f7aaab63cfae3ef7702be040ed9d4255f7c399da9f88910462bb2e" }, "downloads": -1, "filename": "redis_limpyd_extensions-2.0.dev0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e98f74ae6f5983b4816d187e94b23085", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7", "size": 14489, "upload_time": "2019-10-09T08:28:56", "url": "https://files.pythonhosted.org/packages/ee/8d/54428658fdb74349cc403b92b8c161aa34afb902824b66b9ef2a5a261569/redis_limpyd_extensions-2.0.dev0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8974f16bea6e3297c4c697eb8d93c011", "sha256": "402eb9e43f0ab97cd8161c3af31376f4e269b32ef2b16c50dda51124d4735f0c" }, "downloads": -1, "filename": "redis-limpyd-extensions-2.0.dev0.tar.gz", "has_sig": false, "md5_digest": "8974f16bea6e3297c4c697eb8d93c011", "packagetype": "sdist", "python_version": "source", "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7", "size": 13107, "upload_time": "2019-10-09T08:28:58", "url": "https://files.pythonhosted.org/packages/88/0f/67b757b805609162bdfc9e617116511a5a0b6dd83962ca34c6608e25f4d1/redis-limpyd-extensions-2.0.dev0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "94a0379082fa69e8def824078c39f86f", "sha256": "3f456bf2b157343bd758b2ca0214bfcbbc4297172ae439bcae1e1292c18b4d97" }, "downloads": -1, "filename": "redis_limpyd_extensions-2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "94a0379082fa69e8def824078c39f86f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7", "size": 14387, "upload_time": "2019-10-11T13:57:41", "url": "https://files.pythonhosted.org/packages/fe/cd/46ea4401c1cc9091a70cb1513c009017ce5bde8e704ae1750a93da225aaf/redis_limpyd_extensions-2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "03c2d2dfb09c55695435e99d6246d4ee", "sha256": "512f50aae00ca6be952ba83c0e27da897475bfd18414df3db12620a83618f9b2" }, "downloads": -1, "filename": "redis-limpyd-extensions-2.tar.gz", "has_sig": false, "md5_digest": "03c2d2dfb09c55695435e99d6246d4ee", "packagetype": "sdist", "python_version": "source", "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7", "size": 13085, "upload_time": "2019-10-11T13:57:43", "url": "https://files.pythonhosted.org/packages/a3/12/1010171d1e844d84199a96aaa5ad4d465323aa82ec902550126efe7faa2b/redis-limpyd-extensions-2.tar.gz" } ] }