{ "info": { "author": "", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Other Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Software Development :: Testing" ], "description": "===============================\nkgb - Function spies for Python\n===============================\n\nEver deal with a large test suite before, monkey patching functions to figure\nout whether it was called as expected? It's a dirty job. If you're not careful,\nyou can make a mess of things. Leave behind evidence.\n\nkgb's spies will take care of that little problem for you.\n\n\nWhat are spies?\n===============\n\nSpies intercept and record calls to functions. They can report on how many times\na function was called and with what arguments. They can allow the function call\nto go through as normal, to block it, or to reroute it to another function.\n\nSpies are awesome.\n\n(If you've used Jasmine_, you know this.)\n\n\n.. _Jasmine: https://jasmine.github.io/\n\n\nWhere is kgb used?\n==================\n\nWe use kgb at Beanbag_ for our `Review Board`_ and RBCommons_ products.\n\nIf you use kgb, let us know and we'll add you to a shiny new list on this\npage.\n\n\n.. _Beanbag: https://www.beanbaginc.com/\n.. _Review Board: https://www.reviewboard.org/\n.. _RBCommons: https://rbcommons.com/\n\n\nInstalling kgb\n==============\n\nBefore you can use kgb, you need to install it. You can do this by typing::\n\n $ pip install kgb\n\nor::\n\n $ easy_install kgb\n\nkgb supports Python 2.5 through 2.7 and 3.4 through 3.6.\n\n\nSpying for fun and profit\n=========================\n\nSpying is really easy. There are three ways to initiate a spy.\n\n\n1. Creating a SpyAgency\n-----------------------\n\nA SpyAgency manages all your spies. You can create as many or as few as you\nwant. Generally, you'll create one per unit test run. Then you'll call\n``spy_on()``, passing in the function you want.\n\n.. code-block:: python\n\n from kgb import SpyAgency\n\n\n class TopSecretTests(unittest.TestCase):\n def test_mind_control_device(self):\n mcd = MindControlDevice()\n agency = SpyAgency()\n agency.spy_on(mcd.assassinate, call_fake=give_hugs)\n\n\n2. Mixing a SpyAgency into your tests\n-------------------------------------\n\nA SpyAgency can be mixed into your test suite, making it super easy to spy\nall over the place, discretely, without resorting to a separate agency.\n(We call this the \"inside job.\")\n\n.. code-block:: python\n\n from kgb import SpyAgency\n\n\n class TopSecretTests(SpyAgency, unittest.TestCase):\n def test_weather_control(self):\n weather = WeatherControlDevice()\n self.spy_on(weather.start_raining)\n\n\n3. Using a context manager\n--------------------------\n\nIf you just want a spy for a quick job, without all that hassle of a full\nagency, just use the ``spy_on`` context manager, like so:\n\n.. code-block:: python\n\n from kgb import spy_on\n\n\n class TopSecretTests(unittest.TestCase):\n def test_the_bomb(self):\n bomb = Bomb()\n\n with spy_on(bomb.explode, call_original=False):\n # This won't explode. Phew.\n bomb.explode()\n\n\nA spy's abilities\n=================\n\nA spy can do many things. The first thing you need to do is figure out how you\nwant to use the spy.\n\n\nCreating a spy that calls the original function\n-----------------------------------------------\n\n.. code-block:: python\n\n agency.spy_on(obj.function)\n\n\nWhen your spy is called, the original function will be called as well.\nIt won't even know you were there.\n\n\nCreating a spy that blocks the function call\n--------------------------------------------\n\n.. code-block:: python\n\n agency.spy_on(obj.function, call_original=False)\n\n\nUseful if you want to know that a function was called, but don't want the\noriginal function to actually get the call.\n\n\nCreating a spy that reroutes to a fake function\n-----------------------------------------------\n\n.. code-block:: python\n\n agency.spy_on(obj.function, call_fake=my_fake_function)\n\n\nFake return values or operations without anybody knowing.\n\n\nStopping a spy operation\n------------------------\n\n.. code-block:: python\n\n obj.function.unspy()\n\n\nDo your job and get out.\n\n\nCheck the call history\n----------------------\n\n.. code-block:: python\n\n for call in obj.function.calls:\n print(calls.args, calls.kwargs)\n\n\nSee how many times your spy's intercepted a function call, and what was passed.\n\n\nCheck a specific call\n---------------------\n\n.. code-block:: python\n\n # Check the latest call...\n print obj.function.last_call.args\n print obj.function.last_call.kwargs\n print obj.function.last_call.return_value\n print obj.function.last_call.exception\n\n # For an older call...\n print obj.function.calls[0].args\n print obj.function.calls[0].kwargs\n print obj.function.calls[0].return_value\n print obj.function.calls[0].exception\n\n\nAlso a good way of knowing whether it's even been called. ``last_call`` will\nbe ``None`` if nobody's called yet.\n\n\nCheck if the function was ever called\n-------------------------------------\n\n.. code-block:: python\n\n self.assertTrue(obj.function.called)\n\n\nIf the function was ever called at all, this will let you know.\n\n\nCheck if the function was ever called with certain arguments\n------------------------------------------------------------\n\n.. code-block:: python\n\n # Check if it was ever called with these arguments...\n self.assertTrue(obj.function.called_with('foo', bar='baz'))\n\n # Check a specific call...\n self.assertTrue(obj.function.calls[0].called_with('foo', bar='baz'))\n\n # Check the last call...\n self.assertTrue(obj.function.last_called_with('foo', bar='baz'))\n\n\nThe whole call history will be searched. You can provide the entirety of the\narguments passed to the function, or you can provide a subset. You can pass\npositional arguments as-is, or pass them by name using keyword arguments.\n\nRecorded calls always follow the function's original signature, so even if a\nkeyword argument was passed a positional value, it will be recorded as a\nkeyword argument.\n\n\nCheck if the function ever returned a certain value\n---------------------------------------------------\n\n.. code-block:: python\n\n # Check if the function ever returned a certain value...\n self.assertTrue(obj.function.returned(42))\n\n # Check a specific call...\n self.assertTrue(obj.function.calls[0].returned(42))\n\n # Check the last call...\n self.assertTrue(obj.function.last_returned(42))\n\n\nHandy for checking if some function ever returned what you expected it to, when\nyou're not calling that function yourself.\n\n\nCheck if a function ever raised a certain type of exception\n-----------------------------------------------------------\n\n.. code-block:: python\n\n # Check if the function ever raised a certain exception...\n self.assertTrue(obj.function.raised(TypeError))\n\n # Check a specific call...\n self.assertTrue(obj.function.calls[0].raised(TypeError))\n\n # Check the last call...\n self.assertTrue(obj.function.last_raised(TypeError))\n\n\nYou can also go a step further by checking the exception's message.\n\n.. code-block:: python\n\n # Check if the function ever raised an exception with a given message...\n self.assertTrue(obj.function.raised_with_message(\n TypeError,\n \"'type' object is not iterable\"))\n\n # Check a specific call...\n self.assertTrue(obj.function.calls[0].raised_with_message(\n TypeError,\n \"'type' object is not iterable\"))\n\n # Check the last call...\n self.assertTrue(obj.function.last_raised_with_message(\n TypeError,\n \"'type' object is not iterable\"))\n\n\nReset all the calls\n-------------------\n\n.. code-block:: python\n\n obj.function.reset_calls()\n\n\nWipe away the call history. Nobody will know.\n\n\nCall the original function\n--------------------------\n\n.. code-block:: python\n\n result = obj.function.call_original('foo', bar='baz')\n\n\nSuper, super useful if you want to use ``call_fake=`` to wrap a function\nand track or influence some part of it, but still want the original function\nto do its thing. For instance:\n\n.. code-block:: python\n\n stored_results = []\n\n def my_fake_function(*args, **kwargs):\n kwargs['bar'] = 'baz'\n result = obj.function.call_original(*args, **kwargs)\n stored_results.append(result)\n\n return result\n\n agency.spy_on(obj.function, call_fake=my_fake_function)\n\n\nFAQ\n===\n\nDoesn't this just do what mock does?\n------------------------------------\n\nkgb's spies and mock_'s patching are very different from each other. When\npatching using mock, you're simply replacing a method on a class with\nsomething that looks like a method, and that works great except you're limited\nto methods on classes. You can't override something a top-level function, like\n``urllib2.urlopen``.\n\nkgb spies leave the function or method where it is. What it *does* do is\nreplace the *bytecode* of the function, intercepting calls on a very low\nlevel, recording everything about it, and then passing on the call to the\noriginal function or your replacement function. It's pretty powerful, and\nallows you to listen to or override calls you normally would have no control\nover.\n\n.. _mock: https://pypi.python.org/pypi/mock\n\n\nWhat?! There's no way that's stable.\n------------------------------------\n\nIt is! It really is! We've been using it for years across a wide variety of\ncodebases. It's pretty amazing.\n\nPython actually allows this. We're not scanning your RAM and doing terrible\nthings with it, or something like that. Every function or method in Python has\na ``func_code`` (Python 2) or ``__code__`` (Python 3) attribute, which is\nmutable. We can go in and replace the bytecode with something compatible with\nthe original function.\n\nHow we actually do that, well, that's complicated, and you may not want to\nknow.\n\n\nDoes this work with PyPy?\n-------------------------\n\nI'm going to level with you, I was going to say \"hell no!\", and then decided\nto give it a try.\n\nHell yes! (But only accidentally. YMMV... We'll try to officially support this\nlater.)\n\n\nWhat else do you build?\n-----------------------\n\nLots of things. Check out some of our other `open source projects`_.\n\n.. _open source projects: https://www.beanbaginc.com/opensource/\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/beanbaginc/kgb", "keywords": "", "license": "MIT", "maintainer": "Christian Hammond", "maintainer_email": "christian@beanbaginc.com", "name": "kgb", "package_url": "https://pypi.org/project/kgb/", "platform": "", "project_url": "https://pypi.org/project/kgb/", "project_urls": { "Homepage": "https://github.com/beanbaginc/kgb" }, "release_url": "https://pypi.org/project/kgb/4.0/", "requires_dist": null, "requires_python": "", "summary": "Utilities for spying on function calls in unit tests.", "version": "4.0" }, "last_serial": 5610551, "releases": { "0.5": [ { "comment_text": "", "digests": { "md5": "b7a056ff3b84b3befe4ddda7a33b33d3", "sha256": "a57ac6c3e05f88327b6d3c4227d92add9ba9d2bd8df8ccafbd97aa7b015fba00" }, "downloads": -1, "filename": "kgb-0.5-py2.5.egg", "has_sig": false, "md5_digest": "b7a056ff3b84b3befe4ddda7a33b33d3", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 17128, "upload_time": "2013-05-23T08:17:49", "url": "https://files.pythonhosted.org/packages/6a/d8/85a62f8451b227f78d794996ec46e79fea3aa53ca15dfd4d704572662aff/kgb-0.5-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "043b412cd397648de4db4db73056ce32", "sha256": "1796effbe201a369b07f8179bf3d965eda33e104876984e176753119215baf79" }, "downloads": -1, "filename": "kgb-0.5-py2.6.egg", "has_sig": false, "md5_digest": "043b412cd397648de4db4db73056ce32", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 17085, "upload_time": "2013-05-23T08:17:52", "url": "https://files.pythonhosted.org/packages/6a/2c/025a64e1a557da12e555e672b8e686938bc4daeaddeec2820be06b23a59b/kgb-0.5-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "9dbee481f385d4591a9cb3d512a76c7d", "sha256": "13b568917b6ae79e2014cbdbc2d3bbc95a7bee861092845452e8b7fd2a8fb302" }, "downloads": -1, "filename": "kgb-0.5-py2.7.egg", "has_sig": false, "md5_digest": "9dbee481f385d4591a9cb3d512a76c7d", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 17027, "upload_time": "2013-05-23T08:17:55", "url": "https://files.pythonhosted.org/packages/80/7f/0860ab8a2d189270ae1b441bc0919265183870deb28dbab3843469fbf447/kgb-0.5-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "b4795b89aa18d62c8f871d72453ba07c", "sha256": "9efb3eeee429f8dcf916f3c6bc11b58cdc7d6700c5c3a196e325a8b2fbb1d69c" }, "downloads": -1, "filename": "kgb-0.5.tar.gz", "has_sig": false, "md5_digest": "b4795b89aa18d62c8f871d72453ba07c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14212, "upload_time": "2013-05-23T08:17:59", "url": "https://files.pythonhosted.org/packages/37/14/d20b7b7492d61d2e4110ca5a8634be73479f0b252a52880d661965ed7715/kgb-0.5.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "101581ed36c3479f85c4e61a17e4a4e6", "sha256": "b665b3da5fa70dfa090817f41ebb20f04f93af89ad5813cae8a6711bde1b5726" }, "downloads": -1, "filename": "kgb-0.5.1-py2.5.egg", "has_sig": false, "md5_digest": "101581ed36c3479f85c4e61a17e4a4e6", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 17207, "upload_time": "2014-06-02T08:03:21", "url": "https://files.pythonhosted.org/packages/c1/f2/1c1dc0180c07f16f7ec21baec47ccf1dc7710e5c10f5e6334157845792b5/kgb-0.5.1-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "2bd07b157be0d458fcc631a70837634f", "sha256": "bec704ac2243b122e02897a452b41e850a79ec92db2ff60b699d877220e5db40" }, "downloads": -1, "filename": "kgb-0.5.1-py2.6.egg", "has_sig": false, "md5_digest": "2bd07b157be0d458fcc631a70837634f", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 17164, "upload_time": "2014-06-02T08:03:27", "url": "https://files.pythonhosted.org/packages/6f/75/422db02476d2537c5897d85f582eb668b7ea1ae8f07be6ec3d29095665fd/kgb-0.5.1-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "96bcc51f8c1cf19a1b8e9f2e4e2268d3", "sha256": "c4e844b18a909615e0ec5d0ff66d9953a3cbb918e62d4a1eab7ce78d07a9bce0" }, "downloads": -1, "filename": "kgb-0.5.1-py2.7.egg", "has_sig": false, "md5_digest": "96bcc51f8c1cf19a1b8e9f2e4e2268d3", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 17107, "upload_time": "2014-06-02T08:03:15", "url": "https://files.pythonhosted.org/packages/8e/24/87e997aec318750a6d31dc066cc4e11d4eaff7101f3508a648c898e7d4bc/kgb-0.5.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "fd43f6c2daa41c71f91a19f4e8b12683", "sha256": "3a69c19fb6504fcaaf4dee69ff62449a5e3125340042f172fd8114bed7c02f0b" }, "downloads": -1, "filename": "kgb-0.5.1.tar.gz", "has_sig": false, "md5_digest": "fd43f6c2daa41c71f91a19f4e8b12683", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14486, "upload_time": "2014-06-02T08:02:15", "url": "https://files.pythonhosted.org/packages/35/b6/c9aeaa5fd6f60d1d48546fe90776153ed42fe95c9ef3246a67c550c14c95/kgb-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "71fd59af77b9da68947ec745fb7937e3", "sha256": "e104db6d94c879f2c209392c89cf5472c6bdd9f3a7566edf3ee99dfa314839e1" }, "downloads": -1, "filename": "kgb-0.5.2-py2.5.egg", "has_sig": false, "md5_digest": "71fd59af77b9da68947ec745fb7937e3", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 17444, "upload_time": "2015-03-17T22:03:52", "url": "https://files.pythonhosted.org/packages/ce/4b/b77593a9f7841f111ab400f05dc5180e4d288b9f3a6af505ffdbfdc71afe/kgb-0.5.2-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "b2fdaaa563dfdf87c264c4f46cdd12b4", "sha256": "cafe28983d3bc4f900eb51372ccd06e8bc1d6fa7d4cf7ed824dade8384672642" }, "downloads": -1, "filename": "kgb-0.5.2-py2.6.egg", "has_sig": false, "md5_digest": "b2fdaaa563dfdf87c264c4f46cdd12b4", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 17400, "upload_time": "2015-03-17T22:03:55", "url": "https://files.pythonhosted.org/packages/8a/ed/155fa1ef6cd02f2190596a0659b10cf7acbe861c83b3f0c27b98ef50b509/kgb-0.5.2-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "53d677c1690ac6c246a065b7c2cbc596", "sha256": "0301d6f7d5882a89898b7d88398501a09d3956a932101ec57933fde47ec2ab4b" }, "downloads": -1, "filename": "kgb-0.5.2-py2.7.egg", "has_sig": false, "md5_digest": "53d677c1690ac6c246a065b7c2cbc596", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 17316, "upload_time": "2015-03-17T22:03:58", "url": "https://files.pythonhosted.org/packages/dc/dd/fe9bb5fd75240156c94457eedc203fac7f9c94fb42bf3b46b41f986af949/kgb-0.5.2-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "c5500b4b943de4fa07af41db5febf66e", "sha256": "d82212a834f1869731799bede72f3500adfbaaa1013a35116ecb686788d8040d" }, "downloads": -1, "filename": "kgb-0.5.2.tar.gz", "has_sig": false, "md5_digest": "c5500b4b943de4fa07af41db5febf66e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15008, "upload_time": "2015-03-17T22:04:01", "url": "https://files.pythonhosted.org/packages/9e/00/b3d77f8d7828e9f663068c8c1a3f27a31e3ca53a1c1825b9f53627362a3b/kgb-0.5.2.tar.gz" } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "b7baabca0a8eaae58dc25bb4c68e8997", "sha256": "ba139c0a99eed530fb5a40e3feba1d1970077975f9ac923766ab4eccde36f275" }, "downloads": -1, "filename": "kgb-0.5.3-py2.5.egg", "has_sig": true, "md5_digest": "b7baabca0a8eaae58dc25bb4c68e8997", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 17758, "upload_time": "2015-11-28T08:52:23", "url": "https://files.pythonhosted.org/packages/ee/dd/2a5d854cb9992b451dd95cdc86cbd41d49a48daa4588ee52a247746630b7/kgb-0.5.3-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "d9d44d47f86076e6e094ef115c2f136d", "sha256": "d7e494d0e3a230e1430ec66a269ee74d7bf16220335a6308e179ad8a88de1c9b" }, "downloads": -1, "filename": "kgb-0.5.3-py2.6.egg", "has_sig": true, "md5_digest": "d9d44d47f86076e6e094ef115c2f136d", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 17714, "upload_time": "2015-11-28T08:52:29", "url": "https://files.pythonhosted.org/packages/0f/82/1bf6fee53d93909b2fcf1b3f85080873fb16c926d3cd5175105f2bcfd1ea/kgb-0.5.3-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "7eceb4c627fe5365087a33ebc8fbdfb7", "sha256": "2ae02e7f959039ef30ab8ddcea8727adc874a1176cde8053004a83d6e211c288" }, "downloads": -1, "filename": "kgb-0.5.3-py2.7.egg", "has_sig": true, "md5_digest": "7eceb4c627fe5365087a33ebc8fbdfb7", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 17634, "upload_time": "2015-11-28T08:52:34", "url": "https://files.pythonhosted.org/packages/46/98/741cff6c0ad213ff7bf387721bf21aa73aa74191345f5e1c4892df8df176/kgb-0.5.3-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "999c4a221e72b4fd7e4702865c029b25", "sha256": "edc713637bdc8db3b1734384423f66d218adec718a005868ecc527e0da5003be" }, "downloads": -1, "filename": "kgb-0.5.3-py2-none-any.whl", "has_sig": true, "md5_digest": "999c4a221e72b4fd7e4702865c029b25", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 8691, "upload_time": "2015-11-28T08:52:18", "url": "https://files.pythonhosted.org/packages/64/84/146f00a13b02c85e2f06cb7cfd60edd2ab7ea962010cda1b9b3ca1d6d562/kgb-0.5.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "26b35b76fb819c4d3108e1e1ef6c7b28", "sha256": "3988f490f12fce5aa98a3eaad7b0f635600623808c7a7f4383019ad7243a1696" }, "downloads": -1, "filename": "kgb-0.5.3.tar.gz", "has_sig": true, "md5_digest": "26b35b76fb819c4d3108e1e1ef6c7b28", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13960, "upload_time": "2015-11-28T08:52:39", "url": "https://files.pythonhosted.org/packages/44/88/353b6d71e3550191e323a220f8275da6a6ca4b4e07865a4e0228bb983771/kgb-0.5.3.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "260bdbd2dfd1e26de83edd28aa0d98d0", "sha256": "411d64855a8ebeadeae506a59471e904bc347c4480340a576f8ecff205752101" }, "downloads": -1, "filename": "kgb-1.0-py2.6.egg", "has_sig": true, "md5_digest": "260bdbd2dfd1e26de83edd28aa0d98d0", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 29799, "upload_time": "2017-11-01T23:01:17", "url": "https://files.pythonhosted.org/packages/02/7c/6974c22fbd679e890f2efad90f043d4c53f1ee607925cd125be1abddb4fc/kgb-1.0-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "921ae390a92977b0fa0fb070d4b92cf8", "sha256": "578d38616e749273917506064da6a98745f51846f6af1d0271aacea605732b58" }, "downloads": -1, "filename": "kgb-1.0-py2.7.egg", "has_sig": true, "md5_digest": "921ae390a92977b0fa0fb070d4b92cf8", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 29747, "upload_time": "2017-11-01T23:01:18", "url": "https://files.pythonhosted.org/packages/a3/8d/69a6059052f49b8940d057b135cf619caa7e4a9a1cf90ef54b46e23b7d02/kgb-1.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "5e0fac7855f07f2722a7b83f71cb1330", "sha256": "323966cd493a4202920d58110f52de17283149476df6917a4a23b5f56b114357" }, "downloads": -1, "filename": "kgb-1.0-py2-none-any.whl", "has_sig": true, "md5_digest": "5e0fac7855f07f2722a7b83f71cb1330", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 14419, "upload_time": "2017-11-01T23:01:16", "url": "https://files.pythonhosted.org/packages/63/02/a368c5880da1d36cfdc924c9200a4e211ac11e26f2c6df23366943a07c0f/kgb-1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fea2aa988b591947b1cdd23dad58edb4", "sha256": "aba70227eba3ab457ca22764fcf61752a2c62db9be0350c2625a31274830eef8" }, "downloads": -1, "filename": "kgb-1.0-py3.4.egg", "has_sig": true, "md5_digest": "fea2aa988b591947b1cdd23dad58edb4", "packagetype": "bdist_egg", "python_version": "3.4", "requires_python": null, "size": 31824, "upload_time": "2017-11-01T23:01:20", "url": "https://files.pythonhosted.org/packages/42/a3/431f96c14d9a77ace7131688ea2db51851961f4ab93c3fbea0ecc0231491/kgb-1.0-py3.4.egg" }, { "comment_text": "", "digests": { "md5": "9007c61088dc4002e389428fc0eee0ef", "sha256": "25b7d5ddadb7a42c4f1433f2524e13df717e77e364d98b99ba6029bb043ab91a" }, "downloads": -1, "filename": "kgb-1.0-py3.5.egg", "has_sig": true, "md5_digest": "9007c61088dc4002e389428fc0eee0ef", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 31779, "upload_time": "2017-11-01T23:01:21", "url": "https://files.pythonhosted.org/packages/e4/2e/c9ecf12f93ef91beb74863bfeb077b85a6eb7d23234c8ac31fbb1d2ec42f/kgb-1.0-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "3d8f98aaaa2b31cb95eb21f2ab345ce4", "sha256": "b1a90f9d7d5e4b22fae459e3cdfa4292c0545c8bc541846805087a8242ba42b4" }, "downloads": -1, "filename": "kgb-1.0-py3-none-any.whl", "has_sig": true, "md5_digest": "3d8f98aaaa2b31cb95eb21f2ab345ce4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14421, "upload_time": "2017-11-01T23:01:14", "url": "https://files.pythonhosted.org/packages/8a/c9/b188e68ca3393d126d15411d0646d392e4bb433bc1b85ecd799dbc49ffed/kgb-1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1a1d23a68665670fc7fded3c462ececf", "sha256": "8f62e5a1a4e00c237d4e5129a2024cb779b5f873daaeff267f90d38b128f39dc" }, "downloads": -1, "filename": "kgb-1.0.tar.gz", "has_sig": true, "md5_digest": "1a1d23a68665670fc7fded3c462ececf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17925, "upload_time": "2017-11-01T23:01:22", "url": "https://files.pythonhosted.org/packages/12/7d/ef7b8f7f317ddd1993b5e0538263ead27d57437125747f5d2f46faa80e2d/kgb-1.0.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "6a7246fa949df836784cfdc72e0b9f3c", "sha256": "83c0649ef18a2a9c37dd7909d84ef1bbdc7bde896f46d69d08653aa4b86c27da" }, "downloads": -1, "filename": "kgb-1.1-py2.6.egg", "has_sig": true, "md5_digest": "6a7246fa949df836784cfdc72e0b9f3c", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 35953, "upload_time": "2017-12-06T01:34:25", "url": "https://files.pythonhosted.org/packages/87/10/990d1b80ad03457dcff6e616ca9d3ef440c39682f4edd9199650dc682883/kgb-1.1-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "5de7534ec92a69431e8cb1d255dd6c1a", "sha256": "24626a956124366eb912cce1885712ea9ea84ace513a61f0c34c90bc6997bcaa" }, "downloads": -1, "filename": "kgb-1.1-py2.7.egg", "has_sig": true, "md5_digest": "5de7534ec92a69431e8cb1d255dd6c1a", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 35808, "upload_time": "2017-12-06T01:34:28", "url": "https://files.pythonhosted.org/packages/ef/25/7bc6985d4680cbcd53e87b3a853fe9c5977f76a360263962cb077eefc673/kgb-1.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "b2dfb3f41ccc3b9162b5db8a16655609", "sha256": "6f31c083e75c0cbd13f4b5ecd045c2b057e8f1dd98edee199724167560ff47a9" }, "downloads": -1, "filename": "kgb-1.1-py2-none-any.whl", "has_sig": true, "md5_digest": "b2dfb3f41ccc3b9162b5db8a16655609", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 16569, "upload_time": "2017-12-06T01:34:23", "url": "https://files.pythonhosted.org/packages/92/c4/857f89cf0572612d3f363dba93be98aeac3af6a406a19988903d8f717f0d/kgb-1.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "499f2cb55bf15afa101889477e0920e9", "sha256": "7ef7505654b6acbf2619e84071b7dd87a483ded9de6f6b4379e15bbba78f0bf6" }, "downloads": -1, "filename": "kgb-1.1-py3.4.egg", "has_sig": true, "md5_digest": "499f2cb55bf15afa101889477e0920e9", "packagetype": "bdist_egg", "python_version": "3.4", "requires_python": null, "size": 38120, "upload_time": "2017-12-06T01:34:30", "url": "https://files.pythonhosted.org/packages/ac/6e/dfb42b4a737fbeacd0e9c19f50cad4e7c0015b8d091975f2e5abf53876eb/kgb-1.1-py3.4.egg" }, { "comment_text": "", "digests": { "md5": "80a47de69ee1972c88ca4aec96c4a5ca", "sha256": "8b0037ffe4147dcf149b29d35876b719fcfb60ad025f63d03d6bcfbf122b0e4f" }, "downloads": -1, "filename": "kgb-1.1-py3.5.egg", "has_sig": true, "md5_digest": "80a47de69ee1972c88ca4aec96c4a5ca", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 38070, "upload_time": "2017-12-06T01:34:32", "url": "https://files.pythonhosted.org/packages/31/b3/948e8ea73a9558fed9ea1322c5c1bdbfc93c4c03408d297e9db6261fb428/kgb-1.1-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "1c927317fd69b61fec5c7c888a941a8c", "sha256": "e5b27d7bad16f8fa6e2fca955b2389d960e9585738afa43745095633d4436480" }, "downloads": -1, "filename": "kgb-1.1-py3-none-any.whl", "has_sig": true, "md5_digest": "1c927317fd69b61fec5c7c888a941a8c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16569, "upload_time": "2017-12-06T01:34:21", "url": "https://files.pythonhosted.org/packages/19/d6/ed8bafaa03d370d526a3ef842a27dba1062416c2ab2af59edb79b3909301/kgb-1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aaf31ced4585eba06c1e5377d80b89f4", "sha256": "b1b44c6209f517e3ec710c231b16c47021db67e5f3e7504bad68f6e227203af4" }, "downloads": -1, "filename": "kgb-1.1.tar.gz", "has_sig": true, "md5_digest": "aaf31ced4585eba06c1e5377d80b89f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20332, "upload_time": "2017-12-06T01:34:34", "url": "https://files.pythonhosted.org/packages/58/f3/074892e92e280a270a95a80a3faa72d4405f3d749a95397429f3fc43c3b3/kgb-1.1.tar.gz" } ], "2.0": [ { "comment_text": "", "digests": { "md5": "f5590f0d3dda2c9c48ea364eea182d0b", "sha256": "14f28779eb90dc7a6202c23565b1bca79dfd13636307309e22c8447397bcda65" }, "downloads": -1, "filename": "kgb-2.0-py2.6.egg", "has_sig": true, "md5_digest": "f5590f0d3dda2c9c48ea364eea182d0b", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 49120, "upload_time": "2018-02-06T07:44:57", "url": "https://files.pythonhosted.org/packages/d8/5f/39ebee9dec6612677a3688747986cce67fd71fa7baf2f5957dff6ef0e47a/kgb-2.0-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "050b89d5651805f82db7859b33b7bbf8", "sha256": "6041fdff8d58a450424d23177bd3e47cc579f73321169e085de1c08729a71092" }, "downloads": -1, "filename": "kgb-2.0-py2.7.egg", "has_sig": true, "md5_digest": "050b89d5651805f82db7859b33b7bbf8", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 48959, "upload_time": "2018-02-06T07:44:58", "url": "https://files.pythonhosted.org/packages/e5/0d/c0b3d5ebc85fb6d8810b151d63f8d16a36a61981976b8c6438c395a123cd/kgb-2.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "c1b3ab9a35d1bef415f5f8184d1cc8b2", "sha256": "6b8d7414a60d233958b1210f416c317640fb42a55951e9f871518d3e2dd81638" }, "downloads": -1, "filename": "kgb-2.0-py2-none-any.whl", "has_sig": true, "md5_digest": "c1b3ab9a35d1bef415f5f8184d1cc8b2", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 26876, "upload_time": "2018-02-06T07:44:55", "url": "https://files.pythonhosted.org/packages/ef/84/269f012839f14554e11bebed57b4315f564a34e5a627bc5e4c4b6cddfad3/kgb-2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0fd9ca7f67b51f4bf656a5f8dd905883", "sha256": "63c4b72e46849e6d43379eaddca30119f8dc3e0c539ed634a225666c845743e9" }, "downloads": -1, "filename": "kgb-2.0-py3.4.egg", "has_sig": true, "md5_digest": "0fd9ca7f67b51f4bf656a5f8dd905883", "packagetype": "bdist_egg", "python_version": "3.4", "requires_python": null, "size": 51420, "upload_time": "2018-02-06T07:45:00", "url": "https://files.pythonhosted.org/packages/6e/f1/46acd764bdee1d24452d1a033753a29201c17a0a8654c8df0e47be94af21/kgb-2.0-py3.4.egg" }, { "comment_text": "", "digests": { "md5": "75b7ea09e91b5d9c134f3680b7bfe487", "sha256": "8293b1269896c9680594f5f6eef7d65f8a9971ab14d309cdcca8fbe36c8bb6b0" }, "downloads": -1, "filename": "kgb-2.0-py3.5.egg", "has_sig": true, "md5_digest": "75b7ea09e91b5d9c134f3680b7bfe487", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 51304, "upload_time": "2018-02-06T07:45:01", "url": "https://files.pythonhosted.org/packages/a7/5f/1f3b85d58df5f8442ee3fc306723712c5bcb8cfbbf0ecb18a97a89632a63/kgb-2.0-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "44ac2265c87c30c6ba6dd9abefbe8ee7", "sha256": "deba5c8a41e4ff3c05ea79da7181e2c6febd2a05ff1c917f5f8b44a2a34f937d" }, "downloads": -1, "filename": "kgb-2.0-py3.6.egg", "has_sig": true, "md5_digest": "44ac2265c87c30c6ba6dd9abefbe8ee7", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 50537, "upload_time": "2018-02-06T07:45:03", "url": "https://files.pythonhosted.org/packages/66/aa/e769452bac2d566f51fc896aebe7e73cdd3c3ef849125572405824b811a0/kgb-2.0-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "304801f33a4d11852dd4a1513bc10185", "sha256": "02e5772f8876e3fe287c8b54fdb782d639a1907e11c4d76ec3bf5536a3918cf6" }, "downloads": -1, "filename": "kgb-2.0-py3-none-any.whl", "has_sig": true, "md5_digest": "304801f33a4d11852dd4a1513bc10185", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26877, "upload_time": "2018-02-06T07:44:54", "url": "https://files.pythonhosted.org/packages/9f/4b/a5cc4e7446002afbd01aeef05bb65f16b55b4a8215ca12c113e08d5f1727/kgb-2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "059752bed793862db9571eaf5841f042", "sha256": "af92a7c0fa1ba11feea98534563a25c2a07e67f0ef9d8cf11df56b2b2e55c7ad" }, "downloads": -1, "filename": "kgb-2.0.tar.gz", "has_sig": true, "md5_digest": "059752bed793862db9571eaf5841f042", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26163, "upload_time": "2018-02-06T07:45:05", "url": "https://files.pythonhosted.org/packages/66/95/6a3e101e078d08af23e516ac5802e9ef03887abef8fec179225fa22eb251/kgb-2.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "98aa7de5eade128947a19f62642ef04f", "sha256": "6b0ec2dce8b3c763e6764f6640d13ccadf84836b2daf77f58350b03efd339595" }, "downloads": -1, "filename": "kgb-2.0.1-py2.7.egg", "has_sig": true, "md5_digest": "98aa7de5eade128947a19f62642ef04f", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 51655, "upload_time": "2018-03-13T06:45:35", "url": "https://files.pythonhosted.org/packages/46/af/847f18919841e0e52426fd1a697e57ffd872a890b1e0bced9fe037c30c95/kgb-2.0.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "ce3e7f7666354c0a788afce30ee08309", "sha256": "dc2b3239f0bb074b1adce4a13f51dc0a75c446bf6558424370d679b9ba2fbd1b" }, "downloads": -1, "filename": "kgb-2.0.1-py2-none-any.whl", "has_sig": true, "md5_digest": "ce3e7f7666354c0a788afce30ee08309", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 28171, "upload_time": "2018-03-13T06:45:32", "url": "https://files.pythonhosted.org/packages/ba/21/2570d9e64cbb731c83bb4558c86223d3e8599dd167a4f2c3829262760f65/kgb-2.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ca12bdfd652704c3bc4b132ac71e172", "sha256": "de7f45875c159c066fbc90d90418c981a4b3c270044ca74e2bbaabc64ffbdeca" }, "downloads": -1, "filename": "kgb-2.0.1-py3.4.egg", "has_sig": true, "md5_digest": "8ca12bdfd652704c3bc4b132ac71e172", "packagetype": "bdist_egg", "python_version": "3.4", "requires_python": null, "size": 54997, "upload_time": "2018-03-13T06:45:37", "url": "https://files.pythonhosted.org/packages/14/d1/7216dd3709729435c70f2b4884675ac8324fc7e8dc2d3991f8d05e852d49/kgb-2.0.1-py3.4.egg" }, { "comment_text": "", "digests": { "md5": "45fcfe7f4d66f89197aa201dae347239", "sha256": "cd3f59eceaeffd83decfb0b5a764c11dcc9357d2f3f27bc42b6d42ba757ea247" }, "downloads": -1, "filename": "kgb-2.0.1-py3.5.egg", "has_sig": true, "md5_digest": "45fcfe7f4d66f89197aa201dae347239", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 54864, "upload_time": "2018-03-13T06:45:39", "url": "https://files.pythonhosted.org/packages/07/2e/99aedcbc2651f9b1d1b0926d7075bf3a5d83abc90154af924b1cce27ac87/kgb-2.0.1-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "19b8374a6016b00a5b87d7f635b96620", "sha256": "c2cfe7508e73cde7401681785cc2a84a966aa39398d1b4d3f91ea37638b01f26" }, "downloads": -1, "filename": "kgb-2.0.1-py3.6.egg", "has_sig": true, "md5_digest": "19b8374a6016b00a5b87d7f635b96620", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 54009, "upload_time": "2018-03-13T06:45:41", "url": "https://files.pythonhosted.org/packages/cb/8e/677a057fbe7965809ea1914fb2ecaa005c30aaaf89d6d8bc1370e9785249/kgb-2.0.1-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "62f30d16fdeb3eaa66ecfdf1908c8c0d", "sha256": "ee1d88d9de439c11c678031add3c2616a726127b40d23e8101576c42264e3144" }, "downloads": -1, "filename": "kgb-2.0.1-py3-none-any.whl", "has_sig": true, "md5_digest": "62f30d16fdeb3eaa66ecfdf1908c8c0d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 28171, "upload_time": "2018-03-13T06:45:30", "url": "https://files.pythonhosted.org/packages/84/ab/525f89fef548173132117938bbc2d9a99db727dcdbdc2dd29c3bbac16289/kgb-2.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a1d308df9b57e6af4e1c3697f559cfb8", "sha256": "026773a889bd8221b962958c63c87f984a082b91c0d77cc39e62c1fb6c0b1233" }, "downloads": -1, "filename": "kgb-2.0.1.tar.gz", "has_sig": true, "md5_digest": "a1d308df9b57e6af4e1c3697f559cfb8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29797, "upload_time": "2018-03-13T06:45:43", "url": "https://files.pythonhosted.org/packages/3c/1a/dbcebeabc5839601410da55bbfdf2fcec4aa48dbfd79454b45fdbfd82db2/kgb-2.0.1.tar.gz" } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "82f71746fff2b03394e2208e257ad745", "sha256": "e47a0c87b1fb778bb1a10496d93e11c9911c526c6590ed017a0a63e5acf1e4df" }, "downloads": -1, "filename": "kgb-2.0.2-py2.7.egg", "has_sig": true, "md5_digest": "82f71746fff2b03394e2208e257ad745", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 53656, "upload_time": "2018-07-09T21:53:33", "url": "https://files.pythonhosted.org/packages/86/27/2991ddca4e6c3c278ea88e7c439a4ca44bce1319d1debc298adea32fe886/kgb-2.0.2-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "806e53bdb2b643bf22b958c87486cbbc", "sha256": "dfc34a69ef556c2e8495ab4febdf42dd07d26a1073addedc70357ee7b1d94af8" }, "downloads": -1, "filename": "kgb-2.0.2-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "806e53bdb2b643bf22b958c87486cbbc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24820, "upload_time": "2018-07-09T21:53:32", "url": "https://files.pythonhosted.org/packages/c5/1f/ecd548c52fbd3c6bdc95e930d441d531762d2159bb8ea3ca27e37e72f65d/kgb-2.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ea9662ba316840fc1cc2620d74b89667", "sha256": "baae99fd6dc8b10f0d77b4d1973aba43807a48afce644192b89acc2f2d807367" }, "downloads": -1, "filename": "kgb-2.0.2-py3.4.egg", "has_sig": true, "md5_digest": "ea9662ba316840fc1cc2620d74b89667", "packagetype": "bdist_egg", "python_version": "3.4", "requires_python": null, "size": 57085, "upload_time": "2018-07-09T21:53:35", "url": "https://files.pythonhosted.org/packages/a5/13/5f1cfa9c9c81bd59a70c0ae8d2f05bb8d51a97250dfef5386cf57708bb17/kgb-2.0.2-py3.4.egg" }, { "comment_text": "", "digests": { "md5": "53313bf053915dc588d56d57832c349d", "sha256": "35570f717fffcc926d2da07a64f747db30006dffc8c906466ffd44c803b5e9d1" }, "downloads": -1, "filename": "kgb-2.0.2-py3.5.egg", "has_sig": true, "md5_digest": "53313bf053915dc588d56d57832c349d", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 56955, "upload_time": "2018-07-09T21:53:36", "url": "https://files.pythonhosted.org/packages/1f/30/9862c6f51c6aeefe83e7ab0e908d57777b6bc316fe7c928bbc496fa49977/kgb-2.0.2-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "5b994a3d329533eefba09fe2236463c7", "sha256": "44b9b61a81361ba0edf2814a0b2956e21219ed916de9dd7b55fa56aaff60f249" }, "downloads": -1, "filename": "kgb-2.0.2-py3.6.egg", "has_sig": true, "md5_digest": "5b994a3d329533eefba09fe2236463c7", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 56057, "upload_time": "2018-07-09T21:53:37", "url": "https://files.pythonhosted.org/packages/43/76/92b9f3774029f1a1797c12db732ca8fd68b1975fa2458b2f0593e7ad054e/kgb-2.0.2-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "46a0d3f6f198ea34355ff15fc03298c4", "sha256": "2cb115f4d0f8e16b5d69f589ca1ee79b10e7b0014c7aafbbc64df37e62c2f62e" }, "downloads": -1, "filename": "kgb-2.0.2-py3.7.egg", "has_sig": true, "md5_digest": "46a0d3f6f198ea34355ff15fc03298c4", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 56138, "upload_time": "2018-07-09T21:53:39", "url": "https://files.pythonhosted.org/packages/9f/75/e320df2b1aee8ba46b30446355f57f634c128667b1390a6b76c3f485cd73/kgb-2.0.2-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "708a27807ffaaedbf170c97a72f0d636", "sha256": "0ffbf143169e09e2b5e1cdd4ab76532563810666e18b7228373d124ace6ca29e" }, "downloads": -1, "filename": "kgb-2.0.2.tar.gz", "has_sig": true, "md5_digest": "708a27807ffaaedbf170c97a72f0d636", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30446, "upload_time": "2018-07-09T21:53:40", "url": "https://files.pythonhosted.org/packages/ed/8d/c57d6b6bb3b20b8441f82d182b660705cef3481931ea9069ad97e5904f79/kgb-2.0.2.tar.gz" } ], "2.0.3": [ { "comment_text": "", "digests": { "md5": "ac8dbec7de553769701b87d96c3488ab", "sha256": "88f64966d57f4fcbb4f47b96a7b5a55bad8fabe4982cf512096d30f048b23a88" }, "downloads": -1, "filename": "kgb-2.0.3-py2.7.egg", "has_sig": true, "md5_digest": "ac8dbec7de553769701b87d96c3488ab", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 53740, "upload_time": "2018-09-19T22:35:48", "url": "https://files.pythonhosted.org/packages/02/6f/434cbe466d110be66f063f19c17924e4d2f19b96da2bf8cfd51fd44fd6d5/kgb-2.0.3-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "1c8dc74d29c881be884f6bab1b508011", "sha256": "0dd342be3a2a7e0f7cde0d0f81308479a3e0833d9f92c062ee2e6f4490967e05" }, "downloads": -1, "filename": "kgb-2.0.3-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "1c8dc74d29c881be884f6bab1b508011", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24852, "upload_time": "2018-09-19T22:35:46", "url": "https://files.pythonhosted.org/packages/6c/46/5ecbf73fd101636b8d9f3cab9868c4dcfe40e3df580dfa5cab7113ff420d/kgb-2.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c123432bd98793b49a92375b8566dc7f", "sha256": "b0faa0644db072695e6b41783d9d9ba11451af76da9c2a85f1a8fac32084c84c" }, "downloads": -1, "filename": "kgb-2.0.3-py3.4.egg", "has_sig": true, "md5_digest": "c123432bd98793b49a92375b8566dc7f", "packagetype": "bdist_egg", "python_version": "3.4", "requires_python": null, "size": 57173, "upload_time": "2018-09-19T22:35:52", "url": "https://files.pythonhosted.org/packages/42/96/80a22d514e0f38d19c34517daf1c28422b092f44ea128752639326af2f81/kgb-2.0.3-py3.4.egg" }, { "comment_text": "", "digests": { "md5": "fddfbed832c5fdf8a515390b9a0f2730", "sha256": "087108c073336b8267e97bf786d7e8e9ae7c959cfda69b740e40f02a45ec6a7c" }, "downloads": -1, "filename": "kgb-2.0.3-py3.5.egg", "has_sig": true, "md5_digest": "fddfbed832c5fdf8a515390b9a0f2730", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 57037, "upload_time": "2018-09-19T22:35:54", "url": "https://files.pythonhosted.org/packages/a7/b9/52cd625b80f64cf3e2cc4ac8cd31b4cca8f2606bd0beb63751565e1cd9d2/kgb-2.0.3-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "b12ee01218ff578697e927a0a3f16fff", "sha256": "18d6d6f55d9fcf46f1719e5f5e3be016f0b569add536f5edb45c69636b4db3a0" }, "downloads": -1, "filename": "kgb-2.0.3-py3.6.egg", "has_sig": true, "md5_digest": "b12ee01218ff578697e927a0a3f16fff", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 56145, "upload_time": "2018-09-19T22:35:56", "url": "https://files.pythonhosted.org/packages/be/b5/3d09c332f8a60309cf83ce2a14284e7c1c5a46cc0b8a5a5ef783552f06a2/kgb-2.0.3-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "78a22c5fd6a10993075b68b0dfc55765", "sha256": "92da285018b42fd786a8e6f080005cb6fd0a2707e0317650dc38db92c3ed7691" }, "downloads": -1, "filename": "kgb-2.0.3-py3.7.egg", "has_sig": true, "md5_digest": "78a22c5fd6a10993075b68b0dfc55765", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 56220, "upload_time": "2018-09-19T22:35:58", "url": "https://files.pythonhosted.org/packages/9b/f6/dbda448f95a1404100847fae2b9b7733b46543533d014c3fdaf64ac227a6/kgb-2.0.3-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "3e27cf9beb30079f543a789aeb4cd5ad", "sha256": "edb5d1c65c857104058b6736bc951474b4e02f3b18b411aa56b97f28b9f158cb" }, "downloads": -1, "filename": "kgb-2.0.3.tar.gz", "has_sig": true, "md5_digest": "3e27cf9beb30079f543a789aeb4cd5ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30511, "upload_time": "2018-09-19T22:36:00", "url": "https://files.pythonhosted.org/packages/15/90/200922c310ecc490b4de6dd24c21f4a156a9124e3d5a79edbe32748f3d5f/kgb-2.0.3.tar.gz" } ], "3.0": [ { "comment_text": "", "digests": { "md5": "b7d76a516aaea232e445da0bf87138c5", "sha256": "5eaa87df526dd8231d0610c183fc2f378ce4decb1d7e8162043b50702ea0f781" }, "downloads": -1, "filename": "kgb-3.0-py2.7.egg", "has_sig": true, "md5_digest": "b7d76a516aaea232e445da0bf87138c5", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 56193, "upload_time": "2019-03-24T03:58:30", "url": "https://files.pythonhosted.org/packages/9a/2c/ff9e610f0e95105ccbfda7fb295df5b84f9f51d82dbee286a6d2a0487db3/kgb-3.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "1048b29922a4205c8c76e0738f49b877", "sha256": "d0fce07305575b5a476aefbfb5edcf691ea6b57035c68d3722d64d6b32cdcbd4" }, "downloads": -1, "filename": "kgb-3.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "1048b29922a4205c8c76e0738f49b877", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 26114, "upload_time": "2019-03-24T03:58:28", "url": "https://files.pythonhosted.org/packages/55/89/fb563523d3b80343f685fb33373a9456c9239be3a9783123467521256152/kgb-3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a3bd9d174f08d559b03e8eaca63e2e13", "sha256": "7097f06257127bc786866fbb02eb21699744350eea13420f32e91923afb81f1b" }, "downloads": -1, "filename": "kgb-3.0-py3.4.egg", "has_sig": true, "md5_digest": "a3bd9d174f08d559b03e8eaca63e2e13", "packagetype": "bdist_egg", "python_version": "3.4", "requires_python": null, "size": 59784, "upload_time": "2019-03-24T03:58:32", "url": "https://files.pythonhosted.org/packages/22/fa/29c653ae890a58014134d4f70a1a0168b8c79a4ca931200ed315fd34aeec/kgb-3.0-py3.4.egg" }, { "comment_text": "", "digests": { "md5": "ccc73a017b6eb6cf049280ba0d8d1f6c", "sha256": "181a897c533416c8f9f3cb61fc8f3ac2ae70bff53304001f9cf6bc26c633fb8d" }, "downloads": -1, "filename": "kgb-3.0-py3.5.egg", "has_sig": true, "md5_digest": "ccc73a017b6eb6cf049280ba0d8d1f6c", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 59655, "upload_time": "2019-03-24T03:58:34", "url": "https://files.pythonhosted.org/packages/8b/d0/9965973b0f59f581ddc3f1bb17d83e2c13fbe334842a067b35cb7e015e52/kgb-3.0-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "0a9385a793e053a6091bf93ca6b7b913", "sha256": "e3d2d89641cba5332ec22291e53e70faa95a954b6f5872919d68da08fa82fa1b" }, "downloads": -1, "filename": "kgb-3.0-py3.6.egg", "has_sig": true, "md5_digest": "0a9385a793e053a6091bf93ca6b7b913", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 58669, "upload_time": "2019-03-24T03:58:36", "url": "https://files.pythonhosted.org/packages/01/cb/7a455bb356938856c6ad45b38e6acec31184f5085384172836cea5af3c24/kgb-3.0-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "d35dd6092988983d94bc6b9b4c834c36", "sha256": "ba8edd291000770f2e6d882b50417201f062e976291b63a3794c0e0e9820909b" }, "downloads": -1, "filename": "kgb-3.0-py3.7.egg", "has_sig": true, "md5_digest": "d35dd6092988983d94bc6b9b4c834c36", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 58748, "upload_time": "2019-03-24T03:58:38", "url": "https://files.pythonhosted.org/packages/88/bd/49037c99462232d06bdbebad868eecfe066bc0c8a5cf50c6d549d604fead/kgb-3.0-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "f30fd8953903a9f62b6c99204aea8d61", "sha256": "bfc725b8d98a9b0f58c28041d6deba5ec91644661260e0882dc1aa517ccf74ea" }, "downloads": -1, "filename": "kgb-3.0.tar.gz", "has_sig": true, "md5_digest": "f30fd8953903a9f62b6c99204aea8d61", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31857, "upload_time": "2019-03-24T03:58:39", "url": "https://files.pythonhosted.org/packages/05/67/e12ac8856cf9cdf2f8d3d66ad79ac2d23282c1122deba19186384741c5ef/kgb-3.0.tar.gz" } ], "4.0": [ { "comment_text": "", "digests": { "md5": "2d5b9c56a105ba7da879708dafb2f87d", "sha256": "d09ad3e4b8ee9016b8edf5ec6c25f28a7b090c513b98622f5e20bfa323e53e17" }, "downloads": -1, "filename": "kgb-4.0-py2.7.egg", "has_sig": true, "md5_digest": "2d5b9c56a105ba7da879708dafb2f87d", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 59571, "upload_time": "2019-07-30T23:21:02", "url": "https://files.pythonhosted.org/packages/17/1e/a54b319a00b16f3b2a2f3d89a4821a1d9b5e3a6a6910a3b6a421beb6b68f/kgb-4.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "845b9c41cf925347342a74e2b4fb9f5e", "sha256": "58fba49bd087b8e29a1a133b05e9283c2a015ca5ce39ad7b7a57e4f489c542ce" }, "downloads": -1, "filename": "kgb-4.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "845b9c41cf925347342a74e2b4fb9f5e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 27461, "upload_time": "2019-07-30T23:20:59", "url": "https://files.pythonhosted.org/packages/a6/a1/6a65989a815e885a7bc616fabb093e3453094b85e24c7ceaf2659053219e/kgb-4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "27b4ddfa35e5e75f38c6f41e352216b5", "sha256": "560dc02494bdc56313a860d05d748ce325c23076e96ec8a79ccf6f53eda22674" }, "downloads": -1, "filename": "kgb-4.0-py3.4.egg", "has_sig": true, "md5_digest": "27b4ddfa35e5e75f38c6f41e352216b5", "packagetype": "bdist_egg", "python_version": "3.4", "requires_python": null, "size": 63270, "upload_time": "2019-07-30T23:21:04", "url": "https://files.pythonhosted.org/packages/73/b2/394ea7e609a3598dac90e04da4aaffdb1bed05e5867553f30d1ec42552c5/kgb-4.0-py3.4.egg" }, { "comment_text": "", "digests": { "md5": "1b0d5b8d7e68621af691aa8e568d6d5d", "sha256": "df7b52b3d1a65f0f3bd781d2a5bf943353d95005ca3668ef172293c49af52f79" }, "downloads": -1, "filename": "kgb-4.0-py3.5.egg", "has_sig": true, "md5_digest": "1b0d5b8d7e68621af691aa8e568d6d5d", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 63192, "upload_time": "2019-07-30T23:21:06", "url": "https://files.pythonhosted.org/packages/f9/cb/a1d43b712c1e1b4bacd44f6c475d40fbe028db7153c07eba2cfb5835e581/kgb-4.0-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "b0f6691ee72b4c53f722bf349aab1520", "sha256": "4cda1cf273dfe19ce0e3b7683d27bdd228bfef107f1e093d83cd4071d9b3c71a" }, "downloads": -1, "filename": "kgb-4.0-py3.6.egg", "has_sig": true, "md5_digest": "b0f6691ee72b4c53f722bf349aab1520", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 62100, "upload_time": "2019-07-30T23:21:08", "url": "https://files.pythonhosted.org/packages/ce/58/5246e6be6cdcbcfcb3e3da6adf35a0a6bd57b1889002e0e32fda8bf9ddac/kgb-4.0-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "6ed46073bc9174c81a5954af1936aeae", "sha256": "65c0ea135c157d6b06835b97f2df6b393bed94a531cf436d0a836bfc468306c3" }, "downloads": -1, "filename": "kgb-4.0-py3.7.egg", "has_sig": true, "md5_digest": "6ed46073bc9174c81a5954af1936aeae", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 62134, "upload_time": "2019-07-30T23:21:09", "url": "https://files.pythonhosted.org/packages/cc/e5/6f6267a0ec7df3b5afec1e9ce4132c55a34f872781ea80056a1bbcda5526/kgb-4.0-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "905756213f2e34cb3531be75d589f063", "sha256": "08561cb56b1ddbc2509b26f4eddf2c4956ab22a8286331e2225e5848a6dcfc10" }, "downloads": -1, "filename": "kgb-4.0.tar.gz", "has_sig": true, "md5_digest": "905756213f2e34cb3531be75d589f063", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33472, "upload_time": "2019-07-30T23:21:12", "url": "https://files.pythonhosted.org/packages/63/51/7eb697f26bb2049f685a98a572dd5ed8f39b0df8275cbf0f7c731ea8e595/kgb-4.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2d5b9c56a105ba7da879708dafb2f87d", "sha256": "d09ad3e4b8ee9016b8edf5ec6c25f28a7b090c513b98622f5e20bfa323e53e17" }, "downloads": -1, "filename": "kgb-4.0-py2.7.egg", "has_sig": true, "md5_digest": "2d5b9c56a105ba7da879708dafb2f87d", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 59571, "upload_time": "2019-07-30T23:21:02", "url": "https://files.pythonhosted.org/packages/17/1e/a54b319a00b16f3b2a2f3d89a4821a1d9b5e3a6a6910a3b6a421beb6b68f/kgb-4.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "845b9c41cf925347342a74e2b4fb9f5e", "sha256": "58fba49bd087b8e29a1a133b05e9283c2a015ca5ce39ad7b7a57e4f489c542ce" }, "downloads": -1, "filename": "kgb-4.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "845b9c41cf925347342a74e2b4fb9f5e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 27461, "upload_time": "2019-07-30T23:20:59", "url": "https://files.pythonhosted.org/packages/a6/a1/6a65989a815e885a7bc616fabb093e3453094b85e24c7ceaf2659053219e/kgb-4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "27b4ddfa35e5e75f38c6f41e352216b5", "sha256": "560dc02494bdc56313a860d05d748ce325c23076e96ec8a79ccf6f53eda22674" }, "downloads": -1, "filename": "kgb-4.0-py3.4.egg", "has_sig": true, "md5_digest": "27b4ddfa35e5e75f38c6f41e352216b5", "packagetype": "bdist_egg", "python_version": "3.4", "requires_python": null, "size": 63270, "upload_time": "2019-07-30T23:21:04", "url": "https://files.pythonhosted.org/packages/73/b2/394ea7e609a3598dac90e04da4aaffdb1bed05e5867553f30d1ec42552c5/kgb-4.0-py3.4.egg" }, { "comment_text": "", "digests": { "md5": "1b0d5b8d7e68621af691aa8e568d6d5d", "sha256": "df7b52b3d1a65f0f3bd781d2a5bf943353d95005ca3668ef172293c49af52f79" }, "downloads": -1, "filename": "kgb-4.0-py3.5.egg", "has_sig": true, "md5_digest": "1b0d5b8d7e68621af691aa8e568d6d5d", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 63192, "upload_time": "2019-07-30T23:21:06", "url": "https://files.pythonhosted.org/packages/f9/cb/a1d43b712c1e1b4bacd44f6c475d40fbe028db7153c07eba2cfb5835e581/kgb-4.0-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "b0f6691ee72b4c53f722bf349aab1520", "sha256": "4cda1cf273dfe19ce0e3b7683d27bdd228bfef107f1e093d83cd4071d9b3c71a" }, "downloads": -1, "filename": "kgb-4.0-py3.6.egg", "has_sig": true, "md5_digest": "b0f6691ee72b4c53f722bf349aab1520", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 62100, "upload_time": "2019-07-30T23:21:08", "url": "https://files.pythonhosted.org/packages/ce/58/5246e6be6cdcbcfcb3e3da6adf35a0a6bd57b1889002e0e32fda8bf9ddac/kgb-4.0-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "6ed46073bc9174c81a5954af1936aeae", "sha256": "65c0ea135c157d6b06835b97f2df6b393bed94a531cf436d0a836bfc468306c3" }, "downloads": -1, "filename": "kgb-4.0-py3.7.egg", "has_sig": true, "md5_digest": "6ed46073bc9174c81a5954af1936aeae", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 62134, "upload_time": "2019-07-30T23:21:09", "url": "https://files.pythonhosted.org/packages/cc/e5/6f6267a0ec7df3b5afec1e9ce4132c55a34f872781ea80056a1bbcda5526/kgb-4.0-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "905756213f2e34cb3531be75d589f063", "sha256": "08561cb56b1ddbc2509b26f4eddf2c4956ab22a8286331e2225e5848a6dcfc10" }, "downloads": -1, "filename": "kgb-4.0.tar.gz", "has_sig": true, "md5_digest": "905756213f2e34cb3531be75d589f063", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33472, "upload_time": "2019-07-30T23:21:12", "url": "https://files.pythonhosted.org/packages/63/51/7eb697f26bb2049f685a98a572dd5ed8f39b0df8275cbf0f7c731ea8e595/kgb-4.0.tar.gz" } ] }