{ "info": { "author": "Tyson Holub", "author_email": "tholub@mobiusworks.com", "bugtrack_url": null, "classifiers": [], "description": "# Flask-PubSubDecorator\n\nDecorates publisher functions and subscriber routes creating topics/subscriptions if necessary.\n\n## Installation\n\nAdd this line to your application's requirements.txt\n\n```python\nFlask-PubSubDecorator\n```\n\nAnd then execute:\n\n $ pip install -r requirements.txt\n\nOr install it yourself as:\n\n $ pip install Flask-PubSubDecorator\n\n## Usage\n\nUsing PubSubDecorator is dead simple. First set your GOOGLE_APPLICATION_CREDENTIALS environment variable to point at a valid JSON creds file.\n\n $ export GOOGLE_APPLICATION_CREDENTIALS=/path/to/creds.json\n\nThe following snippet should get you coding\n```python\nfrom flask import Flask, request\nfrom PubSubDecorator import PubSubDecorator\nimport base64\nimport json\n\n\napp = Flask(__name__)\n# blueprint can optionally be passed in for registering subscribers in a blueprint endpoint\napp.pubsub = PubSubDecorator(app)\n\n\n# publisher decorator will inject publisher client and topic path\n@app.pubsub.publisher(topic='user_confirmed')\ndef user_confirmed(publisher, topic, user):\n publisher.publish(topic, data=json.dumps({\n 'user_id': user.id\n }))\n\n\n# subscriber decorator will register the Flask route, prefixing /_ah/push-handlers\n# subscriber decorator will parse and inject pubsub message\n@app.pubsub.subscriber(\n subscription='process_user_confirmation',\n topic='user_confirmed',\n route='/process_user_confirmation',\n methods=['POST']\n)\ndef process_user_confirmation(message, *args, **kwargs):\n try:\n user_id = message.get('user_id')\n # do some async work here!\n except Exception:\n _logger.exception(\n 'An unexpected error occurred processing subscription \"{0}\": {1}'.format(\n kwargs.get('__subscription__'), request.data\n )\n )\n # Unexpected failure, do not ack message\n return '', 422\n return '', 200\n```\n\n## Security\n\nPubSub push subscriptions are inherently public facing and should therefore be secured. Googles recommended solution\nis to attach a secret key to a registered subscription pushEndpoint. PubSubDecorator handles this for you if any of\nthe following is provided:\n\n 1. OS Environment Variable `PUBSUB_DECORATOR_API_KEY`\n 2. Flask App Config `PUBSUB_DECORATOR_API_KEY`\n 3. api_key is passed into PubSubDecorator constructor.\n\nBest Practice: encrypt your key with GCloud KMS, store it in GCloud Datastore, and export to OS environment variable\nat runtime.\n\n## Logging\n\nDecorators will log to 'flask-pubsub-decorator' namespace.\n\n```python\nimport sys\nimport logging\nimport logging.handlers\n\n\nlogger = logging.getLogger('flask-pubsub-decorator')\nlogger.setLevel(logging.DEBUG)\nlog_file = logging.handlers.RotatingFileHandler(\n 'log_file_name.log', maxBytes=5 * 1024 * 1024, backupCount=10\n)\nlogger.addHandler(log_file)\n```\n\n# Testing\n\n $ pytest -s tests.py", "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/MobiusWorksLLC/Flask-PubSubDecorator.git", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "Flask-PubSubDecorator", "package_url": "https://pypi.org/project/Flask-PubSubDecorator/", "platform": "", "project_url": "https://pypi.org/project/Flask-PubSubDecorator/", "project_urls": { "Homepage": "https://github.com/MobiusWorksLLC/Flask-PubSubDecorator.git" }, "release_url": "https://pypi.org/project/Flask-PubSubDecorator/1.1.6/", "requires_dist": null, "requires_python": "", "summary": "Decorates publisher functions and subscriber routes creating topics/subscriptions if necessary", "version": "1.1.6" }, "last_serial": 4048212, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "697caf0716fbb20b37aa4d9844597177", "sha256": "1e65eaf831830aeb79cf7979e6ffa98fbce0f1d741b9ca27e241c8d9f4d93af1" }, "downloads": -1, "filename": "Flask-PubSubDecorator-0.0.1.tar.gz", "has_sig": false, "md5_digest": "697caf0716fbb20b37aa4d9844597177", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2877, "upload_time": "2018-04-05T19:52:49", "url": "https://files.pythonhosted.org/packages/1b/e4/108b88f858acf2bc87193f735f786344aa9743327774c889b5410d9dc86c/Flask-PubSubDecorator-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "701aeb5659ca6590fe04989af6422627", "sha256": "de3232d82647246f985226a4200278629dbbec99c347936156f07cbdc0f17973" }, "downloads": -1, "filename": "Flask-PubSubDecorator-0.0.2.tar.gz", "has_sig": false, "md5_digest": "701aeb5659ca6590fe04989af6422627", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2936, "upload_time": "2018-04-05T20:17:40", "url": "https://files.pythonhosted.org/packages/1c/72/11af5ec9720c2061fc31e2a9a269b3f3228c54c70ef779bd3473262137c8/Flask-PubSubDecorator-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "c6e43e8c1ebe7f18e02183515cffc4a8", "sha256": "f091fc7f8a8c6509c6e04adf2a582a23119c3765256141fd2e2a8f382d468ca0" }, "downloads": -1, "filename": "Flask-PubSubDecorator-0.0.3.tar.gz", "has_sig": false, "md5_digest": "c6e43e8c1ebe7f18e02183515cffc4a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3006, "upload_time": "2018-04-05T21:20:00", "url": "https://files.pythonhosted.org/packages/fc/2e/68b3d36acadb1824436623f6f37558ed5ce6a6548503e88db6ee7ccbd4db/Flask-PubSubDecorator-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "2291e8c279f9fd373406ddbc7ad8f79a", "sha256": "309f270849825bd02207af083ddf7217c831d472ce04dd41019f4ceb8f44ed03" }, "downloads": -1, "filename": "Flask-PubSubDecorator-0.0.4.tar.gz", "has_sig": false, "md5_digest": "2291e8c279f9fd373406ddbc7ad8f79a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2926, "upload_time": "2018-04-06T17:04:36", "url": "https://files.pythonhosted.org/packages/c6/77/f18a177e23bc536f8e3eb01e056457b95d285d3381799946494b21a82eca/Flask-PubSubDecorator-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "3ee66a71a4d3d7b6d322704f9eee98f2", "sha256": "9d50fc8adc3026f11fcb3a4f2d57d3de9a2b8860acba9ae07c94f3034454ff66" }, "downloads": -1, "filename": "Flask-PubSubDecorator-0.0.5.tar.gz", "has_sig": false, "md5_digest": "3ee66a71a4d3d7b6d322704f9eee98f2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3433, "upload_time": "2018-04-10T16:05:05", "url": "https://files.pythonhosted.org/packages/30/a0/920d2df04c7983972b4a18d9b6cfacc3749224cf203bcdccbc1ecb03a874/Flask-PubSubDecorator-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "bde1ed9647cb73d1f2b28c77b7044936", "sha256": "18cf47703e8b3edc487cc475286a247575d5e734bc7f17410b5af732b397091a" }, "downloads": -1, "filename": "Flask-PubSubDecorator-0.0.6.tar.gz", "has_sig": false, "md5_digest": "bde1ed9647cb73d1f2b28c77b7044936", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3428, "upload_time": "2018-04-10T16:15:56", "url": "https://files.pythonhosted.org/packages/40/bc/9145e740b1cf5917893cd590686a46ff4c60295718482d3b78ee9a496875/Flask-PubSubDecorator-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "4719e9f303ff93557764c2ee69963e7b", "sha256": "51a9ca126d130048f7d9b608a37abf7a0096692d77f2e0fd4a17bd2f446096c6" }, "downloads": -1, "filename": "Flask-PubSubDecorator-0.0.7.tar.gz", "has_sig": false, "md5_digest": "4719e9f303ff93557764c2ee69963e7b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3430, "upload_time": "2018-04-10T16:23:50", "url": "https://files.pythonhosted.org/packages/9d/00/4ad847462b31047ee6995e7095a29b1011cdcdb8f1d7dc7cd2aa1ae400d8/Flask-PubSubDecorator-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "89d130f56a04527b39ac42c293c0e1a9", "sha256": "f9ee51e9f00f747de8aa6459f8f6187023cae7a25f99e53372a1968a096e4d78" }, "downloads": -1, "filename": "Flask-PubSubDecorator-0.0.8.tar.gz", "has_sig": false, "md5_digest": "89d130f56a04527b39ac42c293c0e1a9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3727, "upload_time": "2018-04-11T16:42:04", "url": "https://files.pythonhosted.org/packages/4b/f0/aa780976f35154b9aef66c20eb2adb5e586957ce0ebb41ab7203e97f5e8d/Flask-PubSubDecorator-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "07733b29ecdd8805dd00adcfad1529f4", "sha256": "9e12d9b9ddb36058d9156c7289c2d5c0c2b7900ea3686ae03bfcb3b63dd74be9" }, "downloads": -1, "filename": "Flask-PubSubDecorator-0.0.9.tar.gz", "has_sig": false, "md5_digest": "07733b29ecdd8805dd00adcfad1529f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3945, "upload_time": "2018-04-20T18:27:03", "url": "https://files.pythonhosted.org/packages/fe/53/b504f0dcde0fe0138655c9127260323a47c8e2ed0519bd8e40e054789242/Flask-PubSubDecorator-0.0.9.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "0ed82663dbd6d13785546e30262f7f3a", "sha256": "49e22b7987d11a40ea610af07277619942d5a49de35eacb2ba31a0e904a38f2a" }, "downloads": -1, "filename": "Flask-PubSubDecorator-1.0.0.tar.gz", "has_sig": false, "md5_digest": "0ed82663dbd6d13785546e30262f7f3a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4335, "upload_time": "2018-04-27T18:40:00", "url": "https://files.pythonhosted.org/packages/07/3a/85d145b013b25de078197354f27c980fed88406cb6e76e251c63c4a7db05/Flask-PubSubDecorator-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "3f1d8516739bb5a4d0ace8b2741c3b92", "sha256": "af9b6b11628facea83816c57da547866f6b144ddd7181fec87ecc73c9566f855" }, "downloads": -1, "filename": "Flask-PubSubDecorator-1.0.1.tar.gz", "has_sig": false, "md5_digest": "3f1d8516739bb5a4d0ace8b2741c3b92", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4378, "upload_time": "2018-04-30T17:51:36", "url": "https://files.pythonhosted.org/packages/fe/ad/de350d70db0f8077ba8aa06db38987e8b85adf1b72e39a3afb67b2ad2b29/Flask-PubSubDecorator-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "c5d0d68cf7bb5f2765cd0cc595adaf40", "sha256": "2e3e3a5fde25e6def7ecad49b6b46ed33802fa863416beabba2b72e3884689a8" }, "downloads": -1, "filename": "Flask-PubSubDecorator-1.0.2.tar.gz", "has_sig": false, "md5_digest": "c5d0d68cf7bb5f2765cd0cc595adaf40", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4387, "upload_time": "2018-05-01T17:59:54", "url": "https://files.pythonhosted.org/packages/6e/c4/df2f0f7f0c4fb76d71f8887956f3069e71cf6f26dc6d29a83b45d9663e87/Flask-PubSubDecorator-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "2f723dcc9c6619f2c1bf51406eab465e", "sha256": "a121f4ee09fa16678cbd2dab73faa8025738175b39d88699f84611a0494a5f93" }, "downloads": -1, "filename": "Flask-PubSubDecorator-1.0.3.tar.gz", "has_sig": false, "md5_digest": "2f723dcc9c6619f2c1bf51406eab465e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4431, "upload_time": "2018-05-10T15:21:03", "url": "https://files.pythonhosted.org/packages/fc/56/52e89b4950c109972b88c34475607247826bc8b4bc2e92ded7bd0b3b4d11/Flask-PubSubDecorator-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "a05b6a07ef97dd86d376ba2195dbd1c1", "sha256": "6293da75ea443d1860087eb9e9dbe363bf9091fc46bf8830414f78788f888741" }, "downloads": -1, "filename": "Flask-PubSubDecorator-1.0.4.tar.gz", "has_sig": false, "md5_digest": "a05b6a07ef97dd86d376ba2195dbd1c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4495, "upload_time": "2018-05-11T16:53:45", "url": "https://files.pythonhosted.org/packages/32/3f/26c65f2b5091621170620c826d41fca80dc0770771f2a4359da27addd249/Flask-PubSubDecorator-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "0d19f41c9478133b70f030ad57498aef", "sha256": "4a9435b80508c1fde064eaf5507087ba1528e654663e5f53685941e1c543c50d" }, "downloads": -1, "filename": "Flask-PubSubDecorator-1.0.5.tar.gz", "has_sig": false, "md5_digest": "0d19f41c9478133b70f030ad57498aef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4528, "upload_time": "2018-05-11T17:18:23", "url": "https://files.pythonhosted.org/packages/46/85/550dc0780f9e72804ddbfc0f3a36ff345ad57dc9f1d6194d1e385bd3577b/Flask-PubSubDecorator-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "c36a153586793cf97b82a4b19807fcc6", "sha256": "123e04975b8ae8d6230000171490a7aba8b2076ed719a5254175bf567dc951ca" }, "downloads": -1, "filename": "Flask-PubSubDecorator-1.0.6.tar.gz", "has_sig": false, "md5_digest": "c36a153586793cf97b82a4b19807fcc6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4747, "upload_time": "2018-05-14T16:28:36", "url": "https://files.pythonhosted.org/packages/50/04/9d5177f4b00da7def146b577d567ed11a98c01196ef51ab60cbb04449e7b/Flask-PubSubDecorator-1.0.6.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "f07068f0281130da1ab47ef1e84ae25b", "sha256": "6aa6c9035e2b26887b18bed6d06d317f93a20d161bed524d2bfed28666447e95" }, "downloads": -1, "filename": "Flask-PubSubDecorator-1.0.7.tar.gz", "has_sig": false, "md5_digest": "f07068f0281130da1ab47ef1e84ae25b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4745, "upload_time": "2018-05-14T16:49:05", "url": "https://files.pythonhosted.org/packages/b9/68/ee8554bc584e50a05caa4257a83c1160b7cd52e2af96fed42ad8a663a726/Flask-PubSubDecorator-1.0.7.tar.gz" } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "78c2c6d0fa0e97c94f93ffa66347c25f", "sha256": "81946b50c696b1bc80367448c3f0f4be0b4caf186b35871667fa296f6a9d6e14" }, "downloads": -1, "filename": "Flask-PubSubDecorator-1.0.8.tar.gz", "has_sig": false, "md5_digest": "78c2c6d0fa0e97c94f93ffa66347c25f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4764, "upload_time": "2018-05-14T18:29:43", "url": "https://files.pythonhosted.org/packages/a5/8f/87f7ada79614b986f9a836285b8c87bfb98b0009abe53cfe529c5218cdf6/Flask-PubSubDecorator-1.0.8.tar.gz" } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "53da2f0e5f5c394b707a680cb9beddc1", "sha256": "5a4349058ff5ab2e620d54529dafdd39490f0b3f70586665084c2ee161c6d22a" }, "downloads": -1, "filename": "Flask-PubSubDecorator-1.0.9.tar.gz", "has_sig": false, "md5_digest": "53da2f0e5f5c394b707a680cb9beddc1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4792, "upload_time": "2018-05-14T20:00:08", "url": "https://files.pythonhosted.org/packages/bd/f7/bb62c850807f78272c25a61500b1b6e769845d6fe1e38453613492bd3625/Flask-PubSubDecorator-1.0.9.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "8e73eb6a0c50faf592c9a597e29281f0", "sha256": "6c2a66059c5ea28b91f8fe86a996f73f6a1ea4a40e8943372910f2838039f43e" }, "downloads": -1, "filename": "Flask-PubSubDecorator-1.1.0.tar.gz", "has_sig": false, "md5_digest": "8e73eb6a0c50faf592c9a597e29281f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4793, "upload_time": "2018-05-14T20:40:29", "url": "https://files.pythonhosted.org/packages/fe/e0/845f32402d27d96c6586894a328c784dfc381be19d3c57cd9d9c2c7182a4/Flask-PubSubDecorator-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "3fbf417c84b6ca18ee5a82a0ae0fefa8", "sha256": "aaf5007989ffeece95a01845755345b5fb865c120846ee2262aa85c45bb223b2" }, "downloads": -1, "filename": "Flask-PubSubDecorator-1.1.1.tar.gz", "has_sig": false, "md5_digest": "3fbf417c84b6ca18ee5a82a0ae0fefa8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4790, "upload_time": "2018-05-15T14:51:12", "url": "https://files.pythonhosted.org/packages/28/ed/96c23c6bf8b07fe6b41bcc0ac7ad7b236fbd92eafdd5e5cf2541d30bd0fb/Flask-PubSubDecorator-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "2885825d7db62c3fa6f7cc2eff151533", "sha256": "92b782db81637e12ea14a4d6a48c33e46a44e4ae10082ab53945d7e92a8690a4" }, "downloads": -1, "filename": "Flask-PubSubDecorator-1.1.2.tar.gz", "has_sig": false, "md5_digest": "2885825d7db62c3fa6f7cc2eff151533", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5319, "upload_time": "2018-05-15T15:14:33", "url": "https://files.pythonhosted.org/packages/c9/ad/34ae079645154397022e5d3bbed8cd43764a5c8129f73f4bc81918f5ab6e/Flask-PubSubDecorator-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "8cbbaa88a186b4cde62c00efd366eff1", "sha256": "e1d3db107a8b7913270116e54b25411f5ee5ebd786204e1b90eee77462ff69d6" }, "downloads": -1, "filename": "Flask-PubSubDecorator-1.1.3.tar.gz", "has_sig": false, "md5_digest": "8cbbaa88a186b4cde62c00efd366eff1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5312, "upload_time": "2018-05-21T19:02:25", "url": "https://files.pythonhosted.org/packages/a4/a7/afaaca55ea4aac102fcbefa929229dab68e2134407ccb094bf29ae28d3ae/Flask-PubSubDecorator-1.1.3.tar.gz" } ], "1.1.4": [ { "comment_text": "", "digests": { "md5": "2b1c34c3c1030342d27b90805934194b", "sha256": "f318497055727d0e21ba6ede16b968683ec25e5feb4227f00d58d0d0e7b93ad4" }, "downloads": -1, "filename": "Flask-PubSubDecorator-1.1.4.tar.gz", "has_sig": false, "md5_digest": "2b1c34c3c1030342d27b90805934194b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5466, "upload_time": "2018-05-23T15:49:49", "url": "https://files.pythonhosted.org/packages/6b/07/687e653567a9cf010f8bcb5b98e7caa7ae2624ac5a970e5c3c118298e21c/Flask-PubSubDecorator-1.1.4.tar.gz" } ], "1.1.5": [ { "comment_text": "", "digests": { "md5": "b79cee92756c0161b225ee675e018add", "sha256": "7d8ebe1e1287828d1c68bc800e1b33b29fd5471d09c64d39d1001f2c1a79387c" }, "downloads": -1, "filename": "Flask-PubSubDecorator-1.1.5.tar.gz", "has_sig": false, "md5_digest": "b79cee92756c0161b225ee675e018add", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5504, "upload_time": "2018-06-14T15:38:55", "url": "https://files.pythonhosted.org/packages/8c/eb/3627682a92efe6e63f50b9d16b7a3e0af45e60b055cb4cf960f84be4ac65/Flask-PubSubDecorator-1.1.5.tar.gz" } ], "1.1.6": [ { "comment_text": "", "digests": { "md5": "53f1b2b1bf1cf9e7441f38bc35d76cd7", "sha256": "ce05c5f1495c7f6b9bc8c04257cc6b12a00cf3f42975bd16c2501155b7522deb" }, "downloads": -1, "filename": "Flask-PubSubDecorator-1.1.6.tar.gz", "has_sig": false, "md5_digest": "53f1b2b1bf1cf9e7441f38bc35d76cd7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5528, "upload_time": "2018-07-10T18:50:50", "url": "https://files.pythonhosted.org/packages/34/6e/fb14f6403aa8f3cb70873522fb1355ecc5a3d1cfbf87c6fbc91285edfdd6/Flask-PubSubDecorator-1.1.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "53f1b2b1bf1cf9e7441f38bc35d76cd7", "sha256": "ce05c5f1495c7f6b9bc8c04257cc6b12a00cf3f42975bd16c2501155b7522deb" }, "downloads": -1, "filename": "Flask-PubSubDecorator-1.1.6.tar.gz", "has_sig": false, "md5_digest": "53f1b2b1bf1cf9e7441f38bc35d76cd7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5528, "upload_time": "2018-07-10T18:50:50", "url": "https://files.pythonhosted.org/packages/34/6e/fb14f6403aa8f3cb70873522fb1355ecc5a3d1cfbf87c6fbc91285edfdd6/Flask-PubSubDecorator-1.1.6.tar.gz" } ] }