{ "info": { "author": "Alexander Artemenko", "author_email": "svetlyak.40wt@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: POSIX", "Operating System :: Unix", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Utilities" ], "description": "================\npython-processor\n================\n\nBadges\n======\n\n| |docs| |changelog| |travis| |coveralls| |landscape| |scrutinizer|\n| |version| |downloads| |wheel| |supported-versions| |supported-implementations|\n\n.. |docs| image:: https://readthedocs.org/projects/python-processor/badge/?style=flat\n :target: https://readthedocs.org/projects/python-processor\n :alt: Documentation Status\n\n.. |changelog| image:: http://allmychanges.com/p/python/processor/badge/\n :target: http://allmychanges.com/p/python/processor/?utm_source=badge\n :alt: Release Notes\n\n.. |travis| image:: http://img.shields.io/travis/svetlyak40wt/python-processor/master.png?style=flat\n :alt: Travis-CI Build Status\n :target: https://travis-ci.org/svetlyak40wt/python-processor\n\n.. |coveralls| image:: http://img.shields.io/coveralls/svetlyak40wt/python-processor/master.png?style=flat\n :alt: Coverage Status\n :target: https://coveralls.io/r/svetlyak40wt/python-processor\n\n.. |landscape| image:: https://landscape.io/github/svetlyak40wt/python-processor/master/landscape.svg?style=flat\n :target: https://landscape.io/github/svetlyak40wt/python-processor/master\n :alt: Code Quality Status\n\n.. |version| image:: http://img.shields.io/pypi/v/processor.png?style=flat\n :alt: PyPI Package latest release\n :target: https://pypi.python.org/pypi/processor\n\n.. |downloads| image:: http://img.shields.io/pypi/dm/processor.png?style=flat\n :alt: PyPI Package monthly downloads\n :target: https://pypi.python.org/pypi/processor\n\n.. |wheel| image:: https://pypip.in/wheel/processor/badge.png?style=flat\n :alt: PyPI Wheel\n :target: https://pypi.python.org/pypi/processor\n\n.. |supported-versions| image:: https://pypip.in/py_versions/processor/badge.png?style=flat\n :alt: Supported versions\n :target: https://pypi.python.org/pypi/processor\n\n.. |supported-implementations| image:: https://pypip.in/implementation/processor/badge.png?style=flat\n :alt: Supported imlementations\n :target: https://pypi.python.org/pypi/processor\n\n.. |scrutinizer| image:: https://img.shields.io/scrutinizer/g/svetlyak40wt/python-processor/master.png?style=flat\n :alt: Scrtinizer Status\n :target: https://scrutinizer-ci.com/g/svetlyak40wt/python-processor/\n\n\nSimple rules\n==============\n\nPython processor is a tool for creating chained pipelines for dataprocessing.\nIt have very few key concepts:\n\nData object\n Any python dict with two required fields: ``source`` and ``type``.\nSource\n An iterable sequence of ``data objects`` or a function which returns ``data objects``.\n See `full list of sources`_ in the docs.\nOutput\n A function which accepts a ``data object`` as input and could output another. See `full list of outputs`_ in the docs.\n (or same) ``data object`` as result.\nPredicate\n Pipeline consists from sources outputs, but ``predicate`` decides which\n ``data object`` should be processed by which ``output``.\n\nQuick example\n=============\n\nHere is example of pipeline which reads IMAP folder and sends all emails to Slack chat:\n\n.. code:: python\n\n run_pipeline(\n sources.imap('imap.gmail.com'\n 'username',\n 'password'\n 'INBOX'),\n [prepare_email_for_slack, outputs.slack(SLACK_URL)])\n\nHere you construct a pipeline, which uses ``sources.imap`` for reading imap folder\n\"INBOX\" of ``username@gmail.com``. In more complex case ``outputs.fanout``\ncan be used for routing dataobjects to different processors and ``sources.mix`` can\nbe used to merge items two or more sources into a one stream.\n\nFunctions ``prepare_email_to_slack`` and ``outputs.slack(SLACK_URL)`` are processors. First one\nis a simple function which accepts data object, returned by imap source and transforming\nit to the data object which could be used by slack.output. We need that because slack\nrequires a different set of fields. Call to ``outputs.slack(SLACK_URL)`` returns a\nfunction which gets an object and send it to the specified Slack's endpoint.\n\nIt is just example, for working snippets, continue reading this documention ;-)\n\n.. Note:: By the way, did you know there is a Lisp dialect which runs on Python\n virtual machine? It's name is HyLang, and python processor is written in this\n language.\n\n \nInstallation\n============\n\nCreate a virtual environment with python3:::\n \n virtualenv --python=python3 env\n source env/bin/activate\n\nInstall required version of hylang (this step is necessary because Hy syntax is not\nfinal yet and frequently changed by language maintainers):::\n\n pip install -U 'git+git://github.com/hylang/hy.git@a3bd90390cb37b46ae33ce3a73ee84a0feacce7d#egg=hy'\n\nIf you are on OSX, then install lxml on OSX separately:::\n \n STATIC_DEPS=true pip install lxml\n\nIf you want to access IMAP over SSL on OSX, then you need to install\n``openssl`` via homebrew, and then install ``pyopenssl`` like this:::\n\n brew install openssl\n env LDFLAGS=\"-L$(brew --prefix openssl)/lib\" \\\n CFLAGS=\"-I$(brew --prefix openssl)/include\" \\\n pip install -U --force-reinstall pyopenssl\n\nThen install the ``processor``:::\n\n pip install processor\n\nUsage\n=====\n\nNow create an executable python script, where you'll place your pipline's configuration.\nFor example, this simple code creates a process line which searches new results in Twitter\nand outputs them to console. Of cause, you can output them not only to console, but also\npost by email, to Slack chat or everywhere else if there is an output for it:\n\n.. code:: python\n\n #!env/bin/python3\n import os\n from processor import run_pipeline, sources, outputs\n from twiggy_goodies.setup import setup_logging\n\n\n for_any_message = lambda msg: True\n\n def prepare(tweet):\n return {'text': tweet['text'],\n 'from': tweet['user']['screen_name']}\n\n setup_logging('twitter.log')\n\n run_pipeline(\n sources=[sources.twitter.search(\n 'My Company',\n consumer_key='***', consumer_secret='***',\n access_token='***', access_secret='***',\n )],\n rules=[(for_any_message, [prepare, outputs.debug()])])\n\n\nRunning this code, will fetch new results for search by query ``My Company``\nand output them on the screen. Of course, you could use any other ``output``,\nsupported by the ``processor``. Browse online documentation to find out\nwhich sources and outputs are supported and for to configure them.\n\n\n.. _full list of sources: sources.html\n.. _full list of outputs: outputs.html\n\n\nIdeas for Sources and Outputs\n=============================\n\n* ``web-hook`` endpoint `(in progress)`.\n* ``tail`` source which reads file and outputs lines appeared in a file between invocations\n or is able to emulate ``tail -f`` behaviour. Python module\n `tailer `_ could be used here.\n* ``grep`` output -- a filter to grep some fields using patterns. With ``tail`` and ``grep``\n you could build a pipeline which watch on a log and send errors by email or to the chat.\n* ``xmpp`` output.\n* ``irc`` output.\n* ``rss/atom feed reader``.\n* ``weather`` source which tracks tomorrow's weather forecast and outputs a message if it was\n changed significantly, for example from \"sunny\" to \"rainy\".\n* ``github`` some integrations with github API?\n* ``jira`` or other task tracker of your choice?\n* `suggest your ideas!`\n\n\nDocumentation\n=============\n\nhttps://python-processor.readthedocs.org/\n\n\nDevelopment\n===========\n\nTo run the all tests run::\n\n tox\n\n\nAuthors\n=======\n\n* Alexander Artemenko - http://dev.svetlyak.ru\n\nChangelog\n=========\n\n0.10.0 (2016-01-04)\n-------------------\n\n* IMAP source was fixed to work with new IMAPClient's API and\n support ``IMAPClient > 1.0.0``.\n* Datastorage was fixed to get ``filename`` from ``PROCESSOR_DB``\n environment variable in case if it was setup using\n ``os.environ['PROCESSOR_DB'] = 'some.db'`` after the imports.\n\n0.9.0 (2015-12-06)\n------------------\n\nCode was fixed to work with HyLang from ``a3bd90390cb37b46ae33ce3a73ee84a0feacce7d``\ncommit. Please, use this pinned version of HyLang and `subscribe`_ on future\nrelease notes to know when this requirement will change.\n\n.. _subscribe: https://allmychanges.com/p/python/processor/\n\n0.8.0 (2015-11-16)\n------------------\n\n* Code was fixed to work with latest Hy, from GitHub.\n* Added ``twitter.mentions`` source, to read stream of mentions from the Twitter.\n* Fixed a way how number of messages from IMAP folder is limited. Previously\n limit was applied even when we already know an ID of the last seen message,\n but now limit is ignored in this case and only applied when visiting the\n folder first time.\n\n0.7.0 (2015-05-05)\n------------------\n\nNew output \u2013 XMPP was added and now processor is able\nto notify Jabber users.\n\n0.6.0 (2015-05-01)\n------------------\n\nThe biggest change in this release is a new source \u2013 ``github.releases``.\nIt is able to read all new releases in given repository and send them into\nprocessing pipeline. This works as for public repositories, and for private\ntoo. `Read the docs`_ for futher details.\n\n.. _Read the docs: https://python-processor.readthedocs.org/en/latest/sources.html#github-releases\n\nOther changes are:\n\n* Storage backend now saves JSON database nicely pretty printed for you could read and edit it in your favorite editor. This is Emacs, right?\n* Twitter.search source now saves state after the tweet was processed. This way processor shouldn't loose tweets if there was exception somewhere in processing pipeline.\n* IMAP source was fixed and now is able to fetch emails from really big folders.\n\n\n0.5.0 (2015-04-15)\n------------------\n\nGood news, everyone! New output was added - ``email``.\nNow Processor is able to notify you via email about any event.\n\n0.4.0 (2015-04-06)\n------------------\n\n* Function ``run_pipline`` was simplified and now accepts only one source and one ouput.\n To implement more complex pipelines, use ``sources.mix`` and ``outputs.fanout`` helpers.\n\n0.3.0 (2015-04-01)\n------------------\n\n* Added a `web.hook`_ source.\n* Now `source` could be not only a iterable object, but any function which returns values.\n\n.. _web.hook: https://python-processor.readthedocs.org/en/latest/sources.html#web-hook\n\n0.2.1 (2015-03-30)\n------------------\n\nFixed error in ``import-or-error`` macro, which prevented from using 3-party libraries.\n\n0.2.0 (2015-03-30)\n------------------\n\nMost 3-party libraries are optional now. If you want to use\nsome extension which requires external library, it will issue\nan error and call ``sys.exit(1)`` until you satisfy this\nrequirement.\n\nThis should make life easier for thouse, who does not want\nto use ``rss`` output which requires ``feedgen`` which requires\n``lxml`` which is hard to build because it is C extension.\n\n0.1.0 (2015-03-18)\n------------------\n\n* First release on PyPI.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/svetlyak40wt/python-processor", "keywords": "processing,devops,imap,rss,twitter", "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "processor", "package_url": "https://pypi.org/project/processor/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/processor/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/svetlyak40wt/python-processor" }, "release_url": "https://pypi.org/project/processor/0.10.0/", "requires_dist": null, "requires_python": null, "summary": "A microframework to build source -> filter -> action workflows.", "version": "0.10.0" }, "last_serial": 2290471, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "37826e49fd12f4c13f365112bf3ec7d8", "sha256": "dc2b352e28e70e66b50a072b2faa2b6bbf88b3528065c8bab1d373286303aa0d" }, "downloads": -1, "filename": "processor-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "37826e49fd12f4c13f365112bf3ec7d8", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 11702, "upload_time": "2015-03-18T15:43:28", "url": "https://files.pythonhosted.org/packages/31/94/a86ead88481ea94618f71b1b1d575b8af88df5b0ccea68b26200402c686e/processor-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "60d5afdec929f3f4aebda7865302bfc1", "sha256": "93a774f1ef4a0fc38f6ae3f3c3cd30466970293b82b211915e5c367e1a9f3095" }, "downloads": -1, "filename": "processor-0.1.0.tar.gz", "has_sig": false, "md5_digest": "60d5afdec929f3f4aebda7865302bfc1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17297, "upload_time": "2015-03-18T15:23:11", "url": "https://files.pythonhosted.org/packages/d6/f8/7895c590e1174478cfabd12b2aab2755206415339eb8f966d5e36297b5c6/processor-0.1.0.tar.gz" } ], "0.10.0": [ { "comment_text": "", "digests": { "md5": "f325c4edcdae7f23388597e351fb274e", "sha256": "182a99a291560f472606730d404ead63688dd29ad41bd5ea525c7f58fab2ab1e" }, "downloads": -1, "filename": "processor-0.10.0.tar.gz", "has_sig": false, "md5_digest": "f325c4edcdae7f23388597e351fb274e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 113425, "upload_time": "2016-01-04T13:01:11", "url": "https://files.pythonhosted.org/packages/9d/70/76b434553b33eb91ac2f83cd6aa6286f3886342da2efea4bf0c47e62e841/processor-0.10.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "a20203c8d98bfb6169ab04cc4834cfbe", "sha256": "9a584d983bacceb11bffe835af253d2d5ff230983f4587fcad030927b2db7aec" }, "downloads": -1, "filename": "processor-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a20203c8d98bfb6169ab04cc4834cfbe", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 15152, "upload_time": "2015-03-30T09:06:56", "url": "https://files.pythonhosted.org/packages/3e/af/6e061ec22f2abb4c104f17db096d21e998972c709dcd67771e1b90f9ccf1/processor-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "440c89b59590eaf9617e2dbc04b845a7", "sha256": "33b98d4bc665eb3b2b8844b3cdebd8d98f2efee78ee16f573c392a804db5007a" }, "downloads": -1, "filename": "processor-0.2.0.tar.gz", "has_sig": false, "md5_digest": "440c89b59590eaf9617e2dbc04b845a7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23370, "upload_time": "2015-03-30T09:06:50", "url": "https://files.pythonhosted.org/packages/56/03/4553e5e3347a337f83f9f1bce7c6c3fb8483366ce6d8577cb7fedd1c0ca8/processor-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "971179ceba633614f183c0c92e91d9a9", "sha256": "5162d25088c5b860fc8b47bc7df199b6ab104d2829e499d9ce22c088c6a6cb35" }, "downloads": -1, "filename": "processor-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "971179ceba633614f183c0c92e91d9a9", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 15922, "upload_time": "2015-03-30T18:37:53", "url": "https://files.pythonhosted.org/packages/19/d9/6ccf071d96187cc315c695dbb7ca91f8d3d4778952c7c5abbb1dfb77254c/processor-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "894140ce68f83800ef90818667c7c238", "sha256": "59dab356bb313a897dbdb172a90c5e0979e0f6240d52ffc3a3afa41164f33415" }, "downloads": -1, "filename": "processor-0.2.1.tar.gz", "has_sig": false, "md5_digest": "894140ce68f83800ef90818667c7c238", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23878, "upload_time": "2015-03-30T18:37:48", "url": "https://files.pythonhosted.org/packages/67/51/ce6ef138b3f200fae359b476e80beef789f63eec99f88e1903f084f31852/processor-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "824cc58b2159b0958d985752778899ac", "sha256": "a9ccc567a7b7fdfe8718cc5c43b47d5641ead794b2e75871e02f5f72ccf356bf" }, "downloads": -1, "filename": "processor-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "824cc58b2159b0958d985752778899ac", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 17585, "upload_time": "2015-04-01T13:36:14", "url": "https://files.pythonhosted.org/packages/97/9a/f3e576d6dbbaaa22516df23414a620ac3ec60f823e2374fb025982399361/processor-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d0373a94e00d17fcebcb37fb3483a7ce", "sha256": "d2124732929caf11dd687641c7006a9c8a6e04fa1b2101c3aebb7fb04c4b7d46" }, "downloads": -1, "filename": "processor-0.3.0.tar.gz", "has_sig": false, "md5_digest": "d0373a94e00d17fcebcb37fb3483a7ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26384, "upload_time": "2015-04-01T13:36:09", "url": "https://files.pythonhosted.org/packages/69/2f/6e101baacb2aa83c0fa0f6b49bd7afbf28b15852f04d5b8eea3da84d3636/processor-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "dfef2ce66ca5432c9c1819f9168fc6b5", "sha256": "91580a04f99bcc6c7c6bf91693db66280c7182c7785490294791f16c3b1525af" }, "downloads": -1, "filename": "processor-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "dfef2ce66ca5432c9c1819f9168fc6b5", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 18662, "upload_time": "2015-04-06T11:41:42", "url": "https://files.pythonhosted.org/packages/01/75/b0edada953d330ba559fe6be178a288ef3a7d1a8bee0a616cfe1f5344fda/processor-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f6b567ed9339fec2f852efa7c090b120", "sha256": "9aaff8e08d3775c52da9013a8bfe229799affb51214e21d866a0eb4a96295e8b" }, "downloads": -1, "filename": "processor-0.4.0.tar.gz", "has_sig": false, "md5_digest": "f6b567ed9339fec2f852efa7c090b120", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27827, "upload_time": "2015-04-06T11:41:38", "url": "https://files.pythonhosted.org/packages/22/05/b7ef088fae38e5d2687920637ef68f2f5a204e8be7db4bca7e2e8f759576/processor-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "55e842b45adc3b035ed81baeed093e69", "sha256": "d59967b589c91ae118a45c9c317f5b350c68c06307acc65aee5920dda3afae51" }, "downloads": -1, "filename": "processor-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "55e842b45adc3b035ed81baeed093e69", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 19368, "upload_time": "2015-04-15T08:03:34", "url": "https://files.pythonhosted.org/packages/39/e7/245e4251ade583fbd799c8f2da2b0def772ea59168850fbb5543ab79e8b8/processor-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "08257a003410791d9768816e133761ee", "sha256": "3ccd2dd903d19709eb80b3544392f9e7529ef57ff04d28b405bf0e5677bab640" }, "downloads": -1, "filename": "processor-0.5.0.tar.gz", "has_sig": false, "md5_digest": "08257a003410791d9768816e133761ee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28617, "upload_time": "2015-04-15T08:03:28", "url": "https://files.pythonhosted.org/packages/da/67/34e7df9557c22d9aa9a707b1a00bc264ea5bdca75ff7406b48581c978049/processor-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "4412cee61d9597aa2622492e4f76bdbc", "sha256": "763d2d5a20e0c6400f537957638d07fa8d78c317dadd810141cd95dc494e71ba" }, "downloads": -1, "filename": "processor-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4412cee61d9597aa2622492e4f76bdbc", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 22151, "upload_time": "2015-05-01T18:46:27", "url": "https://files.pythonhosted.org/packages/85/a6/9c771d6dfe54842c13bceb32dcb61839d6442fc292979e5a63f2ab055c54/processor-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dea13d8d4a72087a00013874c585144e", "sha256": "897f87f72fd1dd89b33e9d7ecea385ec81eab902225df0b4345fbbcfe14b8828" }, "downloads": -1, "filename": "processor-0.6.0.tar.gz", "has_sig": false, "md5_digest": "dea13d8d4a72087a00013874c585144e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 111257, "upload_time": "2015-05-01T18:46:22", "url": "https://files.pythonhosted.org/packages/d6/18/6312c42415a2a18c23d96f019b95ab939d545db0e8765cce30acc39c7a04/processor-0.6.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "bc30bedad1ec9e468f84f028bbe4c565", "sha256": "78ca3829ba53e3cdbced256b016fd4a92a1c764ab1610cc872a451b6cd065648" }, "downloads": -1, "filename": "processor-0.7.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bc30bedad1ec9e468f84f028bbe4c565", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 22284, "upload_time": "2015-05-05T14:23:56", "url": "https://files.pythonhosted.org/packages/9e/31/bd148aba335d1add013087bf91a803a41cd89434f8c9e757ea515a256bd8/processor-0.7.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a79443040e6e1ad09fb742294366f3c7", "sha256": "19f686058e92043ce29b2466252d8a2a1a6eb7df04ed2e4f473692a6fa0a12a2" }, "downloads": -1, "filename": "processor-0.7.0.tar.gz", "has_sig": false, "md5_digest": "a79443040e6e1ad09fb742294366f3c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 111835, "upload_time": "2015-05-05T14:23:52", "url": "https://files.pythonhosted.org/packages/97/6d/f4f9a3de74ad8b21a55612ec60a1c62a8a95085686715636aa5cca15bc38/processor-0.7.0.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "7eedc7fa6d52bb85ef56f4e60a968767", "sha256": "a90b421ebd5e7dc49748993ccd3545ca481ddf094720f3ac134ed913aa04d60b" }, "downloads": -1, "filename": "processor-0.8.0.tar.gz", "has_sig": false, "md5_digest": "7eedc7fa6d52bb85ef56f4e60a968767", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 113429, "upload_time": "2015-11-16T09:24:17", "url": "https://files.pythonhosted.org/packages/5e/eb/9e67445776b4114b40b6b81e6368cd5abc8a084ce81d33626f079549863b/processor-0.8.0.tar.gz" } ], "0.9.0": [] }, "urls": [ { "comment_text": "", "digests": { "md5": "f325c4edcdae7f23388597e351fb274e", "sha256": "182a99a291560f472606730d404ead63688dd29ad41bd5ea525c7f58fab2ab1e" }, "downloads": -1, "filename": "processor-0.10.0.tar.gz", "has_sig": false, "md5_digest": "f325c4edcdae7f23388597e351fb274e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 113425, "upload_time": "2016-01-04T13:01:11", "url": "https://files.pythonhosted.org/packages/9d/70/76b434553b33eb91ac2f83cd6aa6286f3886342da2efea4bf0c47e62e841/processor-0.10.0.tar.gz" } ] }