{ "info": { "author": "Jeff Hui", "author_email": "jeff@jeffhui.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Topic :: Software Development :: Testing" ], "description": "Overview\n========\n\n``sniffer`` is a autotest tool for Python_ using the nosetest_ library.\n\n**NEW**: sniffer can now be customize to run anything, see 'Advanced Usage'.\n\nSniffer will automatically re-run tests if your code changes. And with another third-party\nlibrary (see below), the CPU usage of file system monitoring is reduced in comparison\nto pure-python solutions. However, sniffer will still work without any of those libraries.\n\n.. _Python: http://python.org/\n.. _nosetest: http://code.google.com/p/python-nose/\n\nLooking for maintainers\n-----------------------\n\nI (@jeffh) am looking for a new maintainer to carry on this project to new heights. I'm currently leaving this project on maintance mode (respond to issues, merge pull requests), but I'm not dedicating most of my free time towards this project.\n\nContact me on twitter (@jeffhui) or via email if you're interested in taking over the helm of this project.\n\nUsage\n-----\n\nTo install::\n\n pip install sniffer\n\nSimply run ``sniffer`` in your project directory.\n\nYou can use ``sniffer --help`` for options And like autonose_, you can pass the nose\narguments with *-x* prefix: ``-x--with-doctest`` or ``-x--config``.\n\nThe problem with autonose_, is that the autodetect can be slow to detect changes. This is due\nto the pure python implementation - manually walking through the file system to see what's\nchanged [#]_. Although the default install of sniffer shares the same problem, installing a\nthird-party library can help fix the problem. The library is dependent on your operating system:\n\n- If you use **Linux**, you'll need to install pyinotify_.\n- If you use **Windows**, you'll need to install pywin32_.\n- If you use **Mac OS X** 10.5+ (Leopard), you'll need to install MacFSEvents_.\n\nIf you want support for other notification systems, you can install:\n\n- gntp_ for Growl_ support (Mac OS X).\n- osxnotify_ and libosxnotify_ for native OS X notifications (Max OS X 10.9.4 and newer)\n- py-notify_ for LibNotify_ support (Linux).\n\n.. [#] This has been resolved in subsequent autonose versions, using watchdog.\n.. _nose: http://code.google.com/p/python-nose/\n.. _easy_install: http://pypi.python.org/pypi/setuptools\n.. _pip: http://pypi.python.org/pypi/pip\n.. _autonose: http://github.com/gfxmonk/autonose\n.. _pyinotify: http://trac.dbzteam.org/pyinotify\n.. _pywin32: http://sourceforge.net/projects/pywin32/\n.. _MacFSEvents: http://pypi.python.org/pypi/MacFSEvents/0.2.1\n.. _gntp: https://github.com/kfdm/gntp/\n.. _Growl: http://growl.info\n.. _py-notify: http://home.gna.org/py-notify\n.. _LibNotify: http://developer-next.gnome.org/libnotify/\n.. _osxnotify: https://github.com/tomekwojcik/osxnotify-python\n.. _libosxnotify: https://github.com/tomekwojcik/libosxnotify\n\nAdvanced Usage\n--------------\n\nDon't want to run nose? You can do whatever you really want. Create a scent.py file in\nyour current working directory. Here's an example of what you can do so far:\n\n.. code-block:: python\n\n from sniffer.api import * # import the really small API\n import os, termstyle\n\n # you can customize the pass/fail colors like this\n pass_fg_color = termstyle.green\n pass_bg_color = termstyle.bg_default\n fail_fg_color = termstyle.red\n fail_bg_color = termstyle.bg_default\n\n # All lists in this variable will be under surveillance for changes.\n watch_paths = ['.', 'tests/']\n\n # this gets invoked on every file that gets changed in the directory. Return\n # True to invoke any runnable functions, False otherwise.\n #\n # This fires runnables only if files ending with .py extension and not prefixed\n # with a period.\n @file_validator\n def py_files(filename):\n return filename.endswith('.py') and not os.path.basename(filename).startswith('.')\n\n # This gets invoked for verification. This is ideal for running tests of some sort.\n # For anything you want to get constantly reloaded, do an import in the function.\n #\n # sys.argv[0] and any arguments passed via -x prefix will be sent to this function as\n # it's arguments. The function should return logically True if the validation passed\n # and logicially False if it fails.\n #\n # This example simply runs nose.\n @runnable\n def execute_nose(*args):\n import nose\n return nose.run(argv=list(args))\n\nAnd that's the basic case. Nothing too fancy shmanshe. You can have multiple file_validator and\nrunnable decorators if you want.\n\nThere is also support for selecting a runnable function by file validator.\nUseful if you want to run nose for Python files, mocha for JavaScript files,\nand csslint for CSS. Or any other combination you can come up with. For\nexample:\n\n.. code-block:: python\n\n # Here we instruct the 'python_tests' runnable to be kicked off\n # when a .py file is changed\n @select_runnable('python_tests')\n @file_validator\n def py_files(filename):\n return filename.endswith('.py') and not os.path.basename(filename).startswith('.')\n\n\n # Here we instruct the 'javascript_tests' runnable to be kicked off\n # when a .js file is changed\n @select_runnable('javascript_tests')\n @file_validator\n def js_files(filename):\n return filename.endswith('.js') and not os.path.basename(filename).startswith('.')\n\n\n @runnable\n def python_tests(*args):\n import nose\n return nose.run(argv=list(args))\n\n\n @runnable\n def javascript_tests(*args):\n command = \"mocha tests/js-tests.js\"\n return call(command, shell=True) == 0\n\nThis will run the nose for modifications to Python files and mocha when\nJavaScript files are changed.\n\n\nOther Uses\n==========\n\nRunning with Other Test Frameworks\n----------------------------------\n\nIf you want to run another unit testing framework, you can do so by overriding ``sniffer.Sniffer``,\nwhich is the class that handles running tests, or whatever you want. Specifically, you'll want to\noverride the ``run``, method to configure what you need to be done.\n\nThe property, ``test_args``, are arguments gathered through ``--config=blah`` and ``-x.*``\nconfiguration options. You should perform you imports inside the function instead of outside,\nto let the class reload the test framework (and reduce possibilities of multiple-run bugs).\n\nAfter subclassing, set sniffer_instance parameter to your custom class when calling run\nor main.\n\nCurrent Issues\n==============\n\nFor linux, there is an exception that is sometimes thrown when terminating.\n\nCurrently the program only looks for changes in the current working directory. This isn't the\nbest solution: it doesn't understand how changes to your source code affects it.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/jeffh/sniffer/", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "sniffer", "package_url": "https://pypi.org/project/sniffer/", "platform": "", "project_url": "https://pypi.org/project/sniffer/", "project_urls": { "Homepage": "http://github.com/jeffh/sniffer/" }, "release_url": "https://pypi.org/project/sniffer/0.4.1/", "requires_dist": [ "colorama", "python-termstyle", "nose", "gntp (==0.7) ; extra == 'growl'", "py-notify (==0.3.1) ; extra == 'libnotify'", "pyinotify (==0.9.0) ; extra == 'linux'", "MacFSEvents (==0.2.8) ; extra == 'osx'" ], "requires_python": "", "summary": "An automatic test runner. Supports nose out of the box.", "version": "0.4.1" }, "last_serial": 5438720, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "fd331fcc93dc07621fe874478e727e3b", "sha256": "ae14e91b610ae0192f8fb0eb5159efb5540d58c2bfa775d0095a376e282bd5b2" }, "downloads": -1, "filename": "sniffer-0.1.0.tar.gz", "has_sig": false, "md5_digest": "fd331fcc93dc07621fe874478e727e3b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13240, "upload_time": "2010-07-14T03:55:54", "url": "https://files.pythonhosted.org/packages/99/cf/2e458251d3d5b8832b4c4da42d94de111f41a159458fce425d195ad946b0/sniffer-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "6f7db024b232bfae65c20b9604e89a78", "sha256": "63b74ba885627c37a409568c2c8ba12b96935b8c386ac4ebfd36b5c1a7eb0e49" }, "downloads": -1, "filename": "sniffer-0.1.1.tar.gz", "has_sig": false, "md5_digest": "6f7db024b232bfae65c20b9604e89a78", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13352, "upload_time": "2010-07-14T04:12:46", "url": "https://files.pythonhosted.org/packages/0d/62/077cbba72dc3b263a37d26b9efdcf379594340b44a5be3b3921028e61fde/sniffer-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "311c62d94543d1468a4c8a80e3a2a004", "sha256": "f74705a7c8066b0e3aeb1b0b44ba5fe9d20ea1145b2e32b202f5a33e6c7cdd65" }, "downloads": -1, "filename": "sniffer-0.1.2.tar.gz", "has_sig": false, "md5_digest": "311c62d94543d1468a4c8a80e3a2a004", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13566, "upload_time": "2010-07-15T06:08:32", "url": "https://files.pythonhosted.org/packages/e9/46/e1645f87422a7c52799cd353c30afac7fd60b4ac1b00cb8c3b19de2b461b/sniffer-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "8931a66596a4addc50905fef945f90f6", "sha256": "8db0a0c4e131de3ec7895471f6a285040efd1f119f0ba012e140a8c73e8c18e4" }, "downloads": -1, "filename": "sniffer-0.1.3.tar.gz", "has_sig": false, "md5_digest": "8931a66596a4addc50905fef945f90f6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13562, "upload_time": "2010-07-16T04:59:30", "url": "https://files.pythonhosted.org/packages/1f/da/f1693adacaff029cb1fc087abd92f0336569ece19ae379e3ac2c1c43367f/sniffer-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "2ce71e03f2f550991da1e1d5fd1dd5c7", "sha256": "30557249161660fde943d90bcf3917fcc6c59e2195e99c9fa805cd6df83583fb" }, "downloads": -1, "filename": "sniffer-0.1.4.tar.gz", "has_sig": false, "md5_digest": "2ce71e03f2f550991da1e1d5fd1dd5c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13706, "upload_time": "2010-07-21T07:11:55", "url": "https://files.pythonhosted.org/packages/b7/3f/a4840d88a6fb44ce08014029db6fff7d39e68b81543c6e4a6dbea8bbcf08/sniffer-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "f13f79bc1a2abcf8fc42b440c190aad9", "sha256": "c668ea78cf3854e9b77fc20f04abcaf619e36c758fd9bec12b837b35269a3d3f" }, "downloads": -1, "filename": "sniffer-0.1.5.tar.gz", "has_sig": false, "md5_digest": "f13f79bc1a2abcf8fc42b440c190aad9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13906, "upload_time": "2010-09-14T20:27:33", "url": "https://files.pythonhosted.org/packages/a9/73/598c9e70da9be44e44c952d5e8e16f2fb5b9946eeeffc0b2792539a8fd7d/sniffer-0.1.5.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "769008dbaff05d42f960267c270c376c", "sha256": "7afdf3ff30787572aa16945eeb011e81cbaaa0cdab197c65254459132e761f05" }, "downloads": -1, "filename": "sniffer-0.2.1.tar.gz", "has_sig": false, "md5_digest": "769008dbaff05d42f960267c270c376c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16958, "upload_time": "2010-12-20T20:09:18", "url": "https://files.pythonhosted.org/packages/9c/db/ee8ec8880f6845ed185e5a1674334d02d3066e2e4744379fccee71f4957e/sniffer-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "55da73de23b6104f0494d0f308133402", "sha256": "50e381e9a023f62ebeb815806440cc6299d9f9e36c8a7b7ab196a567b05adce2" }, "downloads": -1, "filename": "sniffer-0.2.2.tar.gz", "has_sig": false, "md5_digest": "55da73de23b6104f0494d0f308133402", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17027, "upload_time": "2010-12-20T21:03:08", "url": "https://files.pythonhosted.org/packages/e8/12/c08dbca327dea45b74e170976321448416510cb14f6deb7c3fcd30c0db37/sniffer-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "24db46ebcd3137eb8d82af116d0a0b09", "sha256": "b2462b2976e30667e459e9311048b44b7e3924250edbda4dd3b83c36b825b921" }, "downloads": -1, "filename": "sniffer-0.2.3.tar.gz", "has_sig": false, "md5_digest": "24db46ebcd3137eb8d82af116d0a0b09", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17150, "upload_time": "2011-05-05T20:52:09", "url": "https://files.pythonhosted.org/packages/e7/52/c25caa22312829e62aced0bffb166c4e8e58874ca26337f94f6990216cfa/sniffer-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "6ea87579bf30bf4819733221fc1d2240", "sha256": "0681b4db2838b972f2ea66d9baf82a42e95cfe7c4994d320c03a5ea1e197f6d0" }, "downloads": -1, "filename": "sniffer-0.2.4.tar.gz", "has_sig": false, "md5_digest": "6ea87579bf30bf4819733221fc1d2240", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16329, "upload_time": "2012-07-10T06:33:35", "url": "https://files.pythonhosted.org/packages/7c/1d/259c1bd9053e5f074e1d051eb580d806284d5ab6fa59225ba848e31673d3/sniffer-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "6144ac6f9bb8524ff2a0478d29f11ce6", "sha256": "1c59c92a61404b4d25e01061da7a64de6cd761e47e43ce937a05d77cb142cf75" }, "downloads": -1, "filename": "sniffer-0.2.5.tar.gz", "has_sig": false, "md5_digest": "6144ac6f9bb8524ff2a0478d29f11ce6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17570, "upload_time": "2012-07-30T08:41:02", "url": "https://files.pythonhosted.org/packages/b5/3c/6bf891a367017ea554e62d9a39287d93602d2a34c54eee10da9801d8264a/sniffer-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "30072d84429063c1d9349b3df25b8773", "sha256": "e7b98883307bc01ce9c182e60dd502d282ec7508882f4cd8ac7a1f3948d0215c" }, "downloads": -1, "filename": "sniffer-0.2.6.tar.gz", "has_sig": false, "md5_digest": "30072d84429063c1d9349b3df25b8773", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17673, "upload_time": "2012-08-01T06:57:10", "url": "https://files.pythonhosted.org/packages/61/e4/e15c0cc53e83be28135e1479028b32f0817d3dc34176423270e4fe44a6c4/sniffer-0.2.6.tar.gz" } ], "0.2.8": [ { "comment_text": "", "digests": { "md5": "b452bf37ff92b1b73159f93000c4a2f8", "sha256": "7049e9063bde5805bd6b44c855e1ba984b48365a12378c2aa67492aa81471bca" }, "downloads": -1, "filename": "sniffer-0.2.8.tar.gz", "has_sig": false, "md5_digest": "b452bf37ff92b1b73159f93000c4a2f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17749, "upload_time": "2013-05-01T02:03:44", "url": "https://files.pythonhosted.org/packages/f5/d6/33bdacbc8dfa4f1eefdc2cd30eb0d1f303f35f7cf61ca73799ed6db66c06/sniffer-0.2.8.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "1d526175b896541f57601729240cd8d3", "sha256": "1ac86a6392bbc783ec6b3829e610562e673a4bb095112cc15a9960b891eaabcd" }, "downloads": -1, "filename": "sniffer-0.3.0.tar.gz", "has_sig": false, "md5_digest": "1d526175b896541f57601729240cd8d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17745, "upload_time": "2013-07-06T02:15:18", "url": "https://files.pythonhosted.org/packages/bf/ef/9d76afdd0c518414500fcfd5466dd4e3ba20ab15f431e35bce3c3241ded2/sniffer-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "8188b586c4dffb7df60e1b5c0b837ea7", "sha256": "e97c261ed6da606572247e2103643277d70da1bc0761cbe740b4659e1c821297" }, "downloads": -1, "filename": "sniffer-0.3.1.tar.gz", "has_sig": false, "md5_digest": "8188b586c4dffb7df60e1b5c0b837ea7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17781, "upload_time": "2013-07-11T06:38:33", "url": "https://files.pythonhosted.org/packages/35/71/930e9be5d14ef2c67c11cfdd6128c636c3cd2a0340df0476693335f29451/sniffer-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "a3544abe9ac4526360421534ee6ffed2", "sha256": "8667577c252d3b79813b6432be9777100541ede1166ebb584b300a971f45a05f" }, "downloads": -1, "filename": "sniffer-0.3.2.tar.gz", "has_sig": false, "md5_digest": "a3544abe9ac4526360421534ee6ffed2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17948, "upload_time": "2013-08-03T06:54:02", "url": "https://files.pythonhosted.org/packages/4a/fe/f8bd1d85ebc6d7748c138e429a84d1c36f3f639d18c4d804b5962ca356ca/sniffer-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "583105f7939741f0ccda300fe28c67a6", "sha256": "d0cb572e6596292ead670a0699ceef4ae977ecccda005d3442c4544fdb10a2a1" }, "downloads": -1, "filename": "sniffer-0.3.3.tar.gz", "has_sig": false, "md5_digest": "583105f7939741f0ccda300fe28c67a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18251, "upload_time": "2014-09-29T06:50:35", "url": "https://files.pythonhosted.org/packages/47/3d/bf850dbc61a1517e8594ed0a3aba2c318c562d05a50d017cc1cb43aeb4b1/sniffer-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "9b873b99dacf6c519d8161b0d0e01465", "sha256": "481db17d70e545876640f09cdfe48a932b2582a28df465e10df2dadce3051b15" }, "downloads": -1, "filename": "sniffer-0.3.4.tar.gz", "has_sig": false, "md5_digest": "9b873b99dacf6c519d8161b0d0e01465", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19888, "upload_time": "2015-01-12T18:30:00", "url": "https://files.pythonhosted.org/packages/71/bf/c74cc9fb5ebf7b40633bb60aa4fc18f2c3a3a5d978b485c011938f530767/sniffer-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "d17c4ad6478ef3fca93da10288e40099", "sha256": "8c5815e587d2991de3fa891de917d36f9a99a83913e33e4b610c14109fc0cbcb" }, "downloads": -1, "filename": "sniffer-0.3.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d17c4ad6478ef3fca93da10288e40099", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 24870, "upload_time": "2016-09-27T04:26:16", "url": "https://files.pythonhosted.org/packages/98/9c/8f606d496d4c40e858789aae0c867b7ff17ecd1b1cf06e7dbde145534ecb/sniffer-0.3.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e590122a7e3cb38105b00bf2d897e1c2", "sha256": "ba86c40072b9434127c6babd95cdb86ba2da1fb2996e56066b9c16bb3339336c" }, "downloads": -1, "filename": "sniffer-0.3.5.tar.gz", "has_sig": false, "md5_digest": "e590122a7e3cb38105b00bf2d897e1c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19961, "upload_time": "2015-03-17T02:45:24", "url": "https://files.pythonhosted.org/packages/45/9b/2346676e0cdc727bffd96296e9215f00eb66a2e40ce0f0fd739a36595be1/sniffer-0.3.5.tar.gz" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "62e4ddd6b7bc7d2cfcff22f6962723de", "sha256": "cec75e9b271fb94bb19db7d97b1a1aa9e5416bcd7be2d627efee1fa3d8a52864" }, "downloads": -1, "filename": "sniffer-0.3.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "62e4ddd6b7bc7d2cfcff22f6962723de", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 24887, "upload_time": "2016-10-21T05:09:16", "url": "https://files.pythonhosted.org/packages/9e/7e/fa8c38364b2af797ac73e0c3320d967fd527d75abd04edf362d44bb84e85/sniffer-0.3.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8c019066bb9381c47df6f5eece3564fe", "sha256": "6dcd4c25ceeb93845df33e865d5d44e4f39ab31ff447ee5eceb641ec26d8ceb3" }, "downloads": -1, "filename": "sniffer-0.3.6.tar.gz", "has_sig": false, "md5_digest": "8c019066bb9381c47df6f5eece3564fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20415, "upload_time": "2016-10-21T05:09:13", "url": "https://files.pythonhosted.org/packages/92/fe/b7bc96009dd05e21d1b35acbd691198562ca3f9f2260df956701d14e98a2/sniffer-0.3.6.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "d609ce894fc191d755b1964e715f37e8", "sha256": "e8a0daa4c51dff3d00482b45dc9b978159100a8d5a7df327c28ed96586559970" }, "downloads": -1, "filename": "sniffer-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d609ce894fc191d755b1964e715f37e8", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 25115, "upload_time": "2016-11-22T07:55:39", "url": "https://files.pythonhosted.org/packages/5a/d3/564f8c6af6b93e02d4cdfee006279434537423c60763156fab6224d4ca6b/sniffer-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ae09910bbf500ee3c2b9a04ac070e889", "sha256": "e90c1ad4bd3c31a5fad8e03d45dfc83377b31420aa0779f17280c817ce0c9dd8" }, "downloads": -1, "filename": "sniffer-0.4.0.tar.gz", "has_sig": false, "md5_digest": "ae09910bbf500ee3c2b9a04ac070e889", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20649, "upload_time": "2016-11-22T07:55:36", "url": "https://files.pythonhosted.org/packages/fb/ed/1b1c4e9974c0d4d8a7541a1ab5b62537ba0c1c5a550d51eb97c0cb4e793d/sniffer-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "05144c6d71a7279a7076285b20d4417b", "sha256": "f120843fe152d0e380402fc11313b151e2044c47fdd36895de2efedc8624dbb8" }, "downloads": -1, "filename": "sniffer-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "05144c6d71a7279a7076285b20d4417b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22207, "upload_time": "2019-06-24T02:43:38", "url": "https://files.pythonhosted.org/packages/4b/f9/83c2bae51754933ef96a66168262d01c8513d5e4a5029eab44bb01c44e5f/sniffer-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1edf8d976b8ee5081a5f0c15d7142b77", "sha256": "b37665053fb83d7790bf9e51d616c11970863d14b5ea5a51155a4e95759d1529" }, "downloads": -1, "filename": "sniffer-0.4.1.tar.gz", "has_sig": false, "md5_digest": "1edf8d976b8ee5081a5f0c15d7142b77", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20721, "upload_time": "2019-06-24T02:43:40", "url": "https://files.pythonhosted.org/packages/9d/12/f75e449ce32d4426dfec61ec05b3546d5373aa10cb2a863c40548eeadade/sniffer-0.4.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "05144c6d71a7279a7076285b20d4417b", "sha256": "f120843fe152d0e380402fc11313b151e2044c47fdd36895de2efedc8624dbb8" }, "downloads": -1, "filename": "sniffer-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "05144c6d71a7279a7076285b20d4417b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22207, "upload_time": "2019-06-24T02:43:38", "url": "https://files.pythonhosted.org/packages/4b/f9/83c2bae51754933ef96a66168262d01c8513d5e4a5029eab44bb01c44e5f/sniffer-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1edf8d976b8ee5081a5f0c15d7142b77", "sha256": "b37665053fb83d7790bf9e51d616c11970863d14b5ea5a51155a4e95759d1529" }, "downloads": -1, "filename": "sniffer-0.4.1.tar.gz", "has_sig": false, "md5_digest": "1edf8d976b8ee5081a5f0c15d7142b77", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20721, "upload_time": "2019-06-24T02:43:40", "url": "https://files.pythonhosted.org/packages/9d/12/f75e449ce32d4426dfec61ec05b3546d5373aa10cb2a863c40548eeadade/sniffer-0.4.1.tar.gz" } ] }