{ "info": { "author": "Carta, Inc.", "author_email": "engineering@carta.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Topic :: Software Development :: Libraries" ], "description": "# Franz\n\nA lite wrapper around [Kafka](https://kafka.apache.org/) and [RabbitMQ](https://www.rabbitmq.com/).\n\n# Usage\n\n## Installation\n- `pip install franz` (recommended)\n- `pip -e git+git@github.com:eshares/franz.git@master#egg=franz`\n - Change `@master` to a version or commit if required.\n \n## RabbitMQ\n### Sending a message\n```python\nimport random\nimport time\n\nimport franz\n\n\nclass FranzData(franz.FranzEvent):\n def serialize(self):\n return {'data': time.time()}\n\n\nwith franz.RabbitProducer(exchange='topic_link') as p:\n while True:\n key = random.choice(['hello.world', 'hello.bob'])\n p.send_message(key, FranzData())\n time.sleep(1)\n```\n\n### Consuming messages\n```python\nimport franz\n\ndef callback(ch, method, properties, body):\n print('[+] {} from {}'.format(body, method.routing_key))\n\nwith franz.RabbitConsumer('hello.*', exchange='topic_link') as c:\n c.consume_messages(callback)\n```\n\n\n## Kafka\n### Sending a message\n```python\nimport franz\nfrom myapp.models import SomeModel # SomeModel must inherit `franz.FranzEvent`\n\ninstance = SomeModel.objects.get(pk=1)\nproducer = franz.KafkaProducer()\nproducer.send_message('TopicA', instance)\n```\n\n### Consuming messages\n```python\nimport franz\n\nconsumer = franz.KafkaConsumer('TopicA')\nfor message in consumer:\n print(message.value)\n```\n\n### Kafka/Docker Resources\n\n- [Docker image](https://github.com/spotify/docker-kafka)\n- [Helpful article](https://howtoprogram.xyz/2016/07/21/using-apache-kafka-docker/)\n- Create topic\n```\n./kafka-topics.sh --create --topic test --replication-factor 1 --partitions 1 --zookeeper 0.0.0.0:2181\n```\n- Consuming\n```\n./kafka-console-consumer.sh --topic test --from-beginning --zookeeper 0.0.0.0:2181\n```\n- Producing\n```\n./kafka-console-producer.sh --topic test --broker-list 0.0.0.0:9092\n```\n\n# Testing\n```bash\n# setup versions\npyenv install 3.5.3\npyenv install 3.6.3\npyenv install 3.7.0\npyenv virtualenv franz 3.5.3\npyenv local franz 3.5.3 3.6.3 3.7.0\npip install -r requirements-dev.txt\n\n# run tests (python 3.5, 3.6, 3.7)\ntox\n```\n", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/eshares/franz/tarball/0.0.11", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/eshares/franz", "keywords": "microservices broker event kafka rabbitmq", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "franz", "package_url": "https://pypi.org/project/franz/", "platform": "", "project_url": "https://pypi.org/project/franz/", "project_urls": { "Download": "https://github.com/eshares/franz/tarball/0.0.11", "Homepage": "https://github.com/eshares/franz" }, "release_url": "https://pypi.org/project/franz/0.0.11/", "requires_dist": null, "requires_python": "", "summary": "Event broker built on top of kafka and rabbitmq; used to handle micro services message exchange.", "version": "0.0.11" }, "last_serial": 4052200, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "b099098c999c68032e7412d6d55eb8a3", "sha256": "4c77a3727e38f805322e4eac144517ff9a79c1722055306dcdb9f11d010a7cda" }, "downloads": -1, "filename": "franz-0.0.1.tar.gz", "has_sig": false, "md5_digest": "b099098c999c68032e7412d6d55eb8a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2810, "upload_time": "2017-11-30T19:25:11", "url": "https://files.pythonhosted.org/packages/2f/79/20bbd51548144cf877cc2baaa2416853619f055df42b6e19a9061b3f68f4/franz-0.0.1.tar.gz" } ], "0.0.10": [ { "comment_text": "", "digests": { "md5": "260e35649fe45c2bf01f86743318a00c", "sha256": "c84d4f6f533155c0dc5ca7cbf8fba226d31f7c49c6cbbed0de93e77b0b63480d" }, "downloads": -1, "filename": "franz-0.0.10.tar.gz", "has_sig": false, "md5_digest": "260e35649fe45c2bf01f86743318a00c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6558, "upload_time": "2017-12-08T01:15:28", "url": "https://files.pythonhosted.org/packages/77/06/ccaf766194f3edb20bb285688e758d8be67d645bb5a570447e62dada7e33/franz-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "33bf0648155c8654a1b58cbd0d96b911", "sha256": "5620600b411103b0c79526336b8eaef773b5eb1d8e9e0fb4bdc01ebd6bf9c2a7" }, "downloads": -1, "filename": "franz-0.0.11.tar.gz", "has_sig": false, "md5_digest": "33bf0648155c8654a1b58cbd0d96b911", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6544, "upload_time": "2018-07-11T21:02:33", "url": "https://files.pythonhosted.org/packages/aa/d1/ab06bf664b057f112579ca80c683936785a76870d378033ae5a0f2bfbace/franz-0.0.11.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "fda332d137dbe57965b83f8cff45a0da", "sha256": "a13b9b991a5a7c49612a694ebd7153b9fd464f00c51ad258d25609733e948d6e" }, "downloads": -1, "filename": "franz-0.0.2.tar.gz", "has_sig": false, "md5_digest": "fda332d137dbe57965b83f8cff45a0da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2820, "upload_time": "2017-11-30T19:42:13", "url": "https://files.pythonhosted.org/packages/5d/ed/e39d0f782981fd8b04a62c66fa6a412220cf0fef58042e94dc7558d9f0e4/franz-0.0.2.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "ae84f27f22810519c6cbbd6e2097f417", "sha256": "a0884123ce4a5b1b481f5e50bb61f3cee37213fed3983aa189ac221c4d5a45f9" }, "downloads": -1, "filename": "franz-0.0.7.tar.gz", "has_sig": false, "md5_digest": "ae84f27f22810519c6cbbd6e2097f417", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5996, "upload_time": "2017-11-30T20:15:03", "url": "https://files.pythonhosted.org/packages/01/f4/2d1856000cab1deec978644e78c15da74300ae42a0ead8ba4aa04e159b14/franz-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "710cec75eb8596972c2e049706a11c96", "sha256": "922e2eccd2fc47966c0dc1a301c47d9fd7abf43560e3963119e889ac0c928fc9" }, "downloads": -1, "filename": "franz-0.0.8.tar.gz", "has_sig": false, "md5_digest": "710cec75eb8596972c2e049706a11c96", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6434, "upload_time": "2017-12-04T17:33:19", "url": "https://files.pythonhosted.org/packages/bc/5a/4582d78b3123e7a7e370be8b46ac3ba8384925a11912a1e53fe238626c1a/franz-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "2a1772e63ce00bb60daac459e7e3140c", "sha256": "654f5c57c3df2c80991454c2e1853894f6c2d064faa06c80dbb960965ef3d5b3" }, "downloads": -1, "filename": "franz-0.0.9.tar.gz", "has_sig": false, "md5_digest": "2a1772e63ce00bb60daac459e7e3140c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6520, "upload_time": "2017-12-07T22:35:10", "url": "https://files.pythonhosted.org/packages/b7/38/b87e40f6d289403bcf47d812499f361c11e19ac390a0bc211f308a23dc5f/franz-0.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "33bf0648155c8654a1b58cbd0d96b911", "sha256": "5620600b411103b0c79526336b8eaef773b5eb1d8e9e0fb4bdc01ebd6bf9c2a7" }, "downloads": -1, "filename": "franz-0.0.11.tar.gz", "has_sig": false, "md5_digest": "33bf0648155c8654a1b58cbd0d96b911", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6544, "upload_time": "2018-07-11T21:02:33", "url": "https://files.pythonhosted.org/packages/aa/d1/ab06bf664b057f112579ca80c683936785a76870d378033ae5a0f2bfbace/franz-0.0.11.tar.gz" } ] }