{ "info": { "author": "Runzhou Li (Leo)", "author_email": "runzhou.li@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3" ], "description": "tidehunter\n==========\n\nHTTP streaming with accurate flow control\n\nMaster branch: |Build Status|\n\n**NOTE**: Not backward compatible with 0.x since 1.x.\n\nHighlights\n----------\n\n- Consumption limits, total control over your stream quota just on the\n client side.\n- Instant on/off switch and accurate consumption counter. Best used\n with `techies `__.\n- Queue interface for scalable stream data consumption. Best used with\n `techies `__.\n- Core mechanisms based on the solid\n `requests `__ library,\n inherits all its goodness.\n\nInstallation\n------------\n\n.. code:: bash\n\n $ pip install tidehunter\n $ pip install tidehunter --upgrade\n\nUsage\n-----\n\nExample 1 (with limit):\n~~~~~~~~~~~~~~~~~~~~~~~\n\n**NOTE**: when no external ``Queue`` or ``StateCounter`` supplied,\n``Hunter`` uses the Python standard ``Queue`` and the builtin\n``SimpleStateCounter`` respectively, which are usually enough for single\nprocess designs and other simple cases.\n\n.. code:: python\n\n from tidehunter import Hunter\n\n # The Hunter!\n h = Hunter(url='https://httpbin.org/stream/20')\n\n # Start streaming\n h.tide_on(limit=5)\n\n # Consume the data which should be in the data queue now\n while h.q.qsize():\n print(h.q.get()) # profit x 5\n\n # You can re-use the same Hunter object, with a difference limit\n r = h.tide_on(limit=1) # this time we only want one record\n\n assert h.q.qsize() == 1 # or else there's a bug, create an issue!\n\n print(h.q.get()) # more profit\n\n # r is actually just a requests.Response object\n print(r.headers)\n print(r.status_code)\n # ... read up on requests library for more information\n\nExample 2 (without limit):\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n**NOTE**: this example uses ``techies`` and therefore requires Redis\ninstalled.\n\nAssume you have a process running the following code:\n\n.. code:: python\n\n from techies import StateCounter, Queue\n from tidehunter import Hunter\n\n # The data queue\n q = Queue(key='demo_q', host='localhost', port=6379, db=0)\n\n # The state machine and record counter (state counter)\n sc = StateCounter(key='demo_sc', host='localhost', port=6379, db=0)\n\n # The Hunter!\n h = Hunter(url='SOME_ENDLESS_STREAM_LIKE_TWITTER_FIREHOSE', q=q, sc=sc)\n\n # Start streaming, FOREVA\n h.tide_on()\n\nThen you delegate the flow control and data consumption to another/many\nother processes such as:\n\n.. code:: python\n\n from techies import StateCounter, Queue\n\n # The key is to have the SAME state counter\n sc = StateCounter(key='demo_sc', host='localhost', port=6379, db=0)\n\n # And the SAME data queue\n q = Queue(key='demo_q', host='localhost', port=6379, db=0)\n\n while sc.started:\n data = q.get() # dequeue and\n # ...do something with data\n\n if SHT_HITS_THE_FAN:\n sc.stop() # instant off switch\n # end of this loop, as well as the streaming process from above\n\n # If needed\n q.clear()\n sc.clear()\n\nExample 3 (OAuth with Twitter Sample Firehose):\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n**NOTE**: this example requires ``requests_oauthlib``\n\n.. code:: python\n\n import os\n import json\n from requests_oauthlib import OAuth1\n from tidehunter import Hunter\n\n url = 'https://stream.twitter.com/1.1/statuses/sample.json'\n auth = OAuth1(\n os.environ['TWITTER_CONSUMER_KEY'],\n os.environ['TWITTER_CONSUMER_SECRET'],\n os.environ['TWITTER_TOKEN_KEY'],\n os.environ['TWITTER_TOKEN_SECRET']\n )\n h = Hunter(url=url, q=q, auth=auth)\n r = h.tide_on(5) # let's just get 5 for now\n\n print(r.status_code)\n print('')\n\n while h.q.qsize():\n print(json.loads(h.q.get()))\n print('')\n\nYou can find other authentications on `this requests\ndoc `__.\nIn short, all you have to do is to pass the desired ``auth`` parameter\nto ``Hunter``, like what you would do with ``requests``.\n\nTest (Unit Tests)\n=================\n\n.. code:: bash\n\n $ pip install -r requirements.txt\n $ pip install -r test_requirements.txt\n $ nosetests --with-coverage --cover-package=tidehunter\n\nLicense\n=======\n\nThe MIT License (MIT). See the full\n`LICENSE `__.\n\n.. |Build Status| image:: https://travis-ci.org/woozyking/tidehunter.png?branch=master\n :target: https://travis-ci.org/woozyking/tidehunter\n\nContributors\n------------\n\n- `Runzhou Li (Leo) `__\n\nChangelog\n---------\n\n1.0.1 (2015-04-17)\n~~~~~~~~~~~~~~~~~~\n\n- **Breaking Change**: ``tidehunter.SimpleStateCounter`` updated to\n reflect ```techies`` `__ 0.2.0\n changes on ``StateCounter``.\n\n1.0.0 (2014-01-22)\n~~~~~~~~~~~~~~~~~~\n\n- Moved codebase of ``Queue``, ``StateCounter`` to\n `techies `__. It's recommended\n to use ``techies`` together with ``tidehunter``, but not always\n required, and therefore not a dependency of ``tidehunter``\n- Added ``tidehunter.SimpleStateCounter`` to be used when no other\n state counter provided. It's a pure in-process implementation and\n therefore cannot be accessed by other processes\n- You can now do ``from tidehunter import Hunter`` instead of\n ``from tidehunter.stream import Hunter``\n- Replaced ``PycURL`` with\n `requests `__. Some of the\n benefits:\n\n - Straight Python 2/3 support\n - Much cleaner implementation\n - Further delegation of `various authentications\n support `__\n to ``requests`` itself\n\n0.1.9 (2013-12-24)\n~~~~~~~~~~~~~~~~~~\n\n- ``PyCurl`` and ``Redis`` Python libraries bumped to the latest\n versions.\n- ``Queue`` now is **almost** Python Queue compatible (in a complaint\n free fashion), with the exception of ``Queue.full`` which always\n returns ``False``; ``Queue.task_done`` and ``Queue.join`` do nothing.\n- NEW: Both ``Queue`` and ``StateCounter`` now have a ``clear`` method\n which performs a Redis ``DEL`` command on the said key and\n reinitialize based on each class's ``initialize`` method.\n\n0.1.8 (2013-10-02)\n~~~~~~~~~~~~~~~~~~\n\n- Added alias methods ``put_nowait()`` and ``get_nowait()`` and other\n place holders to map the Python built-in Queue interfaces.\n- Added ``rstgen`` shell script for Markdown to reStructuredText. To\n use, run ``$ source rstgen`` in the root folder.\n- Credentials involved in unit tests and demo are now using environment\n variables.\n\n0.1.7 (2013-07-22)\n~~~~~~~~~~~~~~~~~~\n\n- Massive update to README.rst\n- Fixed PyPi rendering of long description.\n\n0.1.5 (2013-07-22)\n~~~~~~~~~~~~~~~~~~\n\n- NEW: ``Hunter.tide_on()`` now accepts an optional limit parameter for\n on the fly limit adjustment. The adjustment is not permanent, meaning\n if you want to reuse the same Hunter object, the old limit (or\n default None) is in effect.\n- Fixed a potential issue of Hunter puts in more records than desired\n limit.\n- Added temp Basic Auth test case (no stream, need to find a better\n source).\n\n0.1.3 (2013-07-13)\n~~~~~~~~~~~~~~~~~~\n\n- Use the great httpbin.org (by Kenneth Reitz) for unit test now.\n- Auth (oauth or basic) is no longer required, as long as the target\n stream server supports access without auth.\n\n0.1.2 (2013-07-12)\n~~~~~~~~~~~~~~~~~~\n\n- Include CHANGES (changelog) to be shown on PyPi.\n- Use with statement to open files for setup.py.\n- Added the first\n `demo `__.\n\n0.1.1 (2013-07-12)\n~~~~~~~~~~~~~~~~~~\n\n- Clean up setup.py to ensure requirements are installed/updated.\n\n0.1.0 (2013-07-12)\n~~~~~~~~~~~~~~~~~~\n\n- Initial release", "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/woozyking/tidehunter", "keywords": null, "license": "Copyright (c) 2014 Runzhou Li\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.", "maintainer": null, "maintainer_email": null, "name": "tidehunter", "package_url": "https://pypi.org/project/tidehunter/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/tidehunter/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/woozyking/tidehunter" }, "release_url": "https://pypi.org/project/tidehunter/1.0.1/", "requires_dist": null, "requires_python": null, "summary": "HTTP streaming with accurate flow control", "version": "1.0.1" }, "last_serial": 1508941, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "a81e6c51f225b9458757aeb81e2921d9", "sha256": "6257a978d31be681e850e972ddc988ce9e728a193ad3e3db50dc327486de76ce" }, "downloads": -1, "filename": "tidehunter-0.1.0.tar.gz", "has_sig": false, "md5_digest": "a81e6c51f225b9458757aeb81e2921d9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4538, "upload_time": "2013-07-12T21:53:22", "url": "https://files.pythonhosted.org/packages/c6/78/b3a4aadfcfe1912918d7c1d67cb9bb38f2d8536d5fb24ba22db052eaa2fa/tidehunter-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "54e7498742474f1b5802850469aa9951", "sha256": "86840fe4da2f63df48a0bb53b4216281f0e7cd69408021a2f7508b3739ff4313" }, "downloads": -1, "filename": "tidehunter-0.1.1.tar.gz", "has_sig": false, "md5_digest": "54e7498742474f1b5802850469aa9951", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4801, "upload_time": "2013-07-13T02:35:48", "url": "https://files.pythonhosted.org/packages/b2/6e/bce864efb2c2bdddd54d0ca695bc48b6658671391b250959d4a39a2c5728/tidehunter-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "ee8ce6f68d0cd7d4edcb89b64c589930", "sha256": "f7750aef9176aedab227d4ff66f36ac963e74ad8b4caee607a29cfc7780c07c9" }, "downloads": -1, "filename": "tidehunter-0.1.2.tar.gz", "has_sig": false, "md5_digest": "ee8ce6f68d0cd7d4edcb89b64c589930", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5117, "upload_time": "2013-07-13T03:28:41", "url": "https://files.pythonhosted.org/packages/83/8b/d2f33bfbb7e141f823d3ba2547520b18d70e6c11df19770f645769da391c/tidehunter-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "aa55406643b398a0fe3f979544cecc4a", "sha256": "3e44d606a78ab67966b9473b1f813c156158fde133042ff4b7cee0601f079baf" }, "downloads": -1, "filename": "tidehunter-0.1.3.tar.gz", "has_sig": false, "md5_digest": "aa55406643b398a0fe3f979544cecc4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5326, "upload_time": "2013-07-13T06:31:43", "url": "https://files.pythonhosted.org/packages/c7/bd/4e13355bbe49a7ee91a3638c925f9ad8ae9339316ff451c4d1adf6b08439/tidehunter-0.1.3.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "698efbbe844eec7319c07c8580bc1fa4", "sha256": "c291e450f3771b37b268951008a9d108abcebac7ead39bac355c5a8893f00c25" }, "downloads": -1, "filename": "tidehunter-0.1.5.tar.gz", "has_sig": false, "md5_digest": "698efbbe844eec7319c07c8580bc1fa4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5910, "upload_time": "2013-07-22T21:34:52", "url": "https://files.pythonhosted.org/packages/c4/c6/06247c424a805adf5674cd2cee0d988f7418820cd355a39509f67fd826da/tidehunter-0.1.5.tar.gz" } ], "0.1.5a": [ { "comment_text": "", "digests": { "md5": "6369dab45db0a58083d9dd1d33e54b58", "sha256": "d67defdd2253719a6fd39db243ce12a784acc3a00ca0b1cf59e8d15cee94f985" }, "downloads": -1, "filename": "tidehunter-0.1.5a.tar.gz", "has_sig": false, "md5_digest": "6369dab45db0a58083d9dd1d33e54b58", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5847, "upload_time": "2013-07-22T21:49:47", "url": "https://files.pythonhosted.org/packages/73/b2/456e7c327c473982c1dc2752234847686e86b59e8cd396263b019869e8b6/tidehunter-0.1.5a.tar.gz" } ], "0.1.5b": [ { "comment_text": "", "digests": { "md5": "d9325aeb573b891e0413f62490037405", "sha256": "f0339776c929dc057cf222dcfa16cdd01a77fcd3e5f6fcff26baa1f53e00437d" }, "downloads": -1, "filename": "tidehunter-0.1.5b.tar.gz", "has_sig": false, "md5_digest": "d9325aeb573b891e0413f62490037405", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5853, "upload_time": "2013-07-22T21:53:58", "url": "https://files.pythonhosted.org/packages/30/61/5d243edbd12311b7706592cdef6b01ef965d5ae34bb53cb77cefd93c1706/tidehunter-0.1.5b.tar.gz" } ], "0.1.5c": [ { "comment_text": "", "digests": { "md5": "1ee8e7cd87a0b122573cdcd1f27e6340", "sha256": "f918864ce23c86e52185d04896669d61e4d5a28ba4a91525e94e0cfdad2ceb7b" }, "downloads": -1, "filename": "tidehunter-0.1.5c.tar.gz", "has_sig": false, "md5_digest": "1ee8e7cd87a0b122573cdcd1f27e6340", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5759, "upload_time": "2013-07-22T21:59:36", "url": "https://files.pythonhosted.org/packages/68/3f/53a455c6c48c3692b3b97c291dcb1f59cb6399bb41383548c88f3dda373d/tidehunter-0.1.5c.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "f0813b4430a4586f8b1797984d6f3cf7", "sha256": "979a3037498a063484febe1a15fea294ac61cad19f28536e418c6ccc16159335" }, "downloads": -1, "filename": "tidehunter-0.1.6.tar.gz", "has_sig": false, "md5_digest": "f0813b4430a4586f8b1797984d6f3cf7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5839, "upload_time": "2013-07-22T22:09:33", "url": "https://files.pythonhosted.org/packages/d4/1b/81a9b3a7c6fd75d5230a7ca89ef1659146867aaa61463358f34fa7591534/tidehunter-0.1.6.tar.gz" } ], "0.1.6a": [ { "comment_text": "", "digests": { "md5": "ccd5f4db2ca8b11f66ef04428c10c964", "sha256": "7ad88749fd990d4a622f6aaa77fdb9e543272e536a376fbcf1c09fd821def842" }, "downloads": -1, "filename": "tidehunter-0.1.6a.tar.gz", "has_sig": false, "md5_digest": "ccd5f4db2ca8b11f66ef04428c10c964", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7051, "upload_time": "2013-07-23T02:56:50", "url": "https://files.pythonhosted.org/packages/6f/dd/b293d3f46434d07a206eb5f936232f121d1efbcd9d869eb73eb58181161e/tidehunter-0.1.6a.tar.gz" } ], "0.1.6b": [ { "comment_text": "", "digests": { "md5": "fad1a367f0a681b4d6aad7e8cc0be2c0", "sha256": "6e8aaddc7f37a6df25df747da6ef513f49cfedea866ce17b54e36c42a7f33c9d" }, "downloads": -1, "filename": "tidehunter-0.1.6b.tar.gz", "has_sig": false, "md5_digest": "fad1a367f0a681b4d6aad7e8cc0be2c0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7125, "upload_time": "2013-07-23T04:07:49", "url": "https://files.pythonhosted.org/packages/61/45/77d0d38599422237a3e397ccc239e6dda350d1fa69effea2fd79d413dd4e/tidehunter-0.1.6b.tar.gz" } ], "0.1.6c": [ { "comment_text": "", "digests": { "md5": "31e6306f64c5daa8a21a9059653ba15e", "sha256": "51155a89af6245dd535f24cbc049da8a9c78386b76a3da06cf657b171f7b80b4" }, "downloads": -1, "filename": "tidehunter-0.1.6c.tar.gz", "has_sig": false, "md5_digest": "31e6306f64c5daa8a21a9059653ba15e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7124, "upload_time": "2013-07-23T04:11:07", "url": "https://files.pythonhosted.org/packages/f6/5d/21db27e24061fbb361898396f906b0d175f4f2331e1db42ba482eac6c463/tidehunter-0.1.6c.tar.gz" } ], "0.1.6d": [ { "comment_text": "", "digests": { "md5": "b66191e0f8932c1aa20f0dcb138f16df", "sha256": "a6fe996b685db17ec2bb6f97e0048838c1735df21bf448e111c5baefdf0ff62b" }, "downloads": -1, "filename": "tidehunter-0.1.6d.tar.gz", "has_sig": false, "md5_digest": "b66191e0f8932c1aa20f0dcb138f16df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7050, "upload_time": "2013-07-23T04:13:38", "url": "https://files.pythonhosted.org/packages/c3/f3/d9462be6de2eeac6e5bffcebf1f42499c7c44838c25a52414e3da40d0897/tidehunter-0.1.6d.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "aac8ca65f10beb85f938ad2e41d7534a", "sha256": "93bc422efa3449bd982400e43d050698a64fbee843215986911f966036ea5e51" }, "downloads": -1, "filename": "tidehunter-0.1.7.tar.gz", "has_sig": false, "md5_digest": "aac8ca65f10beb85f938ad2e41d7534a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7047, "upload_time": "2013-07-23T04:24:24", "url": "https://files.pythonhosted.org/packages/b5/c3/71897204510b984cc11c2e10f6fb28602134e4ddb4ef3cedcfa58606cee9/tidehunter-0.1.7.tar.gz" } ], "0.1.7a": [ { "comment_text": "", "digests": { "md5": "9f6bf8c09ea04622909e1b80261fc375", "sha256": "8b1cf816bed8dbdbd09e1c36487052189c86b8194ceece4c83d84802e2b10710" }, "downloads": -1, "filename": "tidehunter-0.1.7a.tar.gz", "has_sig": false, "md5_digest": "9f6bf8c09ea04622909e1b80261fc375", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7108, "upload_time": "2013-09-07T02:33:54", "url": "https://files.pythonhosted.org/packages/c2/22/afc0a96370c9e8d4da3ccf85d22d0ec6fb099a22f10420b7eccba56702eb/tidehunter-0.1.7a.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "ad1cf10c7e0d2039f55bf66079a76f68", "sha256": "c88e8e3ddfe085a8bdfb41421339b863d0fdd1ceed7c88fb64db57e6c9f770cf" }, "downloads": -1, "filename": "tidehunter-0.1.8.tar.gz", "has_sig": false, "md5_digest": "ad1cf10c7e0d2039f55bf66079a76f68", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7527, "upload_time": "2013-10-02T14:44:07", "url": "https://files.pythonhosted.org/packages/3d/07/ae0ceed16819f535aa7930b862b3223f14d4e86da55541a971478456416e/tidehunter-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "97f41489ea1966fba1ab7dfa2ddbadfb", "sha256": "4c69d9a2ffb6220a0f5dd1d16b0e567e5fc64f40a0bb3125875986fcfc8044ac" }, "downloads": -1, "filename": "tidehunter-0.1.9.tar.gz", "has_sig": false, "md5_digest": "97f41489ea1966fba1ab7dfa2ddbadfb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7901, "upload_time": "2013-12-25T02:42:40", "url": "https://files.pythonhosted.org/packages/fd/5d/3219fdc9b0cf68a7800fc42b1d870c5f88ceb6f74deef6d74057c11b55fc/tidehunter-0.1.9.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "f0024d1203cee036807009ecdbc4d55a", "sha256": "c55777e5b6c04aad59834d5bb77a827b0efeff37a80c74909bb6e5b2cae5c64d" }, "downloads": -1, "filename": "tidehunter-1.0.0.tar.gz", "has_sig": false, "md5_digest": "f0024d1203cee036807009ecdbc4d55a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7054, "upload_time": "2014-01-23T04:42:58", "url": "https://files.pythonhosted.org/packages/13/b3/4c4cdfc5789199c14c3bc35019ff9d97362de74bd4ccda2bf95c8111aebb/tidehunter-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "6b785c170a947e4c43d08cf6ccacf7cc", "sha256": "5c04bc1e18fa8c0357fcca1ef8ad8f3f54a6a32359bf78a4973ed59871afebe0" }, "downloads": -1, "filename": "tidehunter-1.0.1.tar.gz", "has_sig": false, "md5_digest": "6b785c170a947e4c43d08cf6ccacf7cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7165, "upload_time": "2015-04-17T07:30:22", "url": "https://files.pythonhosted.org/packages/7b/d0/752d1a73d60d3ffe74392603eeb8113a9af9f804b7ed16338e8d10eb4db2/tidehunter-1.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6b785c170a947e4c43d08cf6ccacf7cc", "sha256": "5c04bc1e18fa8c0357fcca1ef8ad8f3f54a6a32359bf78a4973ed59871afebe0" }, "downloads": -1, "filename": "tidehunter-1.0.1.tar.gz", "has_sig": false, "md5_digest": "6b785c170a947e4c43d08cf6ccacf7cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7165, "upload_time": "2015-04-17T07:30:22", "url": "https://files.pythonhosted.org/packages/7b/d0/752d1a73d60d3ffe74392603eeb8113a9af9f804b7ed16338e8d10eb4db2/tidehunter-1.0.1.tar.gz" } ] }