{ "info": { "author": "21 Buttons APP S.L.", "author_email": "jairo@21buttons.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 3.7" ], "description": "# Aiorazemax\n[![Build Status](https://travis-ci.com/21Buttons/aiorazemax.svg?branch=master)](https://travis-ci.com/21Buttons/aiorazemax)\n\n\u2709\ufe0f Async communications using AWS SNS + SQS for Python services \u2728\n\n## Documentation\n\n### In-Memory event manager\n\n_Show me the code_\n\n```python\nfrom aiorazemax.event_manager import EventManager\n\n\nclass NorthKoreaThreatCreatedEvent:\n def __init__(self, id, target):\n self.id = id\n self.target = target\n\n\nasync def trump_subscriber(event: NorthKoreaThreatCreatedEvent):\n print(f\"North korea will attack us or {event.target}!\")\n\n\nEventManager.subscribe(trump_subscriber, NorthKoreaThreatCreatedEvent)\nawait EventManager.trigger(NorthKoreaThreatCreatedEvent(0, \"Mexico\"))\n```\n\nResult:\n```\nNorth korea will attack us or Mexico!\n```\n\n### Trigger subscribers from SQS\n\n#### Preconditions\n\nSQS queue has to be subscribed to SNS topic before running the consumer\n\n#### Code\n\n```python\nimport asyncio\n\nfrom aiorazemax.consumers import MessageConsumer\nfrom aiorazemax.drivers import SQSDriver\nfrom aiorazemax.event_manager import EventManager\nfrom aiorazemax.publisher import SNSMessagePublisher\n\n\naws_settings = {\n 'region_name': \"\",\n 'aws_access_key_id': \"\",\n 'aws_secret_access_key': \"\",\n 'endpoint_url': \"\"\n}\n\n\nclass NorthKoreaThreatCreatedEvent:\n def __init__(self, id, target):\n self.id = id\n self.target = target\n\n\ndef kp_message_to_event(event_message):\n message = event_message.body\n # Highly recommended to use Marshmallow to validate\n return NorthKoreaThreatCreatedEvent(message['body']['id'], message['body']['target_name'])\n\n\nmapper = {\n 'KPThreatCreated': kp_message_to_event\n}\n\n\nasync def trump_subscriber(event: NorthKoreaThreatCreatedEvent):\n print(f\"North korea will attack us or {event.target}!\")\n\n\nasync def main():\n EventManager.subscribe(trump_subscriber, NorthKoreaThreatCreatedEvent)\n\n queue_driver = await SQSDriver.build('korea-threats-queue', aws_settings)\n consumer = MessageConsumer(mapper, EventManager, queue_driver)\n\n publisher = await SNSMessagePublisher.build('korea-topic', aws_settings)\n await publisher.publish('KPThreatCreated', {'id': 21, 'target_name': 'Portugal'})\n\n await consumer.process_message()\n\n await queue_driver.close()\n await publisher.close()\n\n\nif __name__ == '__main__':\n asyncio.run(main())\n```\n\nResult:\n\n```\nNorth korea will attack us or Portugal!\n```\n\n## Installing\n\n`pip install aiorazemax`\n\n\n## Running the tests\n\nTo run end to end tests do:\n```\nmake unit-tests\nmake integration-tests\n```\n\n## Authors\n\n* Jairo Vadillo ([@jairovadillo](https://github.com/jairovadillo))\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details", "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/21buttons/aiorazemax", "keywords": "", "license": "Apache License 2.0", "maintainer": "", "maintainer_email": "", "name": "aiorazemax", "package_url": "https://pypi.org/project/aiorazemax/", "platform": "", "project_url": "https://pypi.org/project/aiorazemax/", "project_urls": { "Homepage": "https://github.com/21buttons/aiorazemax" }, "release_url": "https://pypi.org/project/aiorazemax/0.0.1/", "requires_dist": null, "requires_python": ">=3.7.0", "summary": "SNS + SQS Communications made easy", "version": "0.0.1" }, "last_serial": 5655716, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "c6cf8c40dcdf58f932d81c2004630070", "sha256": "51ea96fb4fcfaa1d174f617184480e173ddbe3ae67a08aa38a0126b88e4a8880" }, "downloads": -1, "filename": "aiorazemax-0.0.1.tar.gz", "has_sig": false, "md5_digest": "c6cf8c40dcdf58f932d81c2004630070", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7.0", "size": 4828, "upload_time": "2019-08-09T13:29:41", "url": "https://files.pythonhosted.org/packages/97/73/92dc8726cf2ef95307a1dff73647fd0cb7b2f387aace19ae5b43650a102c/aiorazemax-0.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c6cf8c40dcdf58f932d81c2004630070", "sha256": "51ea96fb4fcfaa1d174f617184480e173ddbe3ae67a08aa38a0126b88e4a8880" }, "downloads": -1, "filename": "aiorazemax-0.0.1.tar.gz", "has_sig": false, "md5_digest": "c6cf8c40dcdf58f932d81c2004630070", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7.0", "size": 4828, "upload_time": "2019-08-09T13:29:41", "url": "https://files.pythonhosted.org/packages/97/73/92dc8726cf2ef95307a1dff73647fd0cb7b2f387aace19ae5b43650a102c/aiorazemax-0.0.1.tar.gz" } ] }