{ "info": { "author": "Guilherme Guy", "author_email": "guilhermeguy349@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Build Tools" ], "description": "# Rasa Middleware Connector\n\nAdds support for middlewares to Rasa connectors. The middlewares run before the message is sent to the Rasa agent allowing text/UserMessage preprocessing.\n\n## Why not add a message_preprocessor when sending the message to the Rasa Agent?\n\nYou can do it, and you can also add middleware support to the preprocessor.\n\nThis module tries to bring more functionality to pre-processing, allowing access to all fields in a `UserMessage` object and the possibility to cancel a message execution when preprocessing it. \n\nWhen you set up a default message preprocessor by passing it as a callable argument on the function `handle_message` (usually called `on_new_message` on the channels), and it can even call a sequence of middlewares, but it only allows access to the text field on a `UserMessage`.\n\n## Usage\n\n### Input Connector\nThe class `InputMiddlewareConnector` is an abstract class that you should inherit from, together with the desired connector. It should be the first class.\n```\nclass SocketInput(InputMiddlewareConnector, SocketIOInput):\n```\n\nYou need to implement the methods: `get_middlewares`, `get_on_new_message` and `create_user_message`. And change the connector `handle_message` route to point to the `self.handle_message`. All the following examples are extracts from a custom connector based on the `SocketIOInput`:\n\n```\ndef blueprint(self, on_new_message):\n\n # save Agent handler on object for later reference\n self.on_new_message = on_new_message\n\n # get the webhook from the super blueprint\n socketio_webhook = super().blueprint(on_new_message)\n self.sio = socketio_webhook.sio\n\n # swaps default event handler with the desired handler\n self.sio.handlers = socketio_webhook.sio.handlers\n self.sio.handlers['/'][self.user_message_evt] = self.handle_message\n\n return socketio_webhook\n```\n\n`get_on_new_message`: this method returns the Rasa Agent `handle_message` endpoint, usually it is received as the parameter `on_new_message` on the `blueprint` function of a handler. (On the example above we save this on `self.on_new_message`)\n\n\n\n`get_middlewares`: this method should return a list with your middleware objects (created inheriting from `BaseMiddleware` class) in order of execution. The Rasa Agent handler will be added after the middlewares.\n```\ndef get_middlewares(self):\n \n return [\n TextCleaner(),\n MessageCollector(self) \n ]\n```\n\n`create_user_message(self, *args, **kwargs)`: this method returns a UserMessage object containing your message.\n```\ndef create_user_message(self, sid, data) -> UserMessage:\n\n # this function receives required data to create a new\n # user message and returns it (based on the official rasa\n # implementation of the socket connector) \n \n if self.session_persistence:\n if not data.get(\"session_id\"):\n logger.warning(\n \"A message without a valid sender_id \"\n \"was received. This message will be \"\n \"ignored. Make sure to set a proper \"\n \"session id using the \"\n \"`session_request` socketIO event.\"\n )\n return\n sender_id = data[\"session_id\"]\n else:\n sender_id = sid\n\n text = data[\"message\"]\n\n output_channel = SocketIOOutput(self.sio, sender_id, self.bot_message_evt)\n message = UserMessage(\n text, output_channel, sid, input_channel=self.name()\n )\n \n return message\n```\n\n### Output Connector\n\nAn output middleware connector is very similar to the input one. You should override `get_middlewares` just like on the input. \n\nOne caveat is that OutputMiddlewareConnector should be the first on the inheritance order. Also, there is the need to provide the connector class on `get_connector_class`:\n\n```\nclass SocketOutput(OutputMiddlewareConnector, SocketIOOutput):\n...\n def get_connector_class(self):\n return SocketIOOutput\n```\n\n### Middlewares\n\nYour middlewares should respect the interface defined in the class `BaseMiddleware`: \n* `set_next(self, next, is_output)`\n* `compute(self, message: UserMessage)`\n* *`input_compute(self, message: UserMessage)`*\n* *`output_compute(self, recipient_id: Text, message: Dict[Text, Any])`*\n* Attributes: `next`, `is_output`\n\nNote the at least `input_compute` or `output_compute` should be implemented. If you will only use the middleware as an input middleware you can only implement `input_compute`, and if its an only output middleware only `output_compute` needs to be implemented.\n\n`set_next`: sets where your middleware should send the message after you are done processing it.\n\n`compute(self, message: UserMessage)`: starts the processing of your message. Sends it to the appropriate function (`input_compute` or `output_compute`).\n\n`input_compute` or `output_compute`: message processing. After processing the message you should call:\n* `await self.next(message)` if input\n* `await self.next(recipient_id, message)` if output\n\nExample:\n```\nasync def input_compute(self, message: UserMessage):\n\n logger.info(\"Middleware TextCleaner received message from {}\".format(message.sender_id))\n \n message.text = self.clean_message(message.text)\n await self.next(message)\n\n# output_compute not implemented since this is an input only middleware\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/guilherme1guy/rasa_middleware_connector", "keywords": "rasa,rasa core,rasa channels", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "rasa-middleware-connector", "package_url": "https://pypi.org/project/rasa-middleware-connector/", "platform": "", "project_url": "https://pypi.org/project/rasa-middleware-connector/", "project_urls": { "Homepage": "https://github.com/guilherme1guy/rasa_middleware_connector" }, "release_url": "https://pypi.org/project/rasa-middleware-connector/0.2.1/", "requires_dist": null, "requires_python": "", "summary": "Adds middleware support for rasa connectors", "version": "0.2.1", "yanked": false, "yanked_reason": null }, "last_serial": 6386916, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "c0d4688fe8dff6ab7a160f3c16f9d987", "sha256": "beeb864c593a76d70476f578ae853631a7cf6cc56eb25c4637b579e1cb5f4930" }, "downloads": -1, "filename": "rasa_middleware_connector-0.0.1.tar.gz", "has_sig": false, "md5_digest": "c0d4688fe8dff6ab7a160f3c16f9d987", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1804, "upload_time": "2019-10-11T13:07:09", "upload_time_iso_8601": "2019-10-11T13:07:09.498149Z", "url": "https://files.pythonhosted.org/packages/bb/c6/1133537c3bcf6e882e2dbfd3fef24c330b5ed70b1081bc38c9f068eafe2d/rasa_middleware_connector-0.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "9d4363131b00238b329592b2d22b6f0d", "sha256": "6eab707d9d6a0b310e8165b3d9aead2665d3f27a22352556ea466dddb3edec45" }, "downloads": -1, "filename": "rasa_middleware_connector-0.0.2.tar.gz", "has_sig": false, "md5_digest": "9d4363131b00238b329592b2d22b6f0d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1813, "upload_time": "2019-10-15T19:52:58", "upload_time_iso_8601": "2019-10-15T19:52:58.727666Z", "url": "https://files.pythonhosted.org/packages/75/44/198d5567197c81899eaba9bca2168ceae876cbb1a1d9fc99804e4eee516d/rasa_middleware_connector-0.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "07cdde842f985578717889e8671e6da6", "sha256": "1180d3683d0281d798413039219ebbadb55bc6fd34d4dbf48685f9de35a67fda" }, "downloads": -1, "filename": "rasa_middleware_connector-0.0.3.tar.gz", "has_sig": false, "md5_digest": "07cdde842f985578717889e8671e6da6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1817, "upload_time": "2019-10-15T20:29:57", "upload_time_iso_8601": "2019-10-15T20:29:57.722779Z", "url": "https://files.pythonhosted.org/packages/7e/80/347a4a83d85e3afbb1afb8ee09e54f79b6fe35cd6aaf2d554637aba8adc9/rasa_middleware_connector-0.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "00782c93f2608efb2c2c793f195dab04", "sha256": "b07d73ec6debd9afa7ebf44759af85359f8de045c062f11df3b1b1abb4654d51" }, "downloads": -1, "filename": "rasa_middleware_connector-0.0.4.tar.gz", "has_sig": false, "md5_digest": "00782c93f2608efb2c2c793f195dab04", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1816, "upload_time": "2019-10-15T20:40:13", "upload_time_iso_8601": "2019-10-15T20:40:13.326440Z", "url": "https://files.pythonhosted.org/packages/22/4d/78c53180ed23a2ab3b75300b84856d7cc33199be04b7fe46a1b155dc3f44/rasa_middleware_connector-0.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "e1d491c2ad237f04db28bbd597251535", "sha256": "01056e6280b34a35970cd15402c83a4524f7641b1759a3d1cd14605098912194" }, "downloads": -1, "filename": "rasa_middleware_connector-0.0.5.tar.gz", "has_sig": false, "md5_digest": "e1d491c2ad237f04db28bbd597251535", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1813, "upload_time": "2019-10-15T20:56:36", "upload_time_iso_8601": "2019-10-15T20:56:36.402690Z", "url": "https://files.pythonhosted.org/packages/ae/30/3e0b34267b4df916be8fb4fe3744d8947599dce4a2de1f0225432aea55eb/rasa_middleware_connector-0.0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "0376fbe7707fda88b484121e8baf5a24", "sha256": "ebbefc429339c82e49ed8eaf19b0ad6dddbe585fe6cb9422bda6a705ce08e4d0" }, "downloads": -1, "filename": "rasa_middleware_connector-0.0.7.tar.gz", "has_sig": false, "md5_digest": "0376fbe7707fda88b484121e8baf5a24", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1819, "upload_time": "2019-10-16T11:34:41", "upload_time_iso_8601": "2019-10-16T11:34:41.355795Z", "url": "https://files.pythonhosted.org/packages/63/eb/881d6e4573b4aef87b88bc6e0ee5f1c42ebfb0f6ed939029165d8b1c7a89/rasa_middleware_connector-0.0.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "0285066384f24cc6a40fad732e3ffeaf", "sha256": "a96b79b4b9a69183c4a4edc3c1cce23837be214d7d5b348879db4a74a5bccb2e" }, "downloads": -1, "filename": "rasa_middleware_connector-0.0.8.tar.gz", "has_sig": false, "md5_digest": "0285066384f24cc6a40fad732e3ffeaf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7359, "upload_time": "2019-10-17T20:44:38", "upload_time_iso_8601": "2019-10-17T20:44:38.430876Z", "url": "https://files.pythonhosted.org/packages/62/4f/61fb561625fbd7da4f41201576a917d2ba914de8f657fc2498e43c10603f/rasa_middleware_connector-0.0.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "d1e1c71907705bbd613f422466b71a3b", "sha256": "4304118ca3ad2db9c3b93fb7386cb02614f7c3a298f10c13433c5c240ba6e7df" }, "downloads": -1, "filename": "rasa_middleware_connector-0.1.0.tar.gz", "has_sig": false, "md5_digest": "d1e1c71907705bbd613f422466b71a3b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8763, "upload_time": "2019-10-21T15:28:11", "upload_time_iso_8601": "2019-10-21T15:28:11.644434Z", "url": "https://files.pythonhosted.org/packages/72/2b/e6deeb9c757a964131822807759405c8abd90956335184bc0d435b0d20a0/rasa_middleware_connector-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "1915aa822a2c6dc3c19cb714c5a8780c", "sha256": "bf7c1aec706db6357c792379a62814bcc78ee6a33cd61cc7d301e6b135fdae93" }, "downloads": -1, "filename": "rasa_middleware_connector-0.1.1.tar.gz", "has_sig": false, "md5_digest": "1915aa822a2c6dc3c19cb714c5a8780c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8763, "upload_time": "2019-10-21T15:49:18", "upload_time_iso_8601": "2019-10-21T15:49:18.531954Z", "url": "https://files.pythonhosted.org/packages/64/2e/35ed910953c7fd1780015c4ef2baa092a63a7a5481008cb4af15b2dc673c/rasa_middleware_connector-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "d3a13de678dc2d21d57985ba4772a0de", "sha256": "937a54b2d89939b167f3fb436f3f4bebeb5845a72690b18e6a4049ed8ace57c4" }, "downloads": -1, "filename": "rasa_middleware_connector-0.1.2.tar.gz", "has_sig": false, "md5_digest": "d3a13de678dc2d21d57985ba4772a0de", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8764, "upload_time": "2019-10-21T16:06:19", "upload_time_iso_8601": "2019-10-21T16:06:19.941777Z", "url": "https://files.pythonhosted.org/packages/de/43/4adc1884e844300283a4d326e20c72bfa882062a135e1a96926e54863e42/rasa_middleware_connector-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "21cfcadbfcd8324669ac98d1026ee502", "sha256": "f8bc489b5063709f9cc988122a455fbb1ca6826f9c0815fbe1b5792d01c9aabe" }, "downloads": -1, "filename": "rasa_middleware_connector-0.1.3-py3.7.egg", "has_sig": false, "md5_digest": "21cfcadbfcd8324669ac98d1026ee502", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 9555, "upload_time": "2019-10-22T21:07:07", "upload_time_iso_8601": "2019-10-22T21:07:07.527461Z", "url": "https://files.pythonhosted.org/packages/69/68/65a750af675fbf762948ae5a7ff7f55dc8c9d0736db571a30a48abb02574/rasa_middleware_connector-0.1.3-py3.7.egg", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "da2c5822737b5aa20d69fb6fc2b8f79c", "sha256": "e01395049cc6b1b95e09141c5c4cd47a4d44ce2c612ad1652e1a49001fa8ccb4" }, "downloads": -1, "filename": "rasa_middleware_connector-0.1.3.tar.gz", "has_sig": false, "md5_digest": "da2c5822737b5aa20d69fb6fc2b8f79c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8774, "upload_time": "2019-10-22T17:52:38", "upload_time_iso_8601": "2019-10-22T17:52:38.223784Z", "url": "https://files.pythonhosted.org/packages/38/bb/c2e6ae03159a3c6d7e6b8fba082a971eb37d32a13666f721148523bcbd85/rasa_middleware_connector-0.1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "a497222432fa64ce12bb8feb5ead52af", "sha256": "a12bd2321f58220e77b8942879e9cd6fed9bb73d6ff0be3c92f7c18752fe42b6" }, "downloads": -1, "filename": "rasa_middleware_connector-0.1.4.tar.gz", "has_sig": false, "md5_digest": "a497222432fa64ce12bb8feb5ead52af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8819, "upload_time": "2019-10-22T21:07:09", "upload_time_iso_8601": "2019-10-22T21:07:09.527918Z", "url": "https://files.pythonhosted.org/packages/51/af/3bfd2360a6f1d6e9029d296d31cd67df5450042333148ca54f8d7b200309/rasa_middleware_connector-0.1.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "b70b1581ffb45faea8cce59c87d17a13", "sha256": "b7311dd0c2e45e8cb26a6f1b90bb6edb89ee96eb0feebaf5d208532a767b25bd" }, "downloads": -1, "filename": "rasa_middleware_connector-0.1.5.tar.gz", "has_sig": false, "md5_digest": "b70b1581ffb45faea8cce59c87d17a13", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8837, "upload_time": "2019-10-23T11:58:43", "upload_time_iso_8601": "2019-10-23T11:58:43.494692Z", "url": "https://files.pythonhosted.org/packages/9d/85/810b6d83a5045836725b060b1b15fd5f4d7f12ec49d679405486db5aeecd/rasa_middleware_connector-0.1.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "25439f6a8b7c85788f7b9001521c978d", "sha256": "32a1baa3c1388e453703f5aaaa4ac5f550c95f5b657cc5ccc39ace61e34f3acc" }, "downloads": -1, "filename": "rasa_middleware_connector-0.1.6.tar.gz", "has_sig": false, "md5_digest": "25439f6a8b7c85788f7b9001521c978d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8826, "upload_time": "2019-10-23T12:00:59", "upload_time_iso_8601": "2019-10-23T12:00:59.098679Z", "url": "https://files.pythonhosted.org/packages/3d/55/6972d3295023501b0adef1b13d8818cfd01f0d034e57ac49c5ce9b8477f1/rasa_middleware_connector-0.1.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "ab06f3810bc46113dbee5cdecfaf44b0", "sha256": "e4d530a10abc675c4ac205b3ff79fe73a733ea03485789affacefda4321ee00a" }, "downloads": -1, "filename": "rasa_middleware_connector-0.2.0.tar.gz", "has_sig": false, "md5_digest": "ab06f3810bc46113dbee5cdecfaf44b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8854, "upload_time": "2019-10-23T13:51:24", "upload_time_iso_8601": "2019-10-23T13:51:24.523689Z", "url": "https://files.pythonhosted.org/packages/2c/60/58e7109baa9dad431d3939b75424649e1ab6257b71f1d4d8691bd4a628df/rasa_middleware_connector-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "ae4f7aa1acdb8acc15d373f9cb845cf5", "sha256": "c355c2eb511af6a15e933ac951a8f4a4515595191fa759168aa0c73c335962c1" }, "downloads": -1, "filename": "rasa_middleware_connector-0.2.1.tar.gz", "has_sig": false, "md5_digest": "ae4f7aa1acdb8acc15d373f9cb845cf5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5439, "upload_time": "2020-01-02T16:57:08", "upload_time_iso_8601": "2020-01-02T16:57:08.662786Z", "url": "https://files.pythonhosted.org/packages/ff/1c/e5fcfc5559b150271449321ab488da17c48af65d935ea7e5541d87c9f283/rasa_middleware_connector-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ae4f7aa1acdb8acc15d373f9cb845cf5", "sha256": "c355c2eb511af6a15e933ac951a8f4a4515595191fa759168aa0c73c335962c1" }, "downloads": -1, "filename": "rasa_middleware_connector-0.2.1.tar.gz", "has_sig": false, "md5_digest": "ae4f7aa1acdb8acc15d373f9cb845cf5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5439, "upload_time": "2020-01-02T16:57:08", "upload_time_iso_8601": "2020-01-02T16:57:08.662786Z", "url": "https://files.pythonhosted.org/packages/ff/1c/e5fcfc5559b150271449321ab488da17c48af65d935ea7e5541d87c9f283/rasa_middleware_connector-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }