{ "info": { "author": "thekantian, jamesob", "author_email": "zach@percolate.com, jamesob@percolate.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "redset\n======\n\n|PyPI version| |build status| |Coverage Status|\n\nYou may not need heavyweights like Celery or RQ. Maintaing an AMQP server \nmight be overkill. There's a simpler, easier way to distribute work.\n\nRedset provides simple, generic sorted sets backed by Redis that can be used to\ncoordinate distributed systems and parcel out work. Unlike more common\ndistribution libraries like Celery or RQ, redset avoids duplicate work for\ncertain use-cases by maintaining a set of tasks instead of a list or queue.\nAnd it does so with a dead-simple interface that feels natural for Python.\n\nRedset is currently used in the wild to do things like\n\n- maintain a high-throughput work queue of streaming updates to be processed\n- power a multi-producer, multi-consumer scraping architecture that won't do\n the same work twice\n- maintain a simple, cross-process set of \"seen\" items that each have a \n TTL\n- schedule non-duplicate, periodic polling of analytics on social services\n\n\nFeatures\n--------\n\n- No worker daemons to run, no heavy AMQP service to monitor\n- Safe for multiple producers and consumers\n- Seamless, simple use with Python objects using serializers\n- Zero dependencies: you provide an object that implements the \n ``redis.client.Redis`` interface, we don't ask any questions.\n- Simple, easy-to-read implementation\n- Mimics Python's native ``set`` interface\n- Battle-tested\n- Python 3 compatible\n\nSimple example\n--------------\n\n.. code:: python\n\n import json\n import redis\n\n from redset import TimeSortedSet\n\n r = redis.Redis()\n ss = TimeSortedSet(r, 'important_json_biz', serializer=json)\n\n ss.add({'foo': 'bar1'})\n ss.add({'foo': 'bar2'})\n\n ss.add({'foo': 'bar3'})\n ss.add({'foo': 'bar3'})\n\n len(ss)\n # 3\n\n\n # ...some other process A\n\n ss.peek()\n # {'foo': 'bar1'}\n\n ss.pop()\n # {'foo': 'bar1'}\n\n\n # ...meanwhile in process B (at exactly same time as A's pop)\n\n ss.take(2)\n # [{'foo': 'bar2'}, {'foo': 'bar3'}]\n\nDocs\n----\n\n`Here `__\n\nAbout\n-----\n\nThis software was developed at `Percolate `__,\nwhere we use it for all sorts of things that involve maintaining\nsynchronized sets of things across process boundaries. A common use-case\nis to use redset for coordinating time-sensitive tasks where duplicate\nrequests may be generated.\n\nRedset is unopinionated about how consumers look or behave. Want to have\na plain 'ol Python consumer managed by supervisor? Fine. Want to be able\nto pop off items from within a celery job? Great. Redset has no say in\nwhere or how it is used: mechanism, not policy.\n\nUsage concepts\n--------------\n\n``redset.SortedSet`` and its subclasses can be instantiated with a few\nparamters that are notable.\n\nSpecifying a serializer\n~~~~~~~~~~~~~~~~~~~~~~~\n\nSince Redis only stores primitive numbers and strings, handling\nserialization and deserialization is a key part of making redset set\nusage simple in Python.\n\nA ``serializer`` instance can be passed (which adheres to the\n``redset.interfaces.Serializer`` interface, though it need not subclass\nit) to automatically handle packing and unpacking items managed with\nredset.\n\nSpecifying a scorer\n~~~~~~~~~~~~~~~~~~~\n\nA callable that specifies how to generate a score for items being added\ncan also be passed to SortedSet's constructor as ``scorer``. This\ncallable takes one argument, which is the item *object* (i.e. the item\nbefore serialization) to be \"scored.\"\n\nRelated projects\n----------------\n\n- `redis-py `__\n- `celery `__\n- `RQ `__\n\n.. |PyPI version| image:: https://badge.fury.io/py/redset.png\n :target: http://badge.fury.io/py/redset\n.. |build status| image:: https://travis-ci.org/percolate/redset.png?branch=master\n :target: https://travis-ci.org/percolate/redset\n.. |Coverage Status| image:: https://coveralls.io/repos/percolate/redset/badge.png?branch=master\n :target: https://coveralls.io/r/percolate/redset?branch=master", "description_content_type": null, "docs_url": null, "download_url": null, "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/percolate/redset", "keywords": null, "license": "see LICENSE", "maintainer": null, "maintainer_email": null, "name": "redset", "package_url": "https://pypi.org/project/redset/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/redset/", "project_urls": { "Homepage": "https://github.com/percolate/redset" }, "release_url": "https://pypi.org/project/redset/0.5.1/", "requires_dist": null, "requires_python": null, "summary": "Simple, distributed sorted sets with redis", "version": "0.5.1" }, "last_serial": 2615086, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "efa9d5f3cb5b782d560c7dfca5b43074", "sha256": "2fa5e6fe321dc930139d231add49dbd74e7c94dc9146f7df7a3785be78db4b24" }, "downloads": -1, "filename": "redset-0.1.tar.gz", "has_sig": false, "md5_digest": "efa9d5f3cb5b782d560c7dfca5b43074", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4143, "upload_time": "2013-09-18T20:40:13", "url": "https://files.pythonhosted.org/packages/78/8f/7c390646350fee1fa9cd8dd56fd2013f04b54566fe542787233ea6851934/redset-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "7674f06a566832a74b055effb6a6870b", "sha256": "d2721903dbdd47c07f09f5efde2a04a7802de54ad29347d94014b3dda1e3dc15" }, "downloads": -1, "filename": "redset-0.1.1.tar.gz", "has_sig": false, "md5_digest": "7674f06a566832a74b055effb6a6870b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4216, "upload_time": "2013-09-18T21:16:17", "url": "https://files.pythonhosted.org/packages/44/d6/5f424f2c63df77d507deea4a76fe4c5147a45bade5348c8c6ef061d3b118/redset-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "44d13dafec19010b49f4619f204e2c64", "sha256": "89848513d10ecdb886dd2c5c6814f5a585dfdf837a2186f28147f1cc5be3638a" }, "downloads": -1, "filename": "redset-0.1.2.tar.gz", "has_sig": false, "md5_digest": "44d13dafec19010b49f4619f204e2c64", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4220, "upload_time": "2013-09-19T18:06:54", "url": "https://files.pythonhosted.org/packages/94/50/e2fb4d47741b128c91dc9d150d505253fcecb738ac16e6eb295ed1c6801a/redset-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "40d95391caeb8da5c8ae9e239ab1c997", "sha256": "86ea08dd30be420ae14a6a91f4ab8e0defb45d99368402308bf59cd6c9f3dcc6" }, "downloads": -1, "filename": "redset-0.2.0.tar.gz", "has_sig": false, "md5_digest": "40d95391caeb8da5c8ae9e239ab1c997", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4242, "upload_time": "2013-09-20T03:54:37", "url": "https://files.pythonhosted.org/packages/0b/e8/d73c1b739f38f64604479cee30619a0e9884a43a3793843699de6867c54e/redset-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "8df1ee5a510d1d682eefc63a4efcd8c0", "sha256": "1ec9fe6301a1a23875475fb15dce2c25ff63d3af0519d212023f6e346e40e081" }, "downloads": -1, "filename": "redset-0.2.1.tar.gz", "has_sig": false, "md5_digest": "8df1ee5a510d1d682eefc63a4efcd8c0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4178, "upload_time": "2013-09-23T13:50:03", "url": "https://files.pythonhosted.org/packages/8b/f2/4986ab0a15314bb5d06b3b7ea90c5b8a2d6ffae9e0496617c16cd6ba6128/redset-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "416b356b896e16ac92142858bdd612e5", "sha256": "b606fb85a0c45d90d4c5105cc3f2db91ab8bd266ebd0089e8021b7bf92621dd3" }, "downloads": -1, "filename": "redset-0.2.2.tar.gz", "has_sig": false, "md5_digest": "416b356b896e16ac92142858bdd612e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4469, "upload_time": "2013-09-25T19:46:03", "url": "https://files.pythonhosted.org/packages/91/02/401a8c42aa46829c91969ff45bb71feb7530c9fd9fd9b559e7cc02ff8b8c/redset-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "c8488b84aaa78edfa110f502f46be0f2", "sha256": "d68fd36a723986883a47dedcd7faa677aa77b48daee1c455cee2623c8cdc54e3" }, "downloads": -1, "filename": "redset-0.2.3.tar.gz", "has_sig": false, "md5_digest": "c8488b84aaa78edfa110f502f46be0f2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6085, "upload_time": "2013-10-10T21:14:29", "url": "https://files.pythonhosted.org/packages/27/d7/be55c901e14c8e72dd503787d2aa70ad73995c8d4bb10f6c858b7ab07efb/redset-0.2.3.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "aba82c401f03e12cf6afbdf8f4a4d887", "sha256": "29242734660261f186b8bf2182baeeb75e0869565db48344c0b3879228eef99b" }, "downloads": -1, "filename": "redset-0.3.tar.gz", "has_sig": false, "md5_digest": "aba82c401f03e12cf6afbdf8f4a4d887", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6657, "upload_time": "2013-10-12T16:05:04", "url": "https://files.pythonhosted.org/packages/fa/0a/af77557e0d686f48fbe826539142bf4fdb4fc6609e386fc0d10cc0ea3956/redset-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "8c07b41fa617b8b8346335b1f6a3422a", "sha256": "dc5f0097629e7db4ffe52cceefd045b5d576f3c418679f68ea54fb75039dddeb" }, "downloads": -1, "filename": "redset-0.3.1.tar.gz", "has_sig": false, "md5_digest": "8c07b41fa617b8b8346335b1f6a3422a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6733, "upload_time": "2013-10-14T22:36:31", "url": "https://files.pythonhosted.org/packages/d5/3f/a58d3efcfad574a3b8d11fd718154fdead4f5562b6d28ff0d808f0a30180/redset-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "d21be078e7fa23ba488870a1b6e66ca0", "sha256": "35ba1b6b75ec2694541f0412b5402e98f2ad116cc41b079a402a123c7d2c9346" }, "downloads": -1, "filename": "redset-0.3.2.tar.gz", "has_sig": false, "md5_digest": "d21be078e7fa23ba488870a1b6e66ca0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7126, "upload_time": "2013-10-31T19:15:40", "url": "https://files.pythonhosted.org/packages/1d/00/dce966f4dd5ca277cd5982802288b6950b341c20a44b0c8e3cabe257cc30/redset-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "dd3475521a52dac59f8fdb5b1b20ef31", "sha256": "9d265c93306652c1fb1d3e490a85cd9d5300a034af6bc0b7c08cd494a4beccfb" }, "downloads": -1, "filename": "redset-0.3.3.tar.gz", "has_sig": false, "md5_digest": "dd3475521a52dac59f8fdb5b1b20ef31", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7157, "upload_time": "2013-11-01T22:06:18", "url": "https://files.pythonhosted.org/packages/ff/c8/fe7c66fb5d1b427e5898a0c896fe4a88564af402e4d25772c0090a66f8c3/redset-0.3.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "8aee79e03fad0504909020b91638ba9d", "sha256": "3051b6897c5de40d85ab24d4a59a600137cdfa53b7fb28c434ca3bf693a63fd4" }, "downloads": -1, "filename": "redset-0.4.tar.gz", "has_sig": false, "md5_digest": "8aee79e03fad0504909020b91638ba9d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7166, "upload_time": "2013-11-04T16:17:08", "url": "https://files.pythonhosted.org/packages/fb/31/73b9abe070e5387d5a709a50c0aa7a58631f709eb90e8f5faf18f91dc58c/redset-0.4.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "756f1feab2647e90f029cc63d290deea", "sha256": "506b1094f9b00d3cedcd80b495d3f03b19b82dd205578b51599b93dafc09fb21" }, "downloads": -1, "filename": "redset-0.4.2.tar.gz", "has_sig": false, "md5_digest": "756f1feab2647e90f029cc63d290deea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7897, "upload_time": "2014-03-05T20:25:49", "url": "https://files.pythonhosted.org/packages/44/c0/d35ceab8c0cc1bbac76dccf3b2a3a801132c8f77c039e7919156a7ab4894/redset-0.4.2.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "45afa8f0a81dac56735c36d4ba51ee8e", "sha256": "2d00bbbd26a8aa29f940c1e618cba69fd298ab9072bd0fb8318777801ef2e631" }, "downloads": -1, "filename": "redset-0.5.tar.gz", "has_sig": false, "md5_digest": "45afa8f0a81dac56735c36d4ba51ee8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7861, "upload_time": "2014-09-02T20:51:45", "url": "https://files.pythonhosted.org/packages/b2/fb/0f1447258399f175d8f312bceb13a75a1b0f29ae0fda07acbd6309069d56/redset-0.5.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "5cf1398edde9e7125b563bdbb153adab", "sha256": "d7436d638531bfa3baa93ba4a365afd2262cae8538ec1f49ff8cfe4c6263abbf" }, "downloads": -1, "filename": "redset-0.5.1-py2-none-any.whl", "has_sig": false, "md5_digest": "5cf1398edde9e7125b563bdbb153adab", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 11716, "upload_time": "2015-04-02T19:00:05", "url": "https://files.pythonhosted.org/packages/70/a6/3823eae1a6c60e17068145e35387163e7e6f657558d674fffb68e74ce136/redset-0.5.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4790fb68a3a58aabddd5955ffd9b4ca0", "sha256": "f841ff13156725ab5facbf287cac9c97152dcdd74885880b268b06cff6fbb436" }, "downloads": -1, "filename": "redset-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4790fb68a3a58aabddd5955ffd9b4ca0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11716, "upload_time": "2015-04-02T19:00:08", "url": "https://files.pythonhosted.org/packages/c5/6e/359b7165782e7b517a54b7aed1c9c4b2665fd6ca06256f8acec5b786cd09/redset-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bac9043b24f830cafd3826d6e4bafd65", "sha256": "a1eeab91f95acc586e5886f3fffdc2bcfbdd00dc00d0da881c5d1482b70a92af" }, "downloads": -1, "filename": "redset-0.5.1.tar.gz", "has_sig": false, "md5_digest": "bac9043b24f830cafd3826d6e4bafd65", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8624, "upload_time": "2015-04-02T19:00:10", "url": "https://files.pythonhosted.org/packages/f5/cf/aabbe231b78a8b50a3e7779d03b5a2493e040e470f26f99b7e10644fa49f/redset-0.5.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5cf1398edde9e7125b563bdbb153adab", "sha256": "d7436d638531bfa3baa93ba4a365afd2262cae8538ec1f49ff8cfe4c6263abbf" }, "downloads": -1, "filename": "redset-0.5.1-py2-none-any.whl", "has_sig": false, "md5_digest": "5cf1398edde9e7125b563bdbb153adab", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 11716, "upload_time": "2015-04-02T19:00:05", "url": "https://files.pythonhosted.org/packages/70/a6/3823eae1a6c60e17068145e35387163e7e6f657558d674fffb68e74ce136/redset-0.5.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4790fb68a3a58aabddd5955ffd9b4ca0", "sha256": "f841ff13156725ab5facbf287cac9c97152dcdd74885880b268b06cff6fbb436" }, "downloads": -1, "filename": "redset-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4790fb68a3a58aabddd5955ffd9b4ca0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11716, "upload_time": "2015-04-02T19:00:08", "url": "https://files.pythonhosted.org/packages/c5/6e/359b7165782e7b517a54b7aed1c9c4b2665fd6ca06256f8acec5b786cd09/redset-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bac9043b24f830cafd3826d6e4bafd65", "sha256": "a1eeab91f95acc586e5886f3fffdc2bcfbdd00dc00d0da881c5d1482b70a92af" }, "downloads": -1, "filename": "redset-0.5.1.tar.gz", "has_sig": false, "md5_digest": "bac9043b24f830cafd3826d6e4bafd65", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8624, "upload_time": "2015-04-02T19:00:10", "url": "https://files.pythonhosted.org/packages/f5/cf/aabbe231b78a8b50a3e7779d03b5a2493e040e470f26f99b7e10644fa49f/redset-0.5.1.tar.gz" } ] }