{ "info": { "author": "Niels van Huijstee", "author_email": "niels@huijs.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Topic :: Communications :: Chat", "Topic :: Office/Business" ], "description": "# Slackers\n\nSlack webhooks API served by FastAPI\n\n## What is Slackers\nSlackers is a [FastAPI](https://fastapi.tiangolo.com) implementation to handle Slack interactions and events.\nIt serves endpoints to receive [slash commands](https://api.slack.com/interactivity/slash-commands),\n[app actions](https://api.slack.com/interactivity/actions), [interactive components](https://api.slack.com/interactivity/components). \nIt also listens for events sent to the Slack Events API [Slack Events](https://api.slack.com/events-api). \n\n## Installation\nYou can install Slackers with pip\n`$ pip install slackers`\n\n## Configuration\n### `SLACK_SIGNING_SECRET`\nYou must configure the slack signing secret. This will be used to \nverify the incoming requests signature. \n`$ export SLACK_SIGNING_SECRET=your_slack_signing_secret`\n\n## Example usage\nSlackers will listen for activity from the Events API on `/events`, for\ninteractive components on `/actions` and for slash commands on `/commands`.\nWhen an interaction is received, it will emit an event. You can listen\nfor these events as shown in the following examples.\n\nOn receiving a request, Slackers will emit an event which you can handle yourself.\nSlackers will also respond to Slack with an (empty) http 200 response telling Slack\nall is well received.\n\n### Starting the server\nAs said, Slackers uses the excellent FastAPI to serve it's endpoints. Since you're here, \nI'm assuming you know what FastAPI is, but if you don't, you can learn all about \nhow that works with [this tutorial](https://fastapi.tiangolo.com/tutorial/). \n\nSlackers offers you a router which you can include in your own FastAPI.\n```python\nfrom fastapi import FastAPI\nfrom slackers.server import router\n\napp = FastAPI()\napp.include_router(router)\n\n# Optionally you can use a prefix\napp.include_router(router, prefix='/slack')\n```\n\n### Events\nOnce your server is running, the events endpoint is setup at `/events`, or if you use\nthe prefix as shown above, on `/slack/events`.\n\n#### Accepting the challenge\nWhen setting up Slack to [send events](https://api.slack.com/events-api#subscribing_to_event_types),\nit will first send a challenge to verify your endpoint. Slackers detects when a challenge is sent.\nYou can simply start our api and Slackers will meet the challenge automatically.\n\n#### Responding to events\nOn receiving an event, Slackers will emit a python event, which you can act upon as shown below.\n```python\nimport logging\nfrom slackers.hooks import events\n\nlog = logging.getLogger(__name__)\n\n@events.on(\"app_mention\")\ndef handle_mention(payload):\n log.info(\"App was mentioned.\")\n log.debug(payload)\n```\n\n\n### Actions\nOnce your server is running, the actions endpoint is setup at `/actions`, or if you use\nthe prefix as shown above, on `/slack/actions`.\n\n#### Responding to actions\nOn receiving an action, Slackers will emit a python event, which you can listen for as \nshown below. You can listen for the action type, or more specifically for the action id\nor callback id linked to the action.\n```python\nimport logging\nfrom slackers.hooks import actions\n\nlog = logging.getLogger(__name__)\n\n# Listening for the action type.\n@actions.on(\"block_actions\")\ndef handle_action(payload):\n log.info(\"Action started.\")\n log.debug(payload)\n\n# Listen for an action by it's action_id\n@actions.on(\"block_actions:your_action_id\")\ndef handle_action_by_id(payload):\n log.info(\"Action started.\")\n log.debug(payload)\n\n# Listen for an action by it's callback_id\n@actions.on(\"block_actions:your_callback_id\")\ndef handle_action_by_callback_id(payload):\n log.info(f\"Action started.\")\n log.debug(payload)\n```\n\n#### Interactive messages\nInteractive message actions do not have an `action_id`. They do have a `name` and a `type`. \nTo act upon interactive messages, you can listen for the action type, `interactive_message`\nas wel as the combination of the `interactive_message` and `name`, `type` or both.\n```python\nimport logging\nfrom slackers.hooks import actions\n\nlog = logging.getLogger(__name__)\n\n# Listening for the action type.\n@actions.on(\"interactive_message\")\ndef handle_action(payload):\n log.info(\"Action started.\")\n log.debug(payload)\n\n# Listen for an action by it's name\n@actions.on(\"interactive_message:action_name\")\ndef handle_action_by_id(payload):\n log.info(\"Action started.\")\n log.debug(payload)\n\n# Listen for an action by it's type\n@actions.on(\"interactive_message:action_type\")\ndef handle_action_by_callback_id(payload):\n log.info(f\"Action started.\")\n log.debug(payload)\n\n# Listen for an action by it's name and type\n@actions.on(\"interactive_message:action_name:action_type\")\ndef handle_action_by_callback_id(payload):\n log.info(f\"Action started.\")\n log.debug(payload)\n```\n\n#### Custom responses\nSlackers tries to be fast to respond to Slack. The events you are listening for with the\nlikes of `@actions.on(...)` are scheduled as an async task in a fire and forget fashion.\nAfter scheduling these events, Slackers will by default return an empty 200 response which\nmight happen before the events are handled.\n\nIn some cases you might want to act on the payload and return a custom response to Slack.\nFor this, you can use the slackers `responder` decorator to define your custom handler\nfunction. This function is then used as a callback instead of returning the default response.\nYou must ensure your custom handler returns a `starlette.responses.Response` or one of it's \nsubclasses. You must furthermore ensure that there is only one responder responding to your\nSlack request.\n\nPlease note that the events are also emitted, so you could have both `@actions.on(\"block_action:xyz\")`\nand `@responder(\"block_action:xyz\")`. Just keep in mind that the event emissions are async and are\nnot awaited. In other words, Slackers doesn't ensure that the response (whether your custom response\nor the default) is returned before or after the events are emitted.\n\n```python\nfrom starlette.responses import JSONResponse\nfrom slackers.hooks import responder\n\n@responder(\"block_actions:your_callback_id\")\ndef custom_handler(payload):\n # handle your payload\n ...\n return JSONResponse(content={\"custom\": \"Custom Response\"})\n```\n\n### Slash commands\nOnce your server is running, the commands endpoint is setup at `/commands`, or if you use\nthe prefix as shown above, on `/slack/commands`. Slackers will emit an event with the name\nof the command, so if your command is `/engage`, you can listen for the event `engage`\n(without the slash)\n\n#### Responding to slash commands\nOn receiving a command, Slackers will emit a python event, which you can listen for as shown below.\n```python\nimport logging\nfrom slackers.hooks import commands\n\nlog = logging.getLogger(__name__)\n\n\n@commands.on(\"engage\") # responds to \"/engage\" \ndef handle_command(payload):\n log.info(\"Command received\")\n log.debug(payload)\n```\n\n### Async\nSince events are emitted using pyee's Async event emitter, it is possible to define your event handlers\nas async functions. Just keep in mind that errors are in this case emitted on the 'error' event. \n\n```python\nimport logging\nfrom slackers.hooks import commands\n\nlog = logging.getLogger(__name__)\n\n@commands.on('error')\ndef log_error(exc):\n log.error(str(exc))\n\n\n@commands.on(\"engage\") # responds to \"/engage\" \nasync def handle_command(payload):\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/uhavin/slackers", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "slackers", "package_url": "https://pypi.org/project/slackers/", "platform": "", "project_url": "https://pypi.org/project/slackers/", "project_urls": { "Homepage": "https://github.com/uhavin/slackers", "Repository": "https://github.com/uhavin/slackers" }, "release_url": "https://pypi.org/project/slackers/1.0.2/", "requires_dist": [ "pyee (>=6.0,<7.0)", "python-multipart (>=0.0.5,<0.0.6)", "requests (>=2.22,<3.0)", "fastapi (>=0,<1)" ], "requires_python": ">=3.6,<4.0", "summary": "Slack webhooks API served by FastAPI", "version": "1.0.2", "yanked": false, "yanked_reason": null }, "last_serial": 12544560, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "2c4bd9e24de2342e9f24b582064a58cd", "sha256": "b13b337ddc0201f58d3b2ce58bcebe21dd406bb03f898bba95682eba93d6dc64" }, "downloads": -1, "filename": "slackers-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2c4bd9e24de2342e9f24b582064a58cd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 4464, "upload_time": "2019-10-29T22:12:11", "upload_time_iso_8601": "2019-10-29T22:12:11.379058Z", "url": "https://files.pythonhosted.org/packages/49/a3/fb2671ec655280563f56e21b2885aa1dc922b5dd5d80854a54149577f2ca/slackers-0.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7eba5b252255f430eaeb6491f0855849", "sha256": "6bd4bdda77c4cc0221918af853844cfee33afcb1752e528f90f32af32580c5ee" }, "downloads": -1, "filename": "slackers-0.1.0.tar.gz", "has_sig": false, "md5_digest": "7eba5b252255f430eaeb6491f0855849", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 3584, "upload_time": "2019-10-29T22:12:13", "upload_time_iso_8601": "2019-10-29T22:12:13.779288Z", "url": "https://files.pythonhosted.org/packages/dc/54/2b2293e816a82cd34915dc20784b44f53d8f7e92e68440062f26af0b3c62/slackers-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "240c57edb465c6fd174f7443bf4e44da", "sha256": "efa7f366699f44b08f5c01f8839407ca57c70db7fe1e9c091ec029647685afab" }, "downloads": -1, "filename": "slackers-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "240c57edb465c6fd174f7443bf4e44da", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 4493, "upload_time": "2019-11-02T12:06:23", "upload_time_iso_8601": "2019-11-02T12:06:23.150916Z", "url": "https://files.pythonhosted.org/packages/2b/52/671d010abb162f1e6a6c91c2f983f2b8679ae381d09e805786b6344b822d/slackers-0.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "13c9b8fc7009cf63cdf763bafb979d0b", "sha256": "00796041a5e42a5fd547ea71b4f839630e873e98ef54659885dd98c6c09d863c" }, "downloads": -1, "filename": "slackers-0.1.1.tar.gz", "has_sig": false, "md5_digest": "13c9b8fc7009cf63cdf763bafb979d0b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 3601, "upload_time": "2019-11-02T12:06:24", "upload_time_iso_8601": "2019-11-02T12:06:24.604493Z", "url": "https://files.pythonhosted.org/packages/d7/bb/b0f162f810aec56e187366aedeaa3b70ad7baec805d50b61bfb87e8662fb/slackers-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "1d5a92ce32be2c8c093a8c433364f2c5", "sha256": "2d0482fc82cf4876f87ffde79eb5ff81db506bd1c5bac62c538c4b2c6eae24ed" }, "downloads": -1, "filename": "slackers-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "1d5a92ce32be2c8c093a8c433364f2c5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 5233, "upload_time": "2019-11-02T13:37:42", "upload_time_iso_8601": "2019-11-02T13:37:42.767914Z", "url": "https://files.pythonhosted.org/packages/db/f5/aed063b01cdde6b89aae195edd082f31559ee0eaa007dff72eb5c655a3ff/slackers-0.1.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9b385718d684c5f778d2a2b8e45bee8c", "sha256": "987ecf2d63d77bf49b2265d4ceeac47989a39fde203b6ecf78f3ff558477cafb" }, "downloads": -1, "filename": "slackers-0.1.2.tar.gz", "has_sig": false, "md5_digest": "9b385718d684c5f778d2a2b8e45bee8c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 4544, "upload_time": "2019-11-02T13:37:44", "upload_time_iso_8601": "2019-11-02T13:37:44.339269Z", "url": "https://files.pythonhosted.org/packages/16/c6/1f22f166a58b5911407adc1d01b1bffee704199c81c7d4644e60be5e37f1/slackers-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "7583bfa4528c612ab1c0902dec72b821", "sha256": "4d4e5491beabdf7afa7f44d2773d85bdbc510f55417fafb62fff4a4255104c4f" }, "downloads": -1, "filename": "slackers-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7583bfa4528c612ab1c0902dec72b821", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 5936, "upload_time": "2019-11-07T10:42:34", "upload_time_iso_8601": "2019-11-07T10:42:34.932429Z", "url": "https://files.pythonhosted.org/packages/1f/c2/149396c1350bcf74262fd1df542252a260b50eb0a4099b31458c73c9b1ee/slackers-0.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2aa7ce6faaa7876cc8c1d1adec4841d3", "sha256": "a2aaf0dc41bc218bf7b041068a89900b19f6c6728f9ab44aaf6e4688f644301f" }, "downloads": -1, "filename": "slackers-0.2.0.tar.gz", "has_sig": false, "md5_digest": "2aa7ce6faaa7876cc8c1d1adec4841d3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 5576, "upload_time": "2019-11-07T10:42:36", "upload_time_iso_8601": "2019-11-07T10:42:36.367675Z", "url": "https://files.pythonhosted.org/packages/f0/ef/7b9fa04a1297f89558ce9b8083ab8d89e778984b859c836b36eb19b0b4a5/slackers-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "a678ed1b09ec0b02c7763603dbe9c45d", "sha256": "3176a43f3d70839b58a84707b76be621911d868f5787b9e7b6d0780398c14463" }, "downloads": -1, "filename": "slackers-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a678ed1b09ec0b02c7763603dbe9c45d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 6107, "upload_time": "2019-11-08T22:25:01", "upload_time_iso_8601": "2019-11-08T22:25:01.492351Z", "url": "https://files.pythonhosted.org/packages/48/b9/14de13cc6e6cab4428de0a762b64315c08669212966f813f52652d385456/slackers-0.2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "20b84bb16bd2d319b6d8a4a6303939d5", "sha256": "f4fd592e19bc866a7cddaaca3e27c2a450cb5538d9ec0beab9491c8e444593a6" }, "downloads": -1, "filename": "slackers-0.2.1.tar.gz", "has_sig": false, "md5_digest": "20b84bb16bd2d319b6d8a4a6303939d5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 5795, "upload_time": "2019-11-08T22:25:02", "upload_time_iso_8601": "2019-11-08T22:25:02.905080Z", "url": "https://files.pythonhosted.org/packages/aa/e5/347fb7121303396e893e762bb98dd8830964a95feaa2830a3c564ae4e98d/slackers-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "476897bd8ee803106e60f3d29ceb878a", "sha256": "fb9da9f1d6a4bb86c5a86f6a222d180160a41b2933b26fdb2d14f9b0df31f66b" }, "downloads": -1, "filename": "slackers-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "476897bd8ee803106e60f3d29ceb878a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 6112, "upload_time": "2019-11-08T22:47:31", "upload_time_iso_8601": "2019-11-08T22:47:31.708325Z", "url": "https://files.pythonhosted.org/packages/0c/e3/b1454290f2ce6ef90504699b52898f4032ee8f95fff724c4718cdda274d0/slackers-0.2.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "30b510a3661ddd4c832ecec54e3ddb7f", "sha256": "d8dd0033ab25db485be1cb606e35b4b2bdb8d26d125ea77abe7500837b4103ce" }, "downloads": -1, "filename": "slackers-0.2.2.tar.gz", "has_sig": false, "md5_digest": "30b510a3661ddd4c832ecec54e3ddb7f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 5805, "upload_time": "2019-11-08T22:47:33", "upload_time_iso_8601": "2019-11-08T22:47:33.556875Z", "url": "https://files.pythonhosted.org/packages/bf/03/0a57aec3248d0f98b928df550bea9c6d8996153a1d8ab057091cfe2f3aff/slackers-0.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "e6bab20c08a76d476fbc22fb655f523b", "sha256": "d6d93aac399a22a3770428cf851605d4aec924631d27464961eb0472d20654c8" }, "downloads": -1, "filename": "slackers-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "e6bab20c08a76d476fbc22fb655f523b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 6109, "upload_time": "2019-12-19T17:54:38", "upload_time_iso_8601": "2019-12-19T17:54:38.209045Z", "url": "https://files.pythonhosted.org/packages/c2/d6/cdafdc469c5ae8f9d0901935b1ef31d90b8c0c06c5de9f077f3374554314/slackers-0.2.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "625698b4fc72f309cedfeea1980f7d76", "sha256": "35be9010f22441802e70791ff5eac945b63a979e0ea1cad3e889fe707dab21d3" }, "downloads": -1, "filename": "slackers-0.2.3.tar.gz", "has_sig": false, "md5_digest": "625698b4fc72f309cedfeea1980f7d76", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 5797, "upload_time": "2019-12-19T17:54:40", "upload_time_iso_8601": "2019-12-19T17:54:40.070414Z", "url": "https://files.pythonhosted.org/packages/6a/36/95fb3cf11aedd0d60a7991b5ffd15aa155fb65de2cb4a5a4390f4e8b8851/slackers-0.2.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "b7d78f0e2fe9f80570cbb23af20befd3", "sha256": "436025d18d1cf1058bdf95a88df96b1e00a0218b72898235d49421713bf7a574" }, "downloads": -1, "filename": "slackers-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "b7d78f0e2fe9f80570cbb23af20befd3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 6211, "upload_time": "2020-01-30T19:04:19", "upload_time_iso_8601": "2020-01-30T19:04:19.483674Z", "url": "https://files.pythonhosted.org/packages/3e/fd/8080cf01154d40a90c06b0de04fdf6dc00f3274a021714ce845bc1e56f01/slackers-0.3.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "3f80f132778bf39046f8db59ecf57ae5", "sha256": "19de0e3d223b2b18cbf999ced3d4e564a78ac074ece822ebf5223f36e97c7517" }, "downloads": -1, "filename": "slackers-0.3.0.tar.gz", "has_sig": false, "md5_digest": "3f80f132778bf39046f8db59ecf57ae5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 5956, "upload_time": "2020-01-30T19:04:21", "upload_time_iso_8601": "2020-01-30T19:04:21.411984Z", "url": "https://files.pythonhosted.org/packages/f2/fe/6e92a5c6dfb3e8786c4b4578c999a3666ca99d23e09f14ab2e79f04a8384/slackers-0.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.0a0": [ { "comment_text": "", "digests": { "md5": "73b3a7debb108b813ccdfee66cda3067", "sha256": "b93ef8c9dec6f9e7c702d3a8a376e2c158505acfbe8b512ba07ac1ec9663f65c" }, "downloads": -1, "filename": "slackers-0.3.0a0-py3-none-any.whl", "has_sig": false, "md5_digest": "73b3a7debb108b813ccdfee66cda3067", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 6220, "upload_time": "2020-01-21T20:43:49", "upload_time_iso_8601": "2020-01-21T20:43:49.393956Z", "url": "https://files.pythonhosted.org/packages/5e/7e/faa6db885924783b8bac450b2cef8c19ae227e76c96b7c9ff21f8c7aa4d3/slackers-0.3.0a0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d0eb01c9e164dfcd1d15c461e406924e", "sha256": "ba5f480730af395abc082eaef841e4d6043a02e0d1ea4a09ec0a7a4541b90d5a" }, "downloads": -1, "filename": "slackers-0.3.0a0.tar.gz", "has_sig": false, "md5_digest": "d0eb01c9e164dfcd1d15c461e406924e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 5915, "upload_time": "2020-01-21T20:43:51", "upload_time_iso_8601": "2020-01-21T20:43:51.330503Z", "url": "https://files.pythonhosted.org/packages/15/20/476a546f9122f4f9fa23cb89da5cf5e957c32c36c15a4b77f1a87cd67ce6/slackers-0.3.0a0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.0a1": [ { "comment_text": "", "digests": { "md5": "d07af9e9b7ea854c3a9f02af3a246093", "sha256": "171f39735e4c205ac2c377419795c370397a1d2f486a21ed52b089eafec0df83" }, "downloads": -1, "filename": "slackers-0.3.0a1-py3-none-any.whl", "has_sig": false, "md5_digest": "d07af9e9b7ea854c3a9f02af3a246093", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 6229, "upload_time": "2020-01-22T08:32:08", "upload_time_iso_8601": "2020-01-22T08:32:08.898949Z", "url": "https://files.pythonhosted.org/packages/15/95/81ae40c9c32f771047b108bc1ac65910f5586243d2e6d3bc8adb09c68c34/slackers-0.3.0a1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "6bdbe17a863c18ec48eeec5881bd5541", "sha256": "a9098087b9e66fff11109255dada7c15f5df7940ac523b68b5f27f252e53b768" }, "downloads": -1, "filename": "slackers-0.3.0a1.tar.gz", "has_sig": false, "md5_digest": "6bdbe17a863c18ec48eeec5881bd5541", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 5954, "upload_time": "2020-01-22T08:32:10", "upload_time_iso_8601": "2020-01-22T08:32:10.433747Z", "url": "https://files.pythonhosted.org/packages/fd/fb/3593fc34a0b79b875574131fe405ebe53ca77504f38ec17f348165677ba5/slackers-0.3.0a1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "9835d446120692b320ff50d3ffa6dbbe", "sha256": "cc27cc3e5cca849f272209bb3db7afefceeecbf80dc89947967f7439e58cfe77" }, "downloads": -1, "filename": "slackers-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9835d446120692b320ff50d3ffa6dbbe", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 7332, "upload_time": "2020-02-01T20:49:53", "upload_time_iso_8601": "2020-02-01T20:49:53.004544Z", "url": "https://files.pythonhosted.org/packages/04/5e/4b3bdd2680c3583d8c7a485ce3c2663878cafb6a5b8178ad8adbe5ea6efe/slackers-0.4.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b96336a49a748bc6d23e7e68e1c3d6e7", "sha256": "d073d0406e0cb2b672d30a30bbb52326f6886ebaaa7f6b68b5a1f939401a0889" }, "downloads": -1, "filename": "slackers-0.4.0.tar.gz", "has_sig": false, "md5_digest": "b96336a49a748bc6d23e7e68e1c3d6e7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 7431, "upload_time": "2020-02-01T20:49:54", "upload_time_iso_8601": "2020-02-01T20:49:54.544806Z", "url": "https://files.pythonhosted.org/packages/79/6f/7aa97e1ecb7f3300997a6e7d1cd1b8377f54698d7636fb2f212e307f9aca/slackers-0.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.0a0": [ { "comment_text": "", "digests": { "md5": "b53ea8e77d9ddc304d776c6137b0c9b9", "sha256": "b52c82a79977ebe42d6ac17240d88a51711645a86624432c513d49d392e7d48a" }, "downloads": -1, "filename": "slackers-0.4.0a0-py3-none-any.whl", "has_sig": false, "md5_digest": "b53ea8e77d9ddc304d776c6137b0c9b9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 6676, "upload_time": "2020-01-30T21:34:22", "upload_time_iso_8601": "2020-01-30T21:34:22.947316Z", "url": "https://files.pythonhosted.org/packages/54/12/bfe0b8bbd8ce58107ccd0c407f08bec2f125211ba40b7cfe774d5334c18e/slackers-0.4.0a0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "c7ba73b10317fdcb0b0b12c57b80ea56", "sha256": "300031e17ef40dcd48e54317e0ae96bebe79e394bb9a709f15ab9c47288b4403" }, "downloads": -1, "filename": "slackers-0.4.0a0.tar.gz", "has_sig": false, "md5_digest": "c7ba73b10317fdcb0b0b12c57b80ea56", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 6550, "upload_time": "2020-01-30T21:34:24", "upload_time_iso_8601": "2020-01-30T21:34:24.598689Z", "url": "https://files.pythonhosted.org/packages/3e/c3/8802aa246106d41f1e6d1998a33301b3c8f2ed5dd62e75a79697ebab563a/slackers-0.4.0a0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.0a1": [ { "comment_text": "", "digests": { "md5": "8c9bd4912b83170e7a3c35a1b91136bf", "sha256": "4cd041ca1e39ec926cceb4cb25211dde1336dd19cde24b6f5ca819acf719c7cb" }, "downloads": -1, "filename": "slackers-0.4.0a1-py3-none-any.whl", "has_sig": false, "md5_digest": "8c9bd4912b83170e7a3c35a1b91136bf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 6988, "upload_time": "2020-01-30T22:00:54", "upload_time_iso_8601": "2020-01-30T22:00:54.783889Z", "url": "https://files.pythonhosted.org/packages/f8/67/7315cc9dee33043e1abad8f8758767a0194ede9752da4ea04bd6b35d63d8/slackers-0.4.0a1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "571c8a5f5c896f8cae590cc5f6762a8b", "sha256": "484e16a6203723048d784b7f1ba3b41a3aad3de20c11d65d2f153b604e6d7693" }, "downloads": -1, "filename": "slackers-0.4.0a1.tar.gz", "has_sig": false, "md5_digest": "571c8a5f5c896f8cae590cc5f6762a8b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 6987, "upload_time": "2020-01-30T22:00:56", "upload_time_iso_8601": "2020-01-30T22:00:56.712098Z", "url": "https://files.pythonhosted.org/packages/e1/16/2b5b2cb71d38ae048ba21403eb93baab71dcf088c8a9c9e2fe79ff72f741/slackers-0.4.0a1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "e7b605c034e00fd4a4517ee3fc5e8ed3", "sha256": "41cd4c509bafb07b377a297286a5b44b8a3abb5630ff300a329b389e338f4b18" }, "downloads": -1, "filename": "slackers-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "e7b605c034e00fd4a4517ee3fc5e8ed3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 7328, "upload_time": "2020-02-02T16:49:58", "upload_time_iso_8601": "2020-02-02T16:49:58.062343Z", "url": "https://files.pythonhosted.org/packages/26/7a/9430f8413100ccd7309411144d05d5396171dcee7f0e8772f415b88a7f1a/slackers-0.4.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "8293af134685c4a4dee928aa1159ba17", "sha256": "3e27037c3a63d37d13940ac1081115a1f7885cf3e96e5fd39c354c86bcc9da36" }, "downloads": -1, "filename": "slackers-0.4.1.tar.gz", "has_sig": false, "md5_digest": "8293af134685c4a4dee928aa1159ba17", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 7386, "upload_time": "2020-02-02T16:49:59", "upload_time_iso_8601": "2020-02-02T16:49:59.481872Z", "url": "https://files.pythonhosted.org/packages/cc/ee/26ad82c5ebdce5e7a8e88becbedf637e392dc46cec6468b3c4b973203897/slackers-0.4.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "0e9b7e60a0311011d736aa794493a032", "sha256": "a3a97cd1519999a6acb88db494b82c4de8fee9ff9a82284be2115dbf64dc4cf0" }, "downloads": -1, "filename": "slackers-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "0e9b7e60a0311011d736aa794493a032", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 7329, "upload_time": "2020-02-02T16:54:42", "upload_time_iso_8601": "2020-02-02T16:54:42.523793Z", "url": "https://files.pythonhosted.org/packages/6a/36/cdf39913a551ae9da9332ae9fc6e35f23b58404823e5bd4f8769c2ce572d/slackers-0.4.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a6f18e8d4742eb2c5ec272af4d5127b1", "sha256": "d1d3b709440e2439d22ee47e8b8a264593e89481d35d0f60eb545dfcfc6e2bd8" }, "downloads": -1, "filename": "slackers-0.4.2.tar.gz", "has_sig": false, "md5_digest": "a6f18e8d4742eb2c5ec272af4d5127b1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 7383, "upload_time": "2020-02-02T16:54:43", "upload_time_iso_8601": "2020-02-02T16:54:43.882098Z", "url": "https://files.pythonhosted.org/packages/e8/ee/54431d0fcbd3f55fd5c98d14fb5fd17d591ae94ed153a8655c165edad3f1/slackers-0.4.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "735b6e40965ad28a9120a9410c3d5fb7", "sha256": "144da1925e617124b41b83f95dd69dae8210d47d84528483edca4f0b5cefa602" }, "downloads": -1, "filename": "slackers-0.4.3-py3-none-any.whl", "has_sig": false, "md5_digest": "735b6e40965ad28a9120a9410c3d5fb7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 7333, "upload_time": "2020-03-06T21:44:21", "upload_time_iso_8601": "2020-03-06T21:44:21.892894Z", "url": "https://files.pythonhosted.org/packages/7c/6f/9b7b95f58a75e082a5319b42c28c9b7638316d2bb5b382d95813827f59cc/slackers-0.4.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b69690153f61d85e534139af84f18b8f", "sha256": "d9a5d141b576cc28663b9c305081b10406232243afcb1a71f7f43554ed3abd99" }, "downloads": -1, "filename": "slackers-0.4.3.tar.gz", "has_sig": false, "md5_digest": "b69690153f61d85e534139af84f18b8f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 7433, "upload_time": "2020-03-06T21:44:23", "upload_time_iso_8601": "2020-03-06T21:44:23.652706Z", "url": "https://files.pythonhosted.org/packages/8d/a2/9990c2eb525c4577bff3e9f224a66afca3e5b7a6fb40720a495b1cc51511/slackers-0.4.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "65baddd3b5d7e633923ca044fc8e61cb", "sha256": "bfe1b7695d4719cfefc061f30fc28d013406b341fd7b7a47d44b6afa4df8eea8" }, "downloads": -1, "filename": "slackers-0.4.4-py3-none-any.whl", "has_sig": false, "md5_digest": "65baddd3b5d7e633923ca044fc8e61cb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 7347, "upload_time": "2020-04-30T20:22:13", "upload_time_iso_8601": "2020-04-30T20:22:13.136380Z", "url": "https://files.pythonhosted.org/packages/56/26/788042fb13f90e443fc0ba27f167e22c99ac84ecc99ef68a132b60f6f9d0/slackers-0.4.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "60b4f879a9f955a62cb899d5fdbfc1dd", "sha256": "b5c22d430a972e5925a513bce5b5934ed9f72b032d091acea675828b3bcaa8fc" }, "downloads": -1, "filename": "slackers-0.4.4.tar.gz", "has_sig": false, "md5_digest": "60b4f879a9f955a62cb899d5fdbfc1dd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 7435, "upload_time": "2020-04-30T20:22:14", "upload_time_iso_8601": "2020-04-30T20:22:14.465870Z", "url": "https://files.pythonhosted.org/packages/dc/69/ef96697d239ff3375bf92c314b77d66eb53fe6848b8999272330085a99a3/slackers-0.4.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "045f542a837385c0b08f8409861917d0", "sha256": "591d945327dd5395d57a3f894f8c33a1654cb771307e4f063c07d80fce449ac9" }, "downloads": -1, "filename": "slackers-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "045f542a837385c0b08f8409861917d0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 7608, "upload_time": "2020-11-14T13:53:17", "upload_time_iso_8601": "2020-11-14T13:53:17.185990Z", "url": "https://files.pythonhosted.org/packages/67/e2/2d759798d953f7cbf15007cab25765c2428c75257dc4c4928ba454c44c97/slackers-1.0.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "0fa749c9890f2cdc07a476a0ab998b62", "sha256": "7475462a7ec8e7b498a1aac685fea8cdf9f16e2966ea9393ea643d228a38a58b" }, "downloads": -1, "filename": "slackers-1.0.0.tar.gz", "has_sig": false, "md5_digest": "0fa749c9890f2cdc07a476a0ab998b62", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 7885, "upload_time": "2020-11-14T13:53:18", "upload_time_iso_8601": "2020-11-14T13:53:18.663066Z", "url": "https://files.pythonhosted.org/packages/18/82/42e938f479ed5f9bfc1a7057e0b2652c1a2a2b778fd8e923df7b22aa65a4/slackers-1.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "ed68887edc8fa2c29c5f53ab1d9bb931", "sha256": "7eea58ad8d39e4e48916ef89db97772378b5e2560bbdc8672452f7b0b8c3f4fa" }, "downloads": -1, "filename": "slackers-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "ed68887edc8fa2c29c5f53ab1d9bb931", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 7739, "upload_time": "2021-12-10T23:57:31", "upload_time_iso_8601": "2021-12-10T23:57:31.364966Z", "url": "https://files.pythonhosted.org/packages/77/bb/95498d4389123585e5304577b8952645cf6ee2375900e5958a813a971694/slackers-1.0.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9f68ba097a9ce8dd9fdb6c34e7ff38af", "sha256": "e868fe27887dfe717036be452cb1c4711e117083c252e99932b6645e3cbd9c53" }, "downloads": -1, "filename": "slackers-1.0.1.tar.gz", "has_sig": false, "md5_digest": "9f68ba097a9ce8dd9fdb6c34e7ff38af", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 7954, "upload_time": "2021-12-10T23:57:33", "upload_time_iso_8601": "2021-12-10T23:57:33.350310Z", "url": "https://files.pythonhosted.org/packages/20/f3/c5ae563fdc5c7a2a2c76b0ef0cc8d58eeb7c8b8275a7208169e6af4cf513/slackers-1.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "26170a299ac8ffd468bde157aac33e7e", "sha256": "dc8ad35f4171f8ccc3f1ca1b43b22d3b1356efb6bec8fbbdc3459fc781e83603" }, "downloads": -1, "filename": "slackers-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "26170a299ac8ffd468bde157aac33e7e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 7739, "upload_time": "2022-01-11T21:47:40", "upload_time_iso_8601": "2022-01-11T21:47:40.689800Z", "url": "https://files.pythonhosted.org/packages/a5/1f/fcbe003ba8a95b4d724ce5c81b78184db8ba858d066ac12bf6bc6807121e/slackers-1.0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "8ce083e05ecc9fb08b43ddc62767fb39", "sha256": "43be4bf14016686a3fa926c7b28308f8c770bd6c8786d113d72c8226eb5f47ad" }, "downloads": -1, "filename": "slackers-1.0.2.tar.gz", "has_sig": false, "md5_digest": "8ce083e05ecc9fb08b43ddc62767fb39", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 7951, "upload_time": "2022-01-11T21:47:42", "upload_time_iso_8601": "2022-01-11T21:47:42.588618Z", "url": "https://files.pythonhosted.org/packages/f0/9b/766196c0e9a6cf51ff8586be709b51273dca029214d1c7c7b44c7c9c7988/slackers-1.0.2.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "26170a299ac8ffd468bde157aac33e7e", "sha256": "dc8ad35f4171f8ccc3f1ca1b43b22d3b1356efb6bec8fbbdc3459fc781e83603" }, "downloads": -1, "filename": "slackers-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "26170a299ac8ffd468bde157aac33e7e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 7739, "upload_time": "2022-01-11T21:47:40", "upload_time_iso_8601": "2022-01-11T21:47:40.689800Z", "url": "https://files.pythonhosted.org/packages/a5/1f/fcbe003ba8a95b4d724ce5c81b78184db8ba858d066ac12bf6bc6807121e/slackers-1.0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "8ce083e05ecc9fb08b43ddc62767fb39", "sha256": "43be4bf14016686a3fa926c7b28308f8c770bd6c8786d113d72c8226eb5f47ad" }, "downloads": -1, "filename": "slackers-1.0.2.tar.gz", "has_sig": false, "md5_digest": "8ce083e05ecc9fb08b43ddc62767fb39", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 7951, "upload_time": "2022-01-11T21:47:42", "upload_time_iso_8601": "2022-01-11T21:47:42.588618Z", "url": "https://files.pythonhosted.org/packages/f0/9b/766196c0e9a6cf51ff8586be709b51273dca029214d1c7c7b44c7c9c7988/slackers-1.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }