{ "info": { "author": "Robert Thille", "author_email": "rthille@ciena.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: Twisted", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Communications", "Topic :: System :: Distributed Computing" ], "description": "\nAfkak is a [Twisted](https://twistedmatrix.com/)-native [Apache Kafka](https://kafka.apache.org/) client library.\nIt provides support for:\n\n* Producing messages, with automatic batching and optional compression.\n* Consuming messages, with group coordination and automatic commit.\n\nLearn more in the **[documentation](https://afkak.readthedocs.io/en/latest/)**, download [from PyPI](https://pypi.org/projects/afkak), or review the [contribution guidelines](./CONTRIBUTING.md).\nPlease report any issues [on GitHub](https://github.com/ciena/afkak/issues).\n\n# Status\n\nAfkak supports these Pythons:\n\n- CPython 3.5, 3.6, 3.7, 3.8, and 3.9\n- PyPy3\n\nWe aim to support Kafka 1.1.x and later.\nIntegration tests are run against these Kafka broker versions:\n\n- 0.9.0.1\n- 1.1.1\n\nTesting against 2.0.0 is planned (see [#45](https://github.com/ciena/afkak/issues/45)).\n\nNewer broker releases will generally function, but not all Afkak features will work on older brokers.\nIn particular, the coordinated consumer won\u2019t work before Kafka 0.9.0.1.\nWe don\u2019t recommend deploying such old releases of Kafka anyway, as they have serious bugs.\n\n# Usage\n\n### High level\n\nNote: This code is not meant to be runnable. See [producer\\_example](./producer_example) and [consumer\\_example](./consumer_example) for runnable example code.\n\n```python\nfrom afkak.client import KafkaClient\nfrom afkak.consumer import Consumer\nfrom afkak.producer import Producer\nfrom afkak.common import (OFFSET_EARLIEST, PRODUCER_ACK_ALL_REPLICAS,\n PRODUCER_ACK_LOCAL_WRITE)\n\nkClient = KafkaClient(\"localhost:9092\")\n\n# To send messages\nproducer = Producer(kClient)\nd1 = producer.send_messages(\"my-topic\", msgs=[b\"some message\"])\nd2 = producer.send_messages(\"my-topic\", msgs=[b\"takes a list\", b\"of messages\"])\n# To get confirmations/errors on the sends, add callbacks to the returned deferreds\nd1.addCallbacks(handleResponses, handleErrors)\n\n# To wait for acknowledgements\n# PRODUCER_ACK_LOCAL_WRITE : server will wait till the data is written to\n# a local log before sending response\n# [ the default ]\n# PRODUCER_ACK_ALL_REPLICAS : server will block until the message is committed\n# by all in sync replicas before sending a response\nproducer = Producer(kClient,\n req_acks=Producer.PRODUCER_ACK_LOCAL_WRITE,\n ack_timeout=2000)\n\nresponseD = producer.send_messages(\"my-topic\", msgs=[b\"message\"])\n\n# Using twisted's @inlineCallbacks:\nresponses = yield responseD\nif response:\n print(response[0].error)\n print(response[0].offset)\n\n# To send messages in batch: You can use a producer with any of the\n# partitioners for doing this. The following producer will collect\n# messages in batch and send them to Kafka after 20 messages are\n# collected or every 60 seconds (whichever comes first). You can\n# also batch by number of bytes.\n# Notes:\n# * If the producer dies before the messages are sent, the caller would\n# * not have had the callbacks called on the send_messages() returned\n# * deferreds, and so can retry.\n# * Calling producer.stop() before the messages are sent will\n# errback() the deferred(s) returned from the send_messages call(s)\nproducer = Producer(kClient, batch_send=True,\n batch_send_every_n=20,\n batch_send_every_t=60)\nresponseD1 = producer.send_messages(\"my-topic\", msgs=[b\"message\"])\nresponseD2 = producer.send_messages(\"my-topic\", msgs=[b\"message 2\"])\n\n# To consume messages\n# define a function which takes a list of messages to process and\n# possibly returns a deferred which fires when the processing is\n# complete.\ndef processor_func(consumer, messages):\n # Store_Messages_In_Database may return a deferred\n result = store_messages_in_database(messages)\n # record last processed message\n consumer.commit()\n return result\n\nthe_partition = 3 # Consume only from partition 3.\nconsumer = Consumer(kClient, \"my-topic\", the_partition, processor_func)\nd = consumer.start(OFFSET_EARLIEST) # Start reading at earliest message\n# The deferred returned by consumer.start() will fire when an error\n# occurs that can't handled by the consumer, or when consumer.stop()\n# is called\nyield d\n\nconsumer.stop()\nkClient.close()\n```\n\n#### Keyed messages\n```python\nfrom afkak.client import KafkaClient\nfrom afkak.producer import Producer\nfrom afkak.partitioner import HashedPartitioner, RoundRobinPartitioner\n\nkafka = KafkaClient(\"localhost:9092\")\n\n# Use the HashedPartitioner so that the producer will use the optional key\n# argument on send_messages()\nproducer = Producer(kafka, partitioner_class=HashedPartitioner)\nproducer.send_messages(\"my-topic\", \"key1\", [b\"some message\"])\nproducer.send_messages(\"my-topic\", \"key2\", [b\"this method\"])\n\n\n```\n\n### Low level\n\n```python\nfrom afkak.client import KafkaClient\nkafka = KafkaClient(\"localhost:9092\")\nreq = ProduceRequest(topic=\"my-topic\", partition=1,\n messages=[KafkaProtocol.encode_message(b\"some message\")])\nresps = afkak.send_produce_request(payloads=[req], fail_on_error=True)\nkafka.close()\n\nresps[0].topic # b\"my-topic\"\nresps[0].partition # 1\nresps[0].error # 0 (hopefully)\nresps[0].offset # offset of the first message sent in this request\n```\n\n# Install\n\nAfkak releases are [available on PyPI][afkak-pypi].\n\nBecause the Afkak dependencies [Twisted][twisted] and [python-snappy][python-snappy] have binary extension modules you will need to install the Python development headers for the interpreter you wish to use:\n\n[afkak-pypi]: https://pypi.python.org/pypi/afkak\n[twisted]: https://pypi.python.org/pypi/Twisted\n[python-snappy]: https://pypi.python.org/pypi/python-snappy\n\n\n\n\n\n
Debian/Ubuntu:\nsudo apt-get install build-essential python3-dev pypy3-dev libsnappy-dev\n
OS X\nbrew install python pypy snappy
\npip install virtualenv
\n\nThen Afkak can be [installed with pip as usual][pip-install]:\n\n[pip-install]: https://packaging.python.org/en/latest/installing/\n\n# License\n\nCopyright 2013, 2014, 2015 David Arthur under Apache License, v2.0. See `LICENSE`\n\nCopyright 2014, 2015 Cyan, Inc. under Apache License, v2.0. See `LICENSE`\n\nCopyright 2015\u20132021 Ciena Corporation under Apache License, v2.0. See `LICENSE`\n\nThis project began as a port of the [kafka-python][kafka-python] library to Twisted.\n\n[kafka-python]: https://github.com/mumrah/kafka-python\n\nSee [AUTHORS.md](./AUTHORS.md) for the full contributor list.\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://github.com/ciena/afkak", "keywords": "Kafka client,distributed messaging,txkafka", "license": "Apache License 2.0", "maintainer": "Tom Most", "maintainer_email": "twm@freecog.net", "name": "afkak", "package_url": "https://pypi.org/project/afkak/", "platform": "", "project_url": "https://pypi.org/project/afkak/", "project_urls": { "Documentation": "https://afkak.readthedocs.io/en/latest/", "Homepage": "https://github.com/ciena/afkak", "Issues": "https://github.com/ciena/afkak/issues", "Source": "https://github.com/ciena/afkak" }, "release_url": "https://pypi.org/project/afkak/21.5.0.post0/", "requires_dist": [ "attrs (>=19.2.0)", "Twisted (>=18.7.0)", "pyhash ; extra == 'fastmurmur2'", "python-snappy (>=0.5) ; extra == 'snappy'" ], "requires_python": "!=3.0.*, !=3.1.*, !=3.2.*, <4", "summary": "Twisted Python client for Apache Kafka", "version": "21.5.0.post0", "yanked": false, "yanked_reason": null }, "last_serial": 10869478, "releases": { "19.10.0": [ { "comment_text": "", "digests": { "md5": "14c29f3c2fdab29061c3105cbe93a68f", "sha256": "bcf324332ebdf92517fa6ca0af862b401f6a00072f553f5a02c90d409e558ded" }, "downloads": -1, "filename": "afkak-19.10.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "14c29f3c2fdab29061c3105cbe93a68f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 172388, "upload_time": "2019-10-23T20:07:46", "upload_time_iso_8601": "2019-10-23T20:07:46.506427Z", "url": "https://files.pythonhosted.org/packages/c3/09/983a69bc064a3a48ae81ea81c2b5b9254f79e2f43b3fd493a9067d7ea441/afkak-19.10.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "92f9cc0df408c07a1707dce0d475b54c", "sha256": "c740ed51f8490f7a3b66df4dedc5e340bdbbef228ccbe53a24bf022c0ce92d52" }, "downloads": -1, "filename": "afkak-19.10.0.tar.gz", "has_sig": false, "md5_digest": "92f9cc0df408c07a1707dce0d475b54c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 155940, "upload_time": "2019-10-23T20:07:50", "upload_time_iso_8601": "2019-10-23T20:07:50.770160Z", "url": "https://files.pythonhosted.org/packages/7a/ee/361c795c6f230d3c5d63c4793e11269f993637a3b2b519ac9950cef57811/afkak-19.10.0.tar.gz", "yanked": false, "yanked_reason": null } ], "19.6.0a1": [ { "comment_text": "", "digests": { "md5": "d5da045931b9d25ca5e75c3fb0bdbfff", "sha256": "8542ec676f28813bc0b2d83a46e70fb964eb26fa58c3b70c0e4320c73d787145" }, "downloads": -1, "filename": "afkak-19.6.0a1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d5da045931b9d25ca5e75c3fb0bdbfff", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 172112, "upload_time": "2019-06-18T21:51:10", "upload_time_iso_8601": "2019-06-18T21:51:10.894039Z", "url": "https://files.pythonhosted.org/packages/d6/4b/afbe2b10085cddfddafda9e2a06b6971f1b6f44ac8acea42aa95406141f3/afkak-19.6.0a1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "031756cb4592c44fb6d262f5f7a76d6c", "sha256": "e313bc38af2e4b7fcdf88b6a35f890f913825a6c68a25c2ef29606e1669e6d5d" }, "downloads": -1, "filename": "afkak-19.6.0a1.tar.gz", "has_sig": false, "md5_digest": "031756cb4592c44fb6d262f5f7a76d6c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 151048, "upload_time": "2019-06-18T21:51:12", "upload_time_iso_8601": "2019-06-18T21:51:12.884304Z", "url": "https://files.pythonhosted.org/packages/d0/c7/6344bc203fb28e8d875a328aaf4d1de76d97b70985bc9489685fa328a8d3/afkak-19.6.0a1.tar.gz", "yanked": false, "yanked_reason": null } ], "19.8.0": [ { "comment_text": "", "digests": { "md5": "9af1128aaa6ae8bbed401978ab90e12c", "sha256": "339f2a1b0ca22ae861c5fbc4ff8d77a94d5699414409c10f58bd068a2ac20638" }, "downloads": -1, "filename": "afkak-19.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9af1128aaa6ae8bbed401978ab90e12c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 172716, "upload_time": "2019-08-31T01:22:05", "upload_time_iso_8601": "2019-08-31T01:22:05.805172Z", "url": "https://files.pythonhosted.org/packages/b3/f6/bc22321fb925b57b529df50631d8d57e8f85875bf51a41936bfcda77defe/afkak-19.8.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2ca64a3ff283a3ae8e964a37401a9230", "sha256": "e8866051d0f1c9b78335d29f41b5340725c76de0bce29de3cd2ce8db73298e83" }, "downloads": -1, "filename": "afkak-19.8.0.tar.gz", "has_sig": false, "md5_digest": "2ca64a3ff283a3ae8e964a37401a9230", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 152291, "upload_time": "2019-08-31T01:22:07", "upload_time_iso_8601": "2019-08-31T01:22:07.875414Z", "url": "https://files.pythonhosted.org/packages/3b/1d/ee14341ec5aac06e6d9b3d7c593706708ce34817fab17a1878c1a2357435/afkak-19.8.0.tar.gz", "yanked": false, "yanked_reason": null } ], "19.8.0b1": [ { "comment_text": "", "digests": { "md5": "be25151b8022111528eed020b4e52345", "sha256": "387c339dd1b264c890e2ba3aa807b631236f2341f04a5290fb5d8cbbf57952a6" }, "downloads": -1, "filename": "afkak-19.8.0b1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "be25151b8022111528eed020b4e52345", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 171837, "upload_time": "2019-08-08T22:05:13", "upload_time_iso_8601": "2019-08-08T22:05:13.593228Z", "url": "https://files.pythonhosted.org/packages/7a/45/e6216049c3619934772f1f1d3cd85830aef6a05f877553f0cf7f96c2022d/afkak-19.8.0b1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "04c7f19f5a319c276333237b85748239", "sha256": "abe99b3df8017d191240f983eaeb1e90e503646b2269caaa76e09844d3a543b6" }, "downloads": -1, "filename": "afkak-19.8.0b1.tar.gz", "has_sig": false, "md5_digest": "04c7f19f5a319c276333237b85748239", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 154640, "upload_time": "2019-08-08T22:05:15", "upload_time_iso_8601": "2019-08-08T22:05:15.653948Z", "url": "https://files.pythonhosted.org/packages/05/20/ee6202592c492c8c77576faa38a95426b5a0bf871afb9c146a29a5244479/afkak-19.8.0b1.tar.gz", "yanked": false, "yanked_reason": null } ], "19.8.0b2": [ { "comment_text": "", "digests": { "md5": "73e39533ecc6dc6b4929a1e7d8f857d8", "sha256": "b6390a2ef2f776f6b6cc3fe118ca7743482fad72cfb291b20d95269968749dd0" }, "downloads": -1, "filename": "afkak-19.8.0b2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "73e39533ecc6dc6b4929a1e7d8f857d8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 171993, "upload_time": "2019-08-22T02:29:43", "upload_time_iso_8601": "2019-08-22T02:29:43.061958Z", "url": "https://files.pythonhosted.org/packages/5f/80/f1adb7c155744ff0e904c3c7ec948e0a8a704eb931c24a4f2742e6096457/afkak-19.8.0b2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "be0c267f427c4dc4e9aadb5a32e33a2f", "sha256": "4ad7617e330319293f85f1b55ba2bbdf8519eb19a834f63511b9a728268caa94" }, "downloads": -1, "filename": "afkak-19.8.0b2.tar.gz", "has_sig": false, "md5_digest": "be0c267f427c4dc4e9aadb5a32e33a2f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 152403, "upload_time": "2019-08-22T02:29:47", "upload_time_iso_8601": "2019-08-22T02:29:47.253746Z", "url": "https://files.pythonhosted.org/packages/56/dd/d47213d5af62ebb8c43ce46bf70f3a3b7ed3fa5e35bb00d1dfc9c9e4cbab/afkak-19.8.0b2.tar.gz", "yanked": false, "yanked_reason": null } ], "2.4.0": [ { "comment_text": "", "digests": { "md5": "984afa7c6529b94c9aa36d97484286f7", "sha256": "3ecd7a35ec583ca198e00d26758e81e2bb03ba430637e0cdeafbf0b4311ac880" }, "downloads": -1, "filename": "afkak-2.4.0-py2-none-any.whl", "has_sig": false, "md5_digest": "984afa7c6529b94c9aa36d97484286f7", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 109605, "upload_time": "2016-11-15T21:20:43", "upload_time_iso_8601": "2016-11-15T21:20:43.073901Z", "url": "https://files.pythonhosted.org/packages/ff/df/66db00b45ac8455524d677c5d55a9f6b850230c3382e6f39a822458466b2/afkak-2.4.0-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "761de31e8dfc92ba63b03453df8202d0", "sha256": "3ef9997856c45a124804d69f45b965aa6de61cce4c9233c07dd852830c892416" }, "downloads": -1, "filename": "afkak-2.4.0.tar.gz", "has_sig": false, "md5_digest": "761de31e8dfc92ba63b03453df8202d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 94444, "upload_time": "2016-11-15T21:20:45", "upload_time_iso_8601": "2016-11-15T21:20:45.938759Z", "url": "https://files.pythonhosted.org/packages/aa/6f/02b4de214f3320a35df2ec1882499997a4ea194806be8a051157577aaa99/afkak-2.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.9.0": [ { "comment_text": "", "digests": { "md5": "56d164d8dc62c003f102a2b996957a20", "sha256": "aa15efa3de11fd47caa7f0927c4d69fb6cbee4c5b389e745899b959d77b5d996" }, "downloads": -1, "filename": "afkak-2.9.0-py2-none-any.whl", "has_sig": false, "md5_digest": "56d164d8dc62c003f102a2b996957a20", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 119956, "upload_time": "2019-01-05T22:11:08", "upload_time_iso_8601": "2019-01-05T22:11:08.057419Z", "url": "https://files.pythonhosted.org/packages/4d/be/76c7d4918227ca98326fae97ca852ff414776e3cca4513889d4e67c72fc5/afkak-2.9.0-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "4cb7fbb1c0e3868bd2d5ba59e9b1de56", "sha256": "a6a550bde89f13a2716099f918bb97690ec8373e9c5f1aa1a36abbbe61248b99" }, "downloads": -1, "filename": "afkak-2.9.0.tar.gz", "has_sig": false, "md5_digest": "4cb7fbb1c0e3868bd2d5ba59e9b1de56", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 107839, "upload_time": "2019-01-05T22:11:14", "upload_time_iso_8601": "2019-01-05T22:11:14.497574Z", "url": "https://files.pythonhosted.org/packages/4b/aa/a897572c043c3e1c63866be1dd2ecb81db8663374033dd285e76ba4e5f90/afkak-2.9.0.tar.gz", "yanked": false, "yanked_reason": null } ], "20.10.0": [ { "comment_text": "", "digests": { "md5": "06e2c2797afd5fec686148112fc69456", "sha256": "148acd3f24a2c4099328f21324c8cbee40b08c3fab1e8e01b1bc5b4125de9ce9" }, "downloads": -1, "filename": "afkak-20.10.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "06e2c2797afd5fec686148112fc69456", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 172574, "upload_time": "2020-10-09T00:37:47", "upload_time_iso_8601": "2020-10-09T00:37:47.700273Z", "url": "https://files.pythonhosted.org/packages/7a/2c/79e008e10aecabc4f643a6fd153006834d26c55202fb9104cde4d1c8d6f3/afkak-20.10.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "848c4aebf4732ad25d8a368cc405fc31", "sha256": "53e060d20ed438c2f8402eb12d7e9ca95de6446b623ed22645e57cad34cc3b78" }, "downloads": -1, "filename": "afkak-20.10.0.tar.gz", "has_sig": false, "md5_digest": "848c4aebf4732ad25d8a368cc405fc31", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 158518, "upload_time": "2020-10-09T00:37:49", "upload_time_iso_8601": "2020-10-09T00:37:49.987715Z", "url": "https://files.pythonhosted.org/packages/a1/6b/83c06d005536ec2d01d573232ceca399091fa77eb1dc628680f228e85bfd/afkak-20.10.0.tar.gz", "yanked": false, "yanked_reason": null } ], "20.9.0": [ { "comment_text": "", "digests": { "md5": "502c1f51d0c2711595c7806300744489", "sha256": "144642e684f080dca29c2f3dd66e70376e987068564c2f7e47ef79fc32bcc299" }, "downloads": -1, "filename": "afkak-20.9.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "502c1f51d0c2711595c7806300744489", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 172533, "upload_time": "2020-09-09T21:52:14", "upload_time_iso_8601": "2020-09-09T21:52:14.735022Z", "url": "https://files.pythonhosted.org/packages/19/4c/a0a829050564372446a7e8b905b6341b8ba3e8ee62362a840ab86c676195/afkak-20.9.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "bd422e60823c63ddbe98b66d41aaa915", "sha256": "9db87a4d12f4fdea0a8009917b6a044617ae825523e7cddd53654ff6faf347f8" }, "downloads": -1, "filename": "afkak-20.9.0.tar.gz", "has_sig": false, "md5_digest": "bd422e60823c63ddbe98b66d41aaa915", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 158315, "upload_time": "2020-09-09T21:52:16", "upload_time_iso_8601": "2020-09-09T21:52:16.883602Z", "url": "https://files.pythonhosted.org/packages/54/cc/761c14cfcd086e1cf87fedaeced4fce063d459094214b1604e44e3bc9a95/afkak-20.9.0.tar.gz", "yanked": false, "yanked_reason": null } ], "21.5.0": [ { "comment_text": "", "digests": { "md5": "69946f931f0738cd2f83f07b9a7c1992", "sha256": "c614fb9680d414473151c6aa6d49cf02d72a73337c7c78d0d01b29117cd6a416" }, "downloads": -1, "filename": "afkak-21.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "69946f931f0738cd2f83f07b9a7c1992", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "!=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 193342, "upload_time": "2021-05-29T05:00:37", "upload_time_iso_8601": "2021-05-29T05:00:37.852010Z", "url": "https://files.pythonhosted.org/packages/d1/27/23caf375653653b1d95a4c2a6b8f08cd6b313110d1ba909299dc8bd5ff9b/afkak-21.5.0-py3-none-any.whl", "yanked": true, "yanked_reason": "Invalid metadata" }, { "comment_text": "", "digests": { "md5": "8f5f1294ab90a9ddba7fc45e8d75bfce", "sha256": "cce784450745eb08ae3f09cd4d347997c04bc92bd65106079818ca7dd4fd2640" }, "downloads": -1, "filename": "afkak-21.5.0.tar.gz", "has_sig": false, "md5_digest": "8f5f1294ab90a9ddba7fc45e8d75bfce", "packagetype": "sdist", "python_version": "source", "requires_python": "!=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 158432, "upload_time": "2021-05-29T05:00:40", "upload_time_iso_8601": "2021-05-29T05:00:40.362244Z", "url": "https://files.pythonhosted.org/packages/81/ea/e7860864e235a21bc00978c4de06d1468e1a5f605171eda3ce55fb586202/afkak-21.5.0.tar.gz", "yanked": true, "yanked_reason": "Invalid metadata" } ], "21.5.0.post0": [ { "comment_text": "", "digests": { "md5": "16b907d6ece9321da3b5a314a5007670", "sha256": "d852e4497b233f0bebc513084d942e5765235971559eb3210b1bffd6e219a238" }, "downloads": -1, "filename": "afkak-21.5.0.post0-py3-none-any.whl", "has_sig": false, "md5_digest": "16b907d6ece9321da3b5a314a5007670", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "!=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 193441, "upload_time": "2021-05-29T05:08:44", "upload_time_iso_8601": "2021-05-29T05:08:44.118562Z", "url": "https://files.pythonhosted.org/packages/81/0b/55c21dddb003f326219f4091be3c5b6c36ccb1816d6f210ccf0366058c95/afkak-21.5.0.post0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "141138f9d0067a234ebad48c4bbd188e", "sha256": "bd30fcf8ebbbd9d4eca59e34e0af7567e57bdae02e4b67095dd2f216116c63c4" }, "downloads": -1, "filename": "afkak-21.5.0.post0.tar.gz", "has_sig": false, "md5_digest": "141138f9d0067a234ebad48c4bbd188e", "packagetype": "sdist", "python_version": "source", "requires_python": "!=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 158501, "upload_time": "2021-05-29T05:08:46", "upload_time_iso_8601": "2021-05-29T05:08:46.167343Z", "url": "https://files.pythonhosted.org/packages/31/cb/a863f8c163440d0e8ae2283ab0284a1810f5cc661283c2c507036d185e17/afkak-21.5.0.post0.tar.gz", "yanked": false, "yanked_reason": null } ], "3.0.0": [ { "comment_text": "", "digests": { "md5": "fc5228e723af4645407eb522e5998886", "sha256": "750d6599e24f05be97c9348005cf80360a7c97883288dbec4a9a395b35b5dc4f" }, "downloads": -1, "filename": "afkak-3.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fc5228e723af4645407eb522e5998886", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 142765, "upload_time": "2019-01-19T01:06:32", "upload_time_iso_8601": "2019-01-19T01:06:32.433792Z", "url": "https://files.pythonhosted.org/packages/8f/cc/8056c995028c2391d58ea8bda6587563a1849087389580531f8aa40537d5/afkak-3.0.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d811c82f9fadc45c057a95d4b5a65c24", "sha256": "9d30f4ad6dd2d8b5ed5ef7885a6d3b5d45fc493246346493ec8aa8de346f5e62" }, "downloads": -1, "filename": "afkak-3.0.0.tar.gz", "has_sig": false, "md5_digest": "d811c82f9fadc45c057a95d4b5a65c24", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 129725, "upload_time": "2019-01-19T01:06:36", "upload_time_iso_8601": "2019-01-19T01:06:36.791695Z", "url": "https://files.pythonhosted.org/packages/f8/f4/02b3e3f4a137601741c1730d899e94ed85b1194127307154cfbdae4b6c68/afkak-3.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "3.0.0.dev20181106": [ { "comment_text": "", "digests": { "md5": "28e74072629af4e6dacf06e55f4c30d5", "sha256": "33de5deb67398c61f35cc69afba1027d36367ec4f953f6e11760e0cfbc4c285d" }, "downloads": -1, "filename": "afkak-3.0.0.dev20181106-py2-none-any.whl", "has_sig": false, "md5_digest": "28e74072629af4e6dacf06e55f4c30d5", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 128720, "upload_time": "2019-01-05T22:11:10", "upload_time_iso_8601": "2019-01-05T22:11:10.272026Z", "url": "https://files.pythonhosted.org/packages/1b/fe/09d5156168beae79f8e18e7f2ec15a203e0dc46a90eef2af0d318fb831ce/afkak-3.0.0.dev20181106-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "3bab10ec029c81b4f91cf28412bad9fa", "sha256": "2ef304d7b5f58640d82b9560415c8b85f3535d03415eec78dea703762c33b8cb" }, "downloads": -1, "filename": "afkak-3.0.0.dev20181106.tar.gz", "has_sig": false, "md5_digest": "3bab10ec029c81b4f91cf28412bad9fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 115481, "upload_time": "2019-01-05T22:11:16", "upload_time_iso_8601": "2019-01-05T22:11:16.274111Z", "url": "https://files.pythonhosted.org/packages/48/b5/a683756e1686e1ed422eab4f7f0858dfc4185fdb913f088f8d9faa9e79c6/afkak-3.0.0.dev20181106.tar.gz", "yanked": false, "yanked_reason": null } ], "3.0.0.dev20181218": [ { "comment_text": "", "digests": { "md5": "2e5eefc8e31b30f77443e34c40c46da8", "sha256": "7655a3d6ea7c5b29afc368ff6064cea2b20d9950be77c51230dd3c577d183892" }, "downloads": -1, "filename": "afkak-3.0.0.dev20181218-py2-none-any.whl", "has_sig": false, "md5_digest": "2e5eefc8e31b30f77443e34c40c46da8", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 128716, "upload_time": "2019-01-05T22:11:12", "upload_time_iso_8601": "2019-01-05T22:11:12.436982Z", "url": "https://files.pythonhosted.org/packages/b7/49/3a1dca8a382bb4c021bf84e605f1b9fd55896dbfc7e1aebdc8d1a06e20a3/afkak-3.0.0.dev20181218-py2-none-any.whl", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "16b907d6ece9321da3b5a314a5007670", "sha256": "d852e4497b233f0bebc513084d942e5765235971559eb3210b1bffd6e219a238" }, "downloads": -1, "filename": "afkak-21.5.0.post0-py3-none-any.whl", "has_sig": false, "md5_digest": "16b907d6ece9321da3b5a314a5007670", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "!=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 193441, "upload_time": "2021-05-29T05:08:44", "upload_time_iso_8601": "2021-05-29T05:08:44.118562Z", "url": "https://files.pythonhosted.org/packages/81/0b/55c21dddb003f326219f4091be3c5b6c36ccb1816d6f210ccf0366058c95/afkak-21.5.0.post0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "141138f9d0067a234ebad48c4bbd188e", "sha256": "bd30fcf8ebbbd9d4eca59e34e0af7567e57bdae02e4b67095dd2f216116c63c4" }, "downloads": -1, "filename": "afkak-21.5.0.post0.tar.gz", "has_sig": false, "md5_digest": "141138f9d0067a234ebad48c4bbd188e", "packagetype": "sdist", "python_version": "source", "requires_python": "!=3.0.*, !=3.1.*, !=3.2.*, <4", "size": 158501, "upload_time": "2021-05-29T05:08:46", "upload_time_iso_8601": "2021-05-29T05:08:46.167343Z", "url": "https://files.pythonhosted.org/packages/31/cb/a863f8c163440d0e8ae2283ab0284a1810f5cc661283c2c507036d185e17/afkak-21.5.0.post0.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }