{ "info": { "author": "Framework Labs", "author_email": "fred@frameworklabs.us", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.5", "Topic :: Database :: Front-Ends", "Topic :: Internet :: WWW/HTTP :: HTTP Servers", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# KCK\nThe old two-hard-things joke (\"There are two hard things in computer science: \ncache invalidation, naming things, and off-by-one errors\") starts with cache\ninvalidation because it comes up so often. Caching can mean 10X or even 1000X\nperformance improvements, so we developers love to cache things.\n\nAnd, invariably, caching things means we have to come up with strategies for\nkeeping the cached data fresh and in-sync with the source data. Event-based \ncache invalidation is one of the ways we can work to ensure that cached data is\nreasonably fresh. And it can be tricky.\n\nKCK is a set of tools to build caches with less pain and it has some nifty\ntricks to squeeze another 10X or 100X out of the performance numbers for certain\nworkloads.\n\n## Features\n* **Sophisticated data pipelines can be written simply.** Folks with SQL chops can\n build a backend for their new React application in an afternoon. With a little\n Python, it's pretty straightforward to turn petabytes of corporate data into\n simple statistics for the C-level dashboard.\n* **It's really fast.** KCK manages data flowing in and out of Postgres so it can keep\n its stable of data products up-to-date, but it serves data from a cache built on\n Cassandra and the data gets to the application immediately so long as it's in the\n cache. And KCK helps make sure the data is in the cache and fresh, before an\n application needs it.\n* **Plays well with others.** KCK makes it easy to use SQL and SQLAlchemy, but it's\n Django-friendly too and it'll happily accept data from any source you can talk to\n with Python.\n* **Includes HTTP Server with JWT.** KCK is accessible via an include HTTP server that\n can optionally use JWT to authenticate clients.\n* **Makes tiny database servers look fast.** Seriously. KCK reduces database pressure\n to a minimum, then it spreads it out so your database writes don't have to compete\n with a deluge of read traffic from your web servers and background tasks. And cached\n writes are on the TODO list.\n* **Designed to scale.** Both the HTTP servers and the Cassandra cluster on which KCK\n depends can scale horizontally.\n\n## Status\nNone of this code should be used in production.\n\nWith that said, the core parts are the cache, the http service, the refresh worker, and\nthe process worker. The status of each is detailed below.\n\n### The cache\nThe cache is working and it's pretty nifty. Cache misses can cause _primers_ to fire,\nreturning the data and storing it in the cache on the way out so it'll be more quickly\navailable the next time it's requested. Cache entries can be invalidated or they can be\nset to expire after a certain amount of time. *But cache entries can also be automatically\nrefreshed as data is updated, or at a set interval, or even when the system boots up.*\n\n### The HTTP service\nThe HTTP service is working. It's very basic, just a /fetch and an /update and,\noptionally, JWT authentication so it can be used as a backend for mobile apps or\nnewer Javascript web apps made with React or Angular. So there's a lot of power\nin a pretty simple wrapper and it's easily consumed by other services, languages,\netc.\n\n### The refresh and process workers are _in-progress_\nTo be fully-functional, there needs to be a refresh worker and a process worker running and\nneither of those are working yet.\n\nThe process worker is pretty simple and a good chunk of use cases don't require it at all.\nIt mostly just needs to run a single method every so often so that will go quickly once\nI sit down to write it.\n\nThe refresh worker, unfortunately, is more important than the process worker, so I'm\nworking on it first. I've just completed an overhaul of the background refresh queue\ncode and it's working in a very simple way, but it needs to be scalable and it needs\nto choose tasks to refresh a bit more carefully than it currently does before it's\nperforming up to spec. So it's still a few weeks out.\n\n## System overview\nEvery piece is scalable and the most user-facing components are the most scalable.\nThe diagram below shows the basics of the KCK system structure.\n\n\n\n![Scaling KCK](misc/kck_system_design.png)\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/frameworklabs/kck", "keywords": "performance-oriented data pipeline framework", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "kck", "package_url": "https://pypi.org/project/kck/", "platform": "", "project_url": "https://pypi.org/project/kck/", "project_urls": { "Homepage": "https://gitlab.com/frameworklabs/kck" }, "release_url": "https://pypi.org/project/kck/0.6.3/", "requires_dist": [ "PyYAML (>=3.13)", "python-dateutil (>=2.2)", "cassandra-driver (>=3.13)", "SQLAlchemy (>=1.1.11)", "psycopg2 (>=2.7.5)", "jsonpath-ng (>=1.4.2)", "simple-settings (>=0.13.0)", "jwt (>=0.6.1)" ], "requires_python": "", "summary": "A high-performance framework for dynamic data", "version": "0.6.3" }, "last_serial": 5822786, "releases": { "0.5.0": [ { "comment_text": "", "digests": { "md5": "1fe422de31082a768e454c1ae8ec26ac", "sha256": "f43be9838927514c8c59eb607569e34a3b64c770c5de36eaaa4430d19493c7c3" }, "downloads": -1, "filename": "kck-0.5.0.tar.gz", "has_sig": false, "md5_digest": "1fe422de31082a768e454c1ae8ec26ac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16772, "upload_time": "2017-10-23T04:49:54", "url": "https://files.pythonhosted.org/packages/6d/21/34aa4d1edf883e202ab5f463c6cd89e3bd6b7c3014d9f28006de38051d28/kck-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "5b155f37caee3bfcdee56b9d162e255c", "sha256": "3a7623a7086357eddd984740189d99665d0d7fc55352e13a1249490cca679ae6" }, "downloads": -1, "filename": "kck-0.5.1.tar.gz", "has_sig": false, "md5_digest": "5b155f37caee3bfcdee56b9d162e255c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17131, "upload_time": "2017-10-23T05:05:05", "url": "https://files.pythonhosted.org/packages/43/f2/e87b1d11b88f085733d4d15d8cc9238ae63ca1b1f2b7befc1f97398e9ca9/kck-0.5.1.tar.gz" } ], "0.5.14": [ { "comment_text": "", "digests": { "md5": "e528e21e43c81fd63bc853f52ae5764d", "sha256": "c8bb29147420f11307ca1baf17ce0631440f4e9331e72d97d459019d6ec77358" }, "downloads": -1, "filename": "kck-0.5.14.tar.gz", "has_sig": false, "md5_digest": "e528e21e43c81fd63bc853f52ae5764d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5590, "upload_time": "2018-09-20T02:49:11", "url": "https://files.pythonhosted.org/packages/c3/cb/ba2b87b5b2e4aae731b5bf3f09a4685a671af232aaa87b57305d44c32240/kck-0.5.14.tar.gz" } ], "0.5.14a0": [ { "comment_text": "", "digests": { "md5": "65d67e8f885f1505d742241a6857b475", "sha256": "451beb2189d5a01b6a4a95072e32f133213aea2ceb2e86b183c56e71091fc5fe" }, "downloads": -1, "filename": "kck-0.5.14a0.tar.gz", "has_sig": false, "md5_digest": "65d67e8f885f1505d742241a6857b475", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6459, "upload_time": "2018-09-20T03:26:47", "url": "https://files.pythonhosted.org/packages/18/8a/4131f1cf0fabc7f69682dc875ce5cf039e9fe57c925ed173095ce3e56404/kck-0.5.14a0.tar.gz" } ], "0.5.14b0": [ { "comment_text": "", "digests": { "md5": "997e3550f4571621c40ed05503d2ed25", "sha256": "0ffc54404d5e19ec0eb6c1ddb5f15b58dcd60f9ce5140277bd87b3314a1e815b" }, "downloads": -1, "filename": "kck-0.5.14b0.tar.gz", "has_sig": false, "md5_digest": "997e3550f4571621c40ed05503d2ed25", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6476, "upload_time": "2018-09-22T02:13:02", "url": "https://files.pythonhosted.org/packages/96/2c/d65543e52c4abb20d61bcf9828e64257ddb40ce569cb68ef09189613123e/kck-0.5.14b0.tar.gz" } ], "0.5.15": [ { "comment_text": "", "digests": { "md5": "a5ea57685c48047c34ec58e65d5dc7fc", "sha256": "f244d8532149d1e1cae395f2a042ba939ba4fb817f335841ef0d2851d5e1ca35" }, "downloads": -1, "filename": "kck-0.5.15.tar.gz", "has_sig": false, "md5_digest": "a5ea57685c48047c34ec58e65d5dc7fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6474, "upload_time": "2018-09-22T02:18:39", "url": "https://files.pythonhosted.org/packages/64/1d/7ddadeada1f4371b6bc320fbe4d9e828f4e4010b550dfc797faf36f7f882/kck-0.5.15.tar.gz" } ], "0.5.16": [ { "comment_text": "", "digests": { "md5": "6f00e683399a19ac9725f8fdc6c23da9", "sha256": "a5c9d54d3689cb2da84de78f4b9a2e99bcdc6bcb9148615254f54e848bdb13ce" }, "downloads": -1, "filename": "kck-0.5.16.tar.gz", "has_sig": false, "md5_digest": "6f00e683399a19ac9725f8fdc6c23da9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6480, "upload_time": "2018-09-22T02:25:20", "url": "https://files.pythonhosted.org/packages/48/13/cf6a0ca61baec63ba85a2a744de8abf57aad69a4ad861155019a6c5a22b7/kck-0.5.16.tar.gz" } ], "0.5.17": [ { "comment_text": "", "digests": { "md5": "ad44f6cc7a9eceeba8545fd2a6fb19f4", "sha256": "7d121580201b53fd77699cefec6951522fcf3d8f22031379d7ab01ec165fa7a3" }, "downloads": -1, "filename": "kck-0.5.17.tar.gz", "has_sig": false, "md5_digest": "ad44f6cc7a9eceeba8545fd2a6fb19f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6593, "upload_time": "2018-09-22T02:32:48", "url": "https://files.pythonhosted.org/packages/32/13/da074444d150eaf1f449ffec36904bf61897cf7042c2652a85b18fc70186/kck-0.5.17.tar.gz" } ], "0.5.18": [ { "comment_text": "", "digests": { "md5": "5b97058cd81a3f4ceab0f828aa567f15", "sha256": "7b15fe21bf0e2ab49c2b615d258d719923cff94994eed61d39295ff82e96df54" }, "downloads": -1, "filename": "kck-0.5.18.tar.gz", "has_sig": false, "md5_digest": "5b97058cd81a3f4ceab0f828aa567f15", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6581, "upload_time": "2018-09-22T02:44:03", "url": "https://files.pythonhosted.org/packages/f5/6b/be6db010697e8100283a7e5095d3a831b179b7c911e45e1f4d680782f669/kck-0.5.18.tar.gz" } ], "0.5.19": [ { "comment_text": "", "digests": { "md5": "ca49a375399de1bd9e44b198e7fb43ea", "sha256": "f11f3673c0e73629770643da3495c70d98f46b7423861643a8793072464a4a54" }, "downloads": -1, "filename": "kck-0.5.19.tar.gz", "has_sig": false, "md5_digest": "ca49a375399de1bd9e44b198e7fb43ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6588, "upload_time": "2018-09-22T02:46:43", "url": "https://files.pythonhosted.org/packages/b1/bb/0848c2543445642f2bb1b8782f6b3c7b9cd84c84c36efc7b9028536b7548/kck-0.5.19.tar.gz" } ], "0.5.20": [ { "comment_text": "", "digests": { "md5": "6f917cfae9d2bffa634668e53130eea6", "sha256": "7df5687a83dbe47ac56e066a91a9196f41365977b92999a3524f57bb9cac3bed" }, "downloads": -1, "filename": "kck-0.5.20.tar.gz", "has_sig": false, "md5_digest": "6f917cfae9d2bffa634668e53130eea6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6621, "upload_time": "2018-09-22T02:54:37", "url": "https://files.pythonhosted.org/packages/59/2d/27a19ab8c4ba616dbe6309364c30f08ad98bfb703999e13ddc1f2f7c88ef/kck-0.5.20.tar.gz" } ], "0.5.21": [ { "comment_text": "", "digests": { "md5": "fae7690921f8219bdacf804ceec3bd6b", "sha256": "b9af902c1f85ceb84efec4095673884c1ff6fa8ec686c63d3533f108cf0e60dd" }, "downloads": -1, "filename": "kck-0.5.21.tar.gz", "has_sig": false, "md5_digest": "fae7690921f8219bdacf804ceec3bd6b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6627, "upload_time": "2018-09-22T02:58:41", "url": "https://files.pythonhosted.org/packages/45/4c/f0c33c6791cc446493889fcde159ce02a10aa8cc8bdfe33e65805cba95b1/kck-0.5.21.tar.gz" } ], "0.5.22": [ { "comment_text": "", "digests": { "md5": "0ee3cf5fbdcf41e3d0480983ad81d83a", "sha256": "7b537354c28f09275f14c9e021ef0c7c3a48803a2b188232ec9ab760c730765a" }, "downloads": -1, "filename": "kck-0.5.22.tar.gz", "has_sig": false, "md5_digest": "0ee3cf5fbdcf41e3d0480983ad81d83a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6647, "upload_time": "2018-09-22T03:07:21", "url": "https://files.pythonhosted.org/packages/ad/d0/8aa2710c98374f8eeb8d5a59c190bbb3040cd01cb4a4443df0f4f7e2fa66/kck-0.5.22.tar.gz" } ], "0.5.23": [ { "comment_text": "", "digests": { "md5": "0ac91fe34661c61ed7fa50b98f6e44fb", "sha256": "e0da907882ab01d6f037c328f16a03aa878ab0cea343d08896902dd255aede6e" }, "downloads": -1, "filename": "kck-0.5.23.tar.gz", "has_sig": false, "md5_digest": "0ac91fe34661c61ed7fa50b98f6e44fb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6649, "upload_time": "2018-09-22T03:08:38", "url": "https://files.pythonhosted.org/packages/54/33/7e7ea53a844c7092bf86215e01748f2f63e1bb1d43b857a2171fd20e4cc6/kck-0.5.23.tar.gz" } ], "0.5.24": [ { "comment_text": "", "digests": { "md5": "6ff925407e7d86062732aea879dc2f6b", "sha256": "32e279ad7a5e111bf97feb8aa5b1e2767c34188eacf2d3bb58cbff405a023f32" }, "downloads": -1, "filename": "kck-0.5.24.tar.gz", "has_sig": false, "md5_digest": "6ff925407e7d86062732aea879dc2f6b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6241, "upload_time": "2018-09-22T03:12:57", "url": "https://files.pythonhosted.org/packages/26/35/b04148f4d21d502b9920b9e30e78afe415fed8f410daafa2fde355615833/kck-0.5.24.tar.gz" } ], "0.5.25": [ { "comment_text": "", "digests": { "md5": "a56ba8a21c11d31ed0e015cf24ceb72e", "sha256": "efadc57650d2265791b6884ce416826a7de535877d8cd89131f942d4e010a7b0" }, "downloads": -1, "filename": "kck-0.5.25-py3-none-any.whl", "has_sig": false, "md5_digest": "a56ba8a21c11d31ed0e015cf24ceb72e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7523, "upload_time": "2018-09-22T03:21:24", "url": "https://files.pythonhosted.org/packages/4b/98/af7e62206b8f20a026de099746886aaae9beb121a68a6196ad2c44800c1e/kck-0.5.25-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7cdcd5c7f4854b487c878831ffa5bb9a", "sha256": "ceb5e33fd3f77f069b28e2b40ba0116031650549a7e0204f97fc62cf6d4e8141" }, "downloads": -1, "filename": "kck-0.5.25.tar.gz", "has_sig": false, "md5_digest": "7cdcd5c7f4854b487c878831ffa5bb9a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6241, "upload_time": "2018-09-22T03:21:25", "url": "https://files.pythonhosted.org/packages/88/0a/a55475dd32b1d9c3441fc5797201164f882dd3138441dbefed4bfd6e63af/kck-0.5.25.tar.gz" } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "1f9f322efea470fe169955d2e246b230", "sha256": "07b61f8dd2889fb0cb6ed747cc7c818775b53d9a253f282fd53fbd00bfc11d76" }, "downloads": -1, "filename": "kck-0.5.3.tar.gz", "has_sig": false, "md5_digest": "1f9f322efea470fe169955d2e246b230", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15109, "upload_time": "2017-10-25T03:56:21", "url": "https://files.pythonhosted.org/packages/ea/fb/a1883dbb7d8dbb1ca7001caa7bc1dfbbbe5237cdefe508739fd0771b9b14/kck-0.5.3.tar.gz" } ], "0.5.5": [ { "comment_text": "", "digests": { "md5": "a02cd71b37ffeafb37d943b1ec153160", "sha256": "ba33779de0df0c09bd5580dc67fb541e03a0d416845cc4e5ed4bb26e1b286bdc" }, "downloads": -1, "filename": "kck-0.5.5.tar.gz", "has_sig": false, "md5_digest": "a02cd71b37ffeafb37d943b1ec153160", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17175, "upload_time": "2017-10-25T04:47:08", "url": "https://files.pythonhosted.org/packages/fa/90/2446b4418cef67da6e81ef4454cc95a83fcba70c64e8eea95903e7d11dda/kck-0.5.5.tar.gz" } ], "0.5.6": [ { "comment_text": "", "digests": { "md5": "ce328b74222c6a176435753b901f3e0f", "sha256": "1d5ffd731a85cf0dad3da48f86dea126edf60f002a617c9b5f970ff4a4a1631e" }, "downloads": -1, "filename": "kck-0.5.6.tar.gz", "has_sig": false, "md5_digest": "ce328b74222c6a176435753b901f3e0f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17179, "upload_time": "2017-10-25T04:50:01", "url": "https://files.pythonhosted.org/packages/da/5f/6c6bc162e2eec289bcfc3567f7e286ddb92f6d8c09faa098fa8d991e4dd4/kck-0.5.6.tar.gz" } ], "0.5.7": [ { "comment_text": "", "digests": { "md5": "6ea915821c54b5cca6fabd53c42b4a65", "sha256": "dceb4c8d77834c439bd3884219f5f66bc7ad7590c2e7d4d861bc8ffd8c19f2ba" }, "downloads": -1, "filename": "kck-0.5.7.tar.gz", "has_sig": false, "md5_digest": "6ea915821c54b5cca6fabd53c42b4a65", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17185, "upload_time": "2017-10-25T04:51:19", "url": "https://files.pythonhosted.org/packages/1f/d7/ac51768e8d3cb9ed1272e9074098617fdfa6d3ac23243f292a93e4c14723/kck-0.5.7.tar.gz" } ], "0.5.8": [ { "comment_text": "", "digests": { "md5": "958363bc7cb5b0d697f578ce4daa5560", "sha256": "c1cbeec3fc76c075cafaf0781975ec327c9a71551e5c3274c889135b884faf11" }, "downloads": -1, "filename": "kck-0.5.8.tar.gz", "has_sig": false, "md5_digest": "958363bc7cb5b0d697f578ce4daa5560", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17202, "upload_time": "2017-10-25T05:06:47", "url": "https://files.pythonhosted.org/packages/37/92/b8031e8ff515f8776217bf0b4d52051a277cf185e5e36fd722774b98ea08/kck-0.5.8.tar.gz" } ], "0.5.9": [ { "comment_text": "", "digests": { "md5": "d8e69a1b55bd083c57854cc722607ffb", "sha256": "4c5148b524d4532cbb79de3fc0c479b5c3b24a4f840f76c7ecd17bc6e6f85165" }, "downloads": -1, "filename": "kck-0.5.9.tar.gz", "has_sig": false, "md5_digest": "d8e69a1b55bd083c57854cc722607ffb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17211, "upload_time": "2017-11-06T02:14:40", "url": "https://files.pythonhosted.org/packages/24/53/8823c2c3a5bd24246076ba0635972f2b48cf7c448448740794662d5e8ddd/kck-0.5.9.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "baaa3036f8f691ec22b2a7fc73b369b9", "sha256": "895bfa2d542a988b4a42099e1569970996e76daf62739966f7947268d942dd41" }, "downloads": -1, "filename": "kck-0.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "baaa3036f8f691ec22b2a7fc73b369b9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33981, "upload_time": "2019-09-12T15:35:31", "url": "https://files.pythonhosted.org/packages/3c/59/f9e655080494530d23d3f9f84951e6f554b9319bfb8d5aac1fa95666fe9e/kck-0.6.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3af2b76fd7208210b31eb816c4913720", "sha256": "d45c69057cdfbd1b970eee49c981344217097ff771a4c101b531b683c730eb40" }, "downloads": -1, "filename": "kck-0.6.1.tar.gz", "has_sig": false, "md5_digest": "3af2b76fd7208210b31eb816c4913720", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39658, "upload_time": "2019-09-12T15:35:34", "url": "https://files.pythonhosted.org/packages/e5/24/02593db0c75a08a0ce69c9300260a37d4a2aec3c574cbe0badfec006be1a/kck-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "1c79fbbb25ef2ca53cdac7130461597e", "sha256": "ed5dae2141d267552ed0c09761603b85ee81632b5c74ccc4cea7e689d580aa53" }, "downloads": -1, "filename": "kck-0.6.2-py3-none-any.whl", "has_sig": false, "md5_digest": "1c79fbbb25ef2ca53cdac7130461597e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 36073, "upload_time": "2019-09-12T21:04:42", "url": "https://files.pythonhosted.org/packages/de/24/809f416631200c1846f3dcfe2a3c69c9f092ce6092ad035934d477ef5aa3/kck-0.6.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a44784028d2d84ce38a94ea280f879c8", "sha256": "fe55a5aa5aabed646b507b41b606a8e5d36d5b1b98e95574e0d677417a57d19b" }, "downloads": -1, "filename": "kck-0.6.2.tar.gz", "has_sig": false, "md5_digest": "a44784028d2d84ce38a94ea280f879c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40990, "upload_time": "2019-09-12T21:04:45", "url": "https://files.pythonhosted.org/packages/23/49/30513c12a853b5f9bd2cdf5e6f496245ddaa3f1548afc64bb09ace3ee1b5/kck-0.6.2.tar.gz" } ], "0.6.3": [ { "comment_text": "", "digests": { "md5": "029051bcb5218312f4993d7f5925edfd", "sha256": "e161f0fab0dc9bf347a93842b3f0b8b0d1e27944b975df3f8a6a48636524a165" }, "downloads": -1, "filename": "kck-0.6.3-py3-none-any.whl", "has_sig": false, "md5_digest": "029051bcb5218312f4993d7f5925edfd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35873, "upload_time": "2019-09-12T22:03:05", "url": "https://files.pythonhosted.org/packages/2b/53/c9c90a175239afb986c067651e42cea8bdc27f131267bdfc6f66a076bf06/kck-0.6.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8c4a976fddaea9376bb7df3f0b5faeee", "sha256": "dd0b17956030945c23e0d84898b3a10c6642e596c043183e1a7caa2dd0607041" }, "downloads": -1, "filename": "kck-0.6.3.tar.gz", "has_sig": false, "md5_digest": "8c4a976fddaea9376bb7df3f0b5faeee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40770, "upload_time": "2019-09-12T22:03:07", "url": "https://files.pythonhosted.org/packages/73/d6/053ac7fc763e1ee45bdb142322407baca6f61af59b329279f07dc0705e39/kck-0.6.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "029051bcb5218312f4993d7f5925edfd", "sha256": "e161f0fab0dc9bf347a93842b3f0b8b0d1e27944b975df3f8a6a48636524a165" }, "downloads": -1, "filename": "kck-0.6.3-py3-none-any.whl", "has_sig": false, "md5_digest": "029051bcb5218312f4993d7f5925edfd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35873, "upload_time": "2019-09-12T22:03:05", "url": "https://files.pythonhosted.org/packages/2b/53/c9c90a175239afb986c067651e42cea8bdc27f131267bdfc6f66a076bf06/kck-0.6.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8c4a976fddaea9376bb7df3f0b5faeee", "sha256": "dd0b17956030945c23e0d84898b3a10c6642e596c043183e1a7caa2dd0607041" }, "downloads": -1, "filename": "kck-0.6.3.tar.gz", "has_sig": false, "md5_digest": "8c4a976fddaea9376bb7df3f0b5faeee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40770, "upload_time": "2019-09-12T22:03:07", "url": "https://files.pythonhosted.org/packages/73/d6/053ac7fc763e1ee45bdb142322407baca6f61af59b329279f07dc0705e39/kck-0.6.3.tar.gz" } ] }