{ "info": { "author": "Todd Roberts", "author_email": "todd@toddrob.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3" ], "description": "# Webhook Listener\nVery basic webserver module to listen for webhooks and forward requests to predefined functions.\n\nAuthor: Todd Roberts\n\nhttps://pypi.org/project/webhook_listener/\n\nhttps://github.com/toddrob99/Webhooks\n\n## Install\n\nInstall from PyPI using pip\n\n`pip install webhook_listener`\n\n## Use\n\n* Define a function to process requests\n * `request` parameter will be a cherrypy request object\n * `*args` parameter will be a tuple of URL path components\n * `**kwargs` parameter will be a dictionary of URL parameters\n * Get the body of a `POST` request from `request.body.read` passing the length of `request.headers['Content-Length']`: `request.body.read(int(request.headers['Content-Length'])) if int(request.headers.get('Content-Length',0)) > 0 else ''`\n * Note: The body will be a byte array, and not a string. You may need to decode it to a string. For example:\n ```\n import json\n body_raw = request.body.read(int(request.headers['Content-Length'])) if int(request.headers.get('Content-Length',0)) > 0 else '{}'\n body = json.loads(body_raw.decode('utf-8'))\n ```\n* Include webhook-listener in your project\n* Create an instance of the webhook_listener.Listener class\n * handlers = Dictionary of functions/callables for each supported HTTP method. (Example: {'POST':process_post_request, 'GET':process_get_request})\n * port = Port for the web server to listen on (default: 8090)\n * host = Host for the web server to listen on (default: '0.0.0.0')\n * threadPool = Number of worker threads for the web server (default: 10)\n * logScreen = Setting for cherrypy to log to screen (default: False)\n * autoReload = Setting for cherrypy to auto reload when python files are changed (default: False)\n* Start the Listener\n* Keep your application running so the Listener can run in a separate thread\n\n## Example\n\n import time\n import webhook_listener\n\n def process_post_request(request, *args, **kwargs):\n print('Received request:\\n' + \n 'Method: {}\\n'.format(request.method) +\n 'Headers: {}\\n'.format(request.headers) + \n 'Args (url path): {}\\n'.format(args) + \n 'Keyword Args (url parameters): {}\\n'.format(kwargs) + \n 'Body: {}'.format(request.body.read(int(request.headers['Content-Length'])) if int(request.headers.get('Content-Length',0)) > 0 else '')\n )\n\n # Process the request!\n # ...\n\n return\n\n webhooks = webhook_listener.Listener(handlers={'POST':process_post_request})\n webhooks.start()\n\n while True:\n print('Still alive...')\n time.sleep(300)\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/toddrob99/Webhooks", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "Webhook-Listener", "package_url": "https://pypi.org/project/Webhook-Listener/", "platform": "", "project_url": "https://pypi.org/project/Webhook-Listener/", "project_urls": { "Homepage": "https://github.com/toddrob99/Webhooks" }, "release_url": "https://pypi.org/project/Webhook-Listener/0.0.1/", "requires_dist": [ "cherrypy" ], "requires_python": "", "summary": "Very basic webserver module to listen for webhooks and forward requests to predefined functions.", "version": "0.0.1" }, "last_serial": 6001703, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "b3bc3b75b248a0d9679bf4f64eca2ccf", "sha256": "8a4a9152a5a2ca106ee65254fda3bc8293a56fd407e07910a869d4bf5d6229c3" }, "downloads": -1, "filename": "Webhook_Listener-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b3bc3b75b248a0d9679bf4f64eca2ccf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4344, "upload_time": "2019-10-20T02:42:11", "url": "https://files.pythonhosted.org/packages/d8/31/3661b23149f13743fd87cce636663c89bbf1f281d1144c4cb81223e51658/Webhook_Listener-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f3c118ac86e27fcd6003f8235aa6cc1e", "sha256": "6fb89b5578b5c08bf420298fd3a536eb610006d08080b1f3d5452ec1c1640790" }, "downloads": -1, "filename": "Webhook_Listener-0.0.1.tar.gz", "has_sig": false, "md5_digest": "f3c118ac86e27fcd6003f8235aa6cc1e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3235, "upload_time": "2019-10-20T02:42:13", "url": "https://files.pythonhosted.org/packages/0a/b7/4473aea785eacd2ffd105e9fee4ef7c567a192c2f099005166866dd144d3/Webhook_Listener-0.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b3bc3b75b248a0d9679bf4f64eca2ccf", "sha256": "8a4a9152a5a2ca106ee65254fda3bc8293a56fd407e07910a869d4bf5d6229c3" }, "downloads": -1, "filename": "Webhook_Listener-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b3bc3b75b248a0d9679bf4f64eca2ccf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4344, "upload_time": "2019-10-20T02:42:11", "url": "https://files.pythonhosted.org/packages/d8/31/3661b23149f13743fd87cce636663c89bbf1f281d1144c4cb81223e51658/Webhook_Listener-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f3c118ac86e27fcd6003f8235aa6cc1e", "sha256": "6fb89b5578b5c08bf420298fd3a536eb610006d08080b1f3d5452ec1c1640790" }, "downloads": -1, "filename": "Webhook_Listener-0.0.1.tar.gz", "has_sig": false, "md5_digest": "f3c118ac86e27fcd6003f8235aa6cc1e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3235, "upload_time": "2019-10-20T02:42:13", "url": "https://files.pythonhosted.org/packages/0a/b7/4473aea785eacd2ffd105e9fee4ef7c567a192c2f099005166866dd144d3/Webhook_Listener-0.0.1.tar.gz" } ] }