{ "info": { "author": "Miguel \u00c1ngel Alarcos Torrecillas", "author_email": "miguel.alarcos@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# API Decorators\n\ndefine REST schemas for aiohttp and mongodb.\n\n`pip install apidecorators`\n\nThis API is valid for schemas in this way:\n\nschema = {\n * primitives\n * objects\n * arrays of primitives\n * arrays of objects\n}\n\nwhere objects are objects of primitives and this kind of objects.\n\nLet me explain by examples:\n\n```python\nfrom apidecorators.api import jwt_auth, get, insert, has_role, update, push, pull, \\\n validate, get_many, delete, read_access, write_access, collection, aggregate, \\\n update_array, get_from_array, public\nfrom apidecorators.fields import all_fields \nfrom cerberus import Validator\n\n#given this schema\n\ns_budget = {\n '_id': {'type': 'string'},\n 'applicant': {'type': 'string'},\n 'offerer': {'type': 'string'},\n 'description': {'type': 'string', 'required': True},\n 'amount': {'type': 'integer'},\n 'favorite': {'type': 'boolean'},\n 'comment': {'type': 'dict',\n 'schema': {\n \"text\": {\"type\": \"string\"},\n \"date\": {\"type\": \"float\"}\n }\n }\n}\n\ns_demand = {\n '_id': {'type': 'string'},\n 'applicant': {'type': 'string'},\n 'description': {'type': 'string', 'required': True},\n 'location': {'type': 'string'},\n 'budgets': {\n 'type': 'list',\n 'schema': s_budget\n }\n}\n\nv_demand = Validator(s_demand)\nv_budget = Validator(s_budget)\n\n# we define a POST this way\n\ndef set_routes_demand(routes):\n\n @routes.post('/api/demand') # aiohttp routes\n @jwt_auth # must receive a valid JWT token\n @collection('demand') # which collection\n @write_access({'*': '*'}) # any user can write any field\n @validate(validator=v_demanda) # set the cerberus validator\n @insert # it will be an insert\n async def post_demand(document, request, token):\n document['applicant'] = token['user']\n return document # the returned document will be written in the collection described above\n\n# we GET a document this way:\n\n @routes.get('/api/demand/{_id}')\n @jwt_auth\n @collection('demand')\n # the user stores in the field applicant can read all fields minus location\n # any other user can read only description and location\n @read_access({'applicant': all_fields(s_demand) - {'location'}, '*': {'description', 'location'}})\n @get # it will be a get\n async def get_demand(document, token):\n # the last chance to change the document that will be sent to the client \n return document\n\n# we PUT a document this way:\n\n @routes.put('/api/demand/{_id}')\n @jwt_auth\n @collection('demand')\n @write_access({'applicant': {'description', 'location'}})\n @validate(update=True, validator=v_demanda) # see the attribute update=True\n @update # it will be an update\n async def put_demand(old_doc, document, request, token): \n return document\n\n# let see how to push to an array:\n\n @routes.put('/api/demand/{_id}/budgets')\n @jwt_auth\n @collection('demand')\n @write_access({'*': {'description', 'amount'}})\n @validate(validator=v_budget)\n @push('budgets') # the name of the array\n async def push_budget(old_doc, document, request, token):\n document['offerer'] = token['user']\n document['applicant'] = old_doc['applicant'] \n return document\n\n# update an element of an array\n\n @routes.put('/api/demand/{_id}/budgets/{sub_id}')\n @jwt_auth\n @collection('demand')\n # the user stores in offerer field of subdocument (sub_id) can update description and amount\n # the user stores in applicant field of subdocument (sub_id) can update favorite and comment\n # if you pass root a value different from '.', that will be the root where to check users of write_access\n @write_access({'offerer': {'description', 'amount'}, 'applicant': {'favorite', 'comment'}}, root='budgets')\n @update_array('budgets')\n async def update_budgets(old_doc, document, token): \n return document\n\n# get many\n\n @routes.get('/api/demand')\n @public\n @collection('demand')\n @read_access({'*': '*'})\n @get_many\n async def get_many_demands(col, query, token): \n applicant = query[\"applicant\"]\n return col.find({\"applicant\": applicant}).skip(0).limit(10)\n\n# get from an array\n\n @routes.get('/api/demanddemand/{_id}/budgets')\n @jwt_auth\n @collection('demand')\n @read_access({'offerer': {'description', 'amount'}})\n @get_from_array('budgets')\n async def get_presupuestos(document, token): \n #the chance to remove empty objects in array \n return document\n\n# and you can do aggregates\n\n @routes.get('/api/demand/aggregates/comments')\n @public # it is not restricted by a JWT token, the user will be anonymous\n @collection('demand')\n @aggregate\n async def get_aggr_comments(col, query, token): \n offerer = query[\"offerer\"]\n pipeline = [\n {\"$match\": {\"budgets.offerer\": offerer}},\n {\"$unwind\": \"$budgets\"},\n {\"$match\": {\"budgets.offerer\": offerer}},\n {\"$group\": {\"_id\": \"$budgets.offerer\", \"comments\": {\"$push\": {\n \"text\": \"$budgets.comment.text\",\n \"date\": \"$budgets.comment.date\",\n \"author\": \"$applicant\"\n }}}}\n ]\n return col.aggregate(pipeline)\n\n```\n\nIn read_access and write_access you can use dot notation and the $ for the array. Example:\n\n```python\n@read_access({'applicant': all_fields(s_demand) | {'budgets.$.comment'}})\n\n```\n\n```python\n#app.py\nimport asyncio\nfrom demand import set_routes_demand\nfrom aiohttp import web\nfrom apidecorators.api import cors_factory\n\n\nasync def handle(loop):\n app = web.Application(loop=loop, middlewares=[cors_factory])\n routes = web.RouteTableDef()\n\n set_routes_demand(routes)\n app.router.add_routes(routes)\n await loop.create_server(app.make_handler(), '0.0.0.0', 8888)\n\ndef main(): \n loop = asyncio.get_event_loop()\n loop.run_until_complete(handle(loop))\n print(\"Server started at port 8888\")\n loop.run_forever()\n loop.close()\n\nif __name__ == '__main__':\n main()\n```\n\ndocker-compose.yml\n```yml\n environment:\n - DB_URI=mongodb://:@url:port/data-base\n - DB=data-base\n - SECRET=secret\n```\n\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://gitlab.com/miguel.alarcos/apidecorators", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "apidecorators", "package_url": "https://pypi.org/project/apidecorators/", "platform": "", "project_url": "https://pypi.org/project/apidecorators/", "project_urls": { "Homepage": "https://gitlab.com/miguel.alarcos/apidecorators" }, "release_url": "https://pypi.org/project/apidecorators/0.2.6/", "requires_dist": [ "PyJWT (>=1.6.4)", "aiohttp (>=3.4.4)", "flatten-dict (>=0.0.3.post1)", "motor (>=2.0.0)" ], "requires_python": "", "summary": "API Decorators", "version": "0.2.6" }, "last_serial": 4560346, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "fab8906ed9bbb5cd891137f12de86e60", "sha256": "fc8b3a0e793f5fd41efc21ca9bd660f69650c172742cc8bef517bfeb26068608" }, "downloads": -1, "filename": "apidecorators-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "fab8906ed9bbb5cd891137f12de86e60", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4209, "upload_time": "2018-10-23T16:08:35", "url": "https://files.pythonhosted.org/packages/73/30/c9791b41c9dab69d7de2e4eb66851918f4dd3306223da93db6dc551036ba/apidecorators-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "056667fb5826c6927342ee43c16a94ff", "sha256": "d577b04578c91b81d13ac503d03f7b5d379f1c926a4e8cdb227e1d1ffa71f381" }, "downloads": -1, "filename": "apidecorators-0.0.1.tar.gz", "has_sig": false, "md5_digest": "056667fb5826c6927342ee43c16a94ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2971, "upload_time": "2018-10-23T16:08:36", "url": "https://files.pythonhosted.org/packages/fc/d0/8052aa18f28fcf857be4e99024a756b12c924fbd4e0f5353480eeb70b82c/apidecorators-0.0.1.tar.gz" } ], "0.0.10": [ { "comment_text": "", "digests": { "md5": "24b2b2f4bffcb88c7727314ff3ceec30", "sha256": "fa18dd535073f9db73c3360bdc976d3eef7dc416f78f19f786632a41bc43b0c8" }, "downloads": -1, "filename": "apidecorators-0.0.10-py3-none-any.whl", "has_sig": false, "md5_digest": "24b2b2f4bffcb88c7727314ff3ceec30", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5555, "upload_time": "2018-11-09T08:26:08", "url": "https://files.pythonhosted.org/packages/b9/0b/b11cf158aed4e0e781a02982f717b495e072098da96bff36e10c8cb80ef4/apidecorators-0.0.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6a99b218d8321066f1b87f6eb0506e73", "sha256": "fd7e0267533f7dfe0930510f24f979c50991e08176e22d4efd301590f50da3d6" }, "downloads": -1, "filename": "apidecorators-0.0.10.tar.gz", "has_sig": false, "md5_digest": "6a99b218d8321066f1b87f6eb0506e73", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4498, "upload_time": "2018-11-09T08:26:10", "url": "https://files.pythonhosted.org/packages/a2/e9/7ebc96fb6405e2498b330cabffd4c665fbe3b184278460aedda255be3063/apidecorators-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "b978c4270a715a5ffe09223a9879247e", "sha256": "8567aa1d1d6574b934a86d468c8edeee13e2b33d64b6a76e12697f5e54961d47" }, "downloads": -1, "filename": "apidecorators-0.0.11-py3-none-any.whl", "has_sig": false, "md5_digest": "b978c4270a715a5ffe09223a9879247e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5646, "upload_time": "2018-11-10T14:22:13", "url": "https://files.pythonhosted.org/packages/f7/77/2dffc111701e65a12651af1ddedffa2a515811b9a31e1d2462a9b539a3dd/apidecorators-0.0.11-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "601d5349470b8150c575083ebd63fa01", "sha256": "c909dac7a64d567400b5d340079c3488fb4d1b3e96da38b01317cd3fa9878a27" }, "downloads": -1, "filename": "apidecorators-0.0.11.tar.gz", "has_sig": false, "md5_digest": "601d5349470b8150c575083ebd63fa01", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4582, "upload_time": "2018-11-10T14:22:14", "url": "https://files.pythonhosted.org/packages/ad/d5/61ee3091e20299fd530b82ea2474e75a01919fa4064cfa10f04411fc4342/apidecorators-0.0.11.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "b57f69057dfd2111ca1fce37f54b0122", "sha256": "834a5c580355e499f187d4e3fdc165d111668f99c74bfe002de835e23b066908" }, "downloads": -1, "filename": "apidecorators-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b57f69057dfd2111ca1fce37f54b0122", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4363, "upload_time": "2018-10-24T09:00:48", "url": "https://files.pythonhosted.org/packages/69/3a/b671685865963d9473fe4611887ad2a3e4f182dc92ea0829aa7e896eef37/apidecorators-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "24395c5b7db417c96b15ea2b2b145287", "sha256": "a2ae658456ec7c2367383d03e2556dd9310ea3033be0364fd8145d3e5183fb16" }, "downloads": -1, "filename": "apidecorators-0.0.2.tar.gz", "has_sig": false, "md5_digest": "24395c5b7db417c96b15ea2b2b145287", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3155, "upload_time": "2018-10-24T09:00:49", "url": "https://files.pythonhosted.org/packages/a0/84/f1e5a0df31e66cee755c8ed0f73ce138d60e592b20cf639a67b6ece62e07/apidecorators-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "d0b3b7bbfaf53b13821eae32657bfb7b", "sha256": "23dc75627617fa88c19444b0ac7b1d5181a4f5f349461bc1fda06aaf28eef82a" }, "downloads": -1, "filename": "apidecorators-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "d0b3b7bbfaf53b13821eae32657bfb7b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4221, "upload_time": "2018-10-26T11:27:22", "url": "https://files.pythonhosted.org/packages/10/37/a93f418c66f0c4201306cb2a683b8b300d725ef3b7112b2f157065d330ea/apidecorators-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7d1e69a9a8d564ee086883c329411205", "sha256": "cb3084ad0d686cf6809269f5430859bd90ca7c72767757bfd796995daf8f4418" }, "downloads": -1, "filename": "apidecorators-0.0.3.tar.gz", "has_sig": false, "md5_digest": "7d1e69a9a8d564ee086883c329411205", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3085, "upload_time": "2018-10-26T11:27:23", "url": "https://files.pythonhosted.org/packages/e6/a8/68717df757bcc09e55abdc05da0ba9f238efb9fc2109f67d432dc819888e/apidecorators-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "435356b0645ec4dbbf4999e067af6423", "sha256": "33dffdb9cc19f07f099b9dcfa66ed836cb781176802bb4b4bde2f3fe13a58166" }, "downloads": -1, "filename": "apidecorators-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "435356b0645ec4dbbf4999e067af6423", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4440, "upload_time": "2018-10-31T16:13:43", "url": "https://files.pythonhosted.org/packages/d5/b4/81f65d11c9d7dba95fb71cf43ede2c0f7726b1352037571d6c3820650463/apidecorators-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2af9e66efa7ccaacabe61eca7320d316", "sha256": "a8223284b272a7355565c26ffb0c8ce4f0e4d6d3edbc7c89d1693dff904b3e76" }, "downloads": -1, "filename": "apidecorators-0.0.4.tar.gz", "has_sig": false, "md5_digest": "2af9e66efa7ccaacabe61eca7320d316", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3398, "upload_time": "2018-10-31T16:13:45", "url": "https://files.pythonhosted.org/packages/0e/34/acab4b6327fd6711ab6279853618f435fea8a648081e62d0a8d2878f2088/apidecorators-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "2314951181c365da60a0f6ba697a2b7b", "sha256": "be48bcf54323a0de107c7cf4f3216a4ae17c8ef63e4e9027ed5bbc15e9594125" }, "downloads": -1, "filename": "apidecorators-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "2314951181c365da60a0f6ba697a2b7b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5408, "upload_time": "2018-11-05T17:32:25", "url": "https://files.pythonhosted.org/packages/de/6a/88034eb9cb3d0bd497eaad357d1fb1e125d411fb2eb12be299dd2acc9186/apidecorators-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "29761514702fe2bb08738d11e9e77fbb", "sha256": "13b54e411e941f8de3ea315637fc454a685c155bc4b767ca37e175f9eb400e1d" }, "downloads": -1, "filename": "apidecorators-0.0.5.tar.gz", "has_sig": false, "md5_digest": "29761514702fe2bb08738d11e9e77fbb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4329, "upload_time": "2018-11-05T17:32:27", "url": "https://files.pythonhosted.org/packages/d8/82/e95430c54958577116202df82fc12d5d57464b96d34202319b1b58390fc4/apidecorators-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "2a7546f522d53c294128c641c7f6a3c2", "sha256": "94b933ba9c5f9c497051677f11e2d21578f62710fcee3d52a66c5e67db20a7a3" }, "downloads": -1, "filename": "apidecorators-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "2a7546f522d53c294128c641c7f6a3c2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5521, "upload_time": "2018-11-06T15:57:33", "url": "https://files.pythonhosted.org/packages/db/4d/d80bce96af45df615d90654b28bbd20572d692618266bea0bc82b040d512/apidecorators-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "924075a4b5e9449bda0f8556b6e3f2ea", "sha256": "03742ff2fc9476133ef866a554e617857b1a728592b2d1caf63f8104fef5d6b3" }, "downloads": -1, "filename": "apidecorators-0.0.6.tar.gz", "has_sig": false, "md5_digest": "924075a4b5e9449bda0f8556b6e3f2ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4465, "upload_time": "2018-11-06T15:57:34", "url": "https://files.pythonhosted.org/packages/9f/75/6e6ce6d41678aff8d80554698b8f73b251f6d198beb33b231b04f957977f/apidecorators-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "b0d0ae4716ad93ffa4496c5d030a81a1", "sha256": "530193a5abd6fb68f45cb49263713f0da93847e6029ee39da9141f49aed7abb8" }, "downloads": -1, "filename": "apidecorators-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "b0d0ae4716ad93ffa4496c5d030a81a1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5614, "upload_time": "2018-11-07T12:10:21", "url": "https://files.pythonhosted.org/packages/38/12/7229a2cef44e0d1d0186530c2b30efdaf8b5684a46b4078167727db31e61/apidecorators-0.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "17d2f1cf4ccaf7ef7c0d1d296de3dc57", "sha256": "432d0f13584f877cbffc6cfb90526f35d2f78cd9c1a159072f5dea597651771c" }, "downloads": -1, "filename": "apidecorators-0.0.7.tar.gz", "has_sig": false, "md5_digest": "17d2f1cf4ccaf7ef7c0d1d296de3dc57", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4549, "upload_time": "2018-11-07T12:10:22", "url": "https://files.pythonhosted.org/packages/f1/25/9fa0ae40c9ae83f1f1c4d8cdbab0783674ef05c81a19f9ad2e461c2db5e7/apidecorators-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "3ec1e5384aa60cef617624cb9d56d45d", "sha256": "886e87cd5f9650c9df74617ab1b02ca3eba81936367aff4b9b222047a1563899" }, "downloads": -1, "filename": "apidecorators-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "3ec1e5384aa60cef617624cb9d56d45d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5560, "upload_time": "2018-11-07T19:33:14", "url": "https://files.pythonhosted.org/packages/d2/6d/43cd98c0cf842ead7b67111ad1cb6a2fba59dda24af48d05a37290741cce/apidecorators-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "343cacfee72b10327df634cb611b04fa", "sha256": "3cddb9a2cd0b22fe7a553596319f24fbf3e07edf1c4d266439cee99013edb470" }, "downloads": -1, "filename": "apidecorators-0.0.8.tar.gz", "has_sig": false, "md5_digest": "343cacfee72b10327df634cb611b04fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4498, "upload_time": "2018-11-07T19:33:16", "url": "https://files.pythonhosted.org/packages/73/ef/3a7dda2e2c2c1d39bffd83973e8f3904f7cdc0d688866635ab0d491037ec/apidecorators-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "8a21c78f09eb0d27c9a040fef792f0d6", "sha256": "43f4bd55d527816c07968f3b8f0326e6081c69e96b5abe405be5383b9fa032ec" }, "downloads": -1, "filename": "apidecorators-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "8a21c78f09eb0d27c9a040fef792f0d6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5523, "upload_time": "2018-11-09T06:04:29", "url": "https://files.pythonhosted.org/packages/06/01/567be43fbba0657a51295fc072f9f3c242ea4b5541921f0aace974f40de7/apidecorators-0.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1da1cffe40785f9d69ad4deb7fe97f7e", "sha256": "9a4ff01c607991a86aca6a0ef81bfc9261395dd6cb0a38ff94b980658e8787cd" }, "downloads": -1, "filename": "apidecorators-0.0.9.tar.gz", "has_sig": false, "md5_digest": "1da1cffe40785f9d69ad4deb7fe97f7e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4464, "upload_time": "2018-11-09T06:04:30", "url": "https://files.pythonhosted.org/packages/bc/9d/d7e2af5bba25427c84291dc6f38962f00aece9450ec965876893b32907c4/apidecorators-0.0.9.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "11b4824ecfbdc9949a62a409b0e5d747", "sha256": "f02439046b8c3a3428f3b5d87492be3e68d87ad50578c666b7d097f23c52e2e9" }, "downloads": -1, "filename": "apidecorators-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "11b4824ecfbdc9949a62a409b0e5d747", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6168, "upload_time": "2018-11-16T09:56:36", "url": "https://files.pythonhosted.org/packages/e9/07/05f08122da51d4c3fbbf26f31dfe2009be143071f13e2506f5ee8aef453d/apidecorators-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0d5f5abe04b3e28de661a8b3d4fa214c", "sha256": "f19fee932e538498265000f040510814550e0c585f8f45d9f8cc468528b45783" }, "downloads": -1, "filename": "apidecorators-0.1.0.tar.gz", "has_sig": false, "md5_digest": "0d5f5abe04b3e28de661a8b3d4fa214c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5330, "upload_time": "2018-11-16T09:56:38", "url": "https://files.pythonhosted.org/packages/08/ff/01feae5674c7b103313d253ae25edee609b51365dc5dd3060eb82769a25d/apidecorators-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "f2f9d85881a49acc1cb7fbadd896fa10", "sha256": "5ab466b860503386ee3f7e3979ad5188a4c83e43ab015653f38b304d5b6dd53d" }, "downloads": -1, "filename": "apidecorators-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f2f9d85881a49acc1cb7fbadd896fa10", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6298, "upload_time": "2018-11-24T16:33:05", "url": "https://files.pythonhosted.org/packages/9e/31/90384d2c3ac80bb2cb0092435559bc99fab29e63d3da36dc808235a948df/apidecorators-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cd2fa35bdfc1bcb517bb58a63d7efed6", "sha256": "fa5bfaa9f05f864bf01e0aba49008a55ace2c6b3f8346a29b4b6ec9a2db794c9" }, "downloads": -1, "filename": "apidecorators-0.1.1.tar.gz", "has_sig": false, "md5_digest": "cd2fa35bdfc1bcb517bb58a63d7efed6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5497, "upload_time": "2018-11-24T16:33:07", "url": "https://files.pythonhosted.org/packages/4d/e8/3e79ff8c757b4a2a95ad9848360e747f743614261441cec5421295ae6067/apidecorators-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "f872fbc1dbe9b6f5e37d30fb7858146f", "sha256": "caa94855bbb6caa0f646dd230dbfd9dc89239bf97bb94900d8379b4139fb1ec9" }, "downloads": -1, "filename": "apidecorators-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "f872fbc1dbe9b6f5e37d30fb7858146f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5799, "upload_time": "2018-11-29T10:10:21", "url": "https://files.pythonhosted.org/packages/4d/61/aed6df54cf43b6f0a934cfb70135900b6302df38a2ed744f25f8fe9780b1/apidecorators-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "def8f40759e9ff58b191f80a41814185", "sha256": "0a139c964a79fc67d2a1edc7fd050af9bf8efc327ace48c7c010b379746b4f18" }, "downloads": -1, "filename": "apidecorators-0.1.2.tar.gz", "has_sig": false, "md5_digest": "def8f40759e9ff58b191f80a41814185", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4707, "upload_time": "2018-11-29T10:10:22", "url": "https://files.pythonhosted.org/packages/d7/b6/281c3419bbbced7046507eea8828e25d0ca0e45aef3a7dcb60483645c17f/apidecorators-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "674b09eda6271aabb92d36d19a38c019", "sha256": "546964bdd8e80a5687960cfaa89949872d028c06d97bfbf0f0a02799e265dc52" }, "downloads": -1, "filename": "apidecorators-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "674b09eda6271aabb92d36d19a38c019", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5910, "upload_time": "2018-11-29T12:17:19", "url": "https://files.pythonhosted.org/packages/28/5f/754364afc30baf20b355f93ab34a42c0a41ec616f35cf1bc7cc08f45f808/apidecorators-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "12e76991aa3188308cd1676d266109bb", "sha256": "926a799f7e7965729f3f1554e95db0d60b35278e100d8c939bb4408af163c4a0" }, "downloads": -1, "filename": "apidecorators-0.1.3.tar.gz", "has_sig": false, "md5_digest": "12e76991aa3188308cd1676d266109bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4822, "upload_time": "2018-11-29T12:17:21", "url": "https://files.pythonhosted.org/packages/c2/1a/359d7d29d05193fe762e1da66f137b69a1677613e0e169f33939d9de3786/apidecorators-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "9beb18be0bed7ee535dd8f398e5958bf", "sha256": "13539abac9ec5d61abdcf9edaf29e645dc8dc88fdac0fbf16ef604340ceb8b2b" }, "downloads": -1, "filename": "apidecorators-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "9beb18be0bed7ee535dd8f398e5958bf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6236, "upload_time": "2018-11-29T19:49:19", "url": "https://files.pythonhosted.org/packages/de/1c/f4e55c985ff662975126962a361b87258f1866a6f740d2b91111847f1c88/apidecorators-0.1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a4608ca39828f6119e05ad8cff96546b", "sha256": "513bbb77f3e88b11af972f19e4b92634c9200c3da79d71a1568ce82310665e8a" }, "downloads": -1, "filename": "apidecorators-0.1.4.tar.gz", "has_sig": false, "md5_digest": "a4608ca39828f6119e05ad8cff96546b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4976, "upload_time": "2018-11-29T19:49:20", "url": "https://files.pythonhosted.org/packages/f3/d5/62b06f386382086ad0a513b81879810a43153e2dae4e83179d6518381d34/apidecorators-0.1.4.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "06ede50c27dfa0725f4fea1baf6e940e", "sha256": "af6d3388f84ba0b8fba8e159d6a7b4e1454c09c70d958684dddaeb8ed6dbaa74" }, "downloads": -1, "filename": "apidecorators-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "06ede50c27dfa0725f4fea1baf6e940e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6465, "upload_time": "2018-11-30T02:22:32", "url": "https://files.pythonhosted.org/packages/95/bf/5373bacd5f3f06f70945630433598170c7c104e40f2c8eab0d30ed80da02/apidecorators-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "54dc686cbbcad6173526bcdc64948552", "sha256": "bf49b4293424c39006932520f7d618d616a63bb976b3a23a53c6e45c78a056c2" }, "downloads": -1, "filename": "apidecorators-0.2.0.tar.gz", "has_sig": false, "md5_digest": "54dc686cbbcad6173526bcdc64948552", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5166, "upload_time": "2018-11-30T02:22:34", "url": "https://files.pythonhosted.org/packages/93/c5/acf68ed62c3f095a68f1f602b57aa2894dcfb60b3057980c00d829b12298/apidecorators-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "3ccffe9809a2abfe176d24a91122b3db", "sha256": "5540caf9461fdb06384860fc35499f4a41bd0e25a12b02dbfa73ad80c09d2f01" }, "downloads": -1, "filename": "apidecorators-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3ccffe9809a2abfe176d24a91122b3db", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6538, "upload_time": "2018-11-30T11:12:22", "url": "https://files.pythonhosted.org/packages/74/53/29f3c56ca7d38c5219d2ef00c1910074aa7723ec44208d3766ccd6a5e649/apidecorators-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "789b9acc7bb2cd65e9dfd26458edbb4f", "sha256": "7060cebe0b094e130035d82eb8eb2acfbc34f2655fe19808742589f716cd902f" }, "downloads": -1, "filename": "apidecorators-0.2.1.tar.gz", "has_sig": false, "md5_digest": "789b9acc7bb2cd65e9dfd26458edbb4f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5246, "upload_time": "2018-11-30T11:12:23", "url": "https://files.pythonhosted.org/packages/30/db/90297d2621df63777214067600e70882bba9c09680a475514635d95fcc34/apidecorators-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "086617b300b0bc97d495fc042bd5a5e7", "sha256": "2f555cf19b8c954ab6801a5f6c1fa0a48df865af773fd4d5ef187c1aefcdf975" }, "downloads": -1, "filename": "apidecorators-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "086617b300b0bc97d495fc042bd5a5e7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6535, "upload_time": "2018-11-30T23:18:19", "url": "https://files.pythonhosted.org/packages/bb/c4/e22a826bd0e728d4ac9b78bc7ca323f08a4702d8a6e0cc2cbff680c85261/apidecorators-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "28a5df3fae53930fbf2f02e27023bc10", "sha256": "e9e5fecc9f249de77ef7e8971d83996d83e3846be83df97db502f9d15b476ac1" }, "downloads": -1, "filename": "apidecorators-0.2.2.tar.gz", "has_sig": false, "md5_digest": "28a5df3fae53930fbf2f02e27023bc10", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5246, "upload_time": "2018-11-30T23:18:21", "url": "https://files.pythonhosted.org/packages/36/a9/860869dc105f70bb412fbc21af96e0eb4f6b33ce1bf6988dc116f2d97620/apidecorators-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "fa238d9d7b19c851587efc0add35261b", "sha256": "7fb3aa33fe9d14514939987135d1404d79dba472f0908741d982e230417d9e7b" }, "downloads": -1, "filename": "apidecorators-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "fa238d9d7b19c851587efc0add35261b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6574, "upload_time": "2018-12-01T16:48:15", "url": "https://files.pythonhosted.org/packages/49/f1/78898493b158b8e744dbbd920515a0354819466b8651b42e1d9cfc81b59f/apidecorators-0.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "beb7a57f1c3e815cdfec1b90d776c8b1", "sha256": "7539214f851782d09236d95449e7984e92ce0d2e916d614655dd2d144eb53f72" }, "downloads": -1, "filename": "apidecorators-0.2.3.tar.gz", "has_sig": false, "md5_digest": "beb7a57f1c3e815cdfec1b90d776c8b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5273, "upload_time": "2018-12-01T16:48:17", "url": "https://files.pythonhosted.org/packages/62/f7/0ebad72a221db816349d2297beb50a43d8b5c96c631ab11c156ae60f9804/apidecorators-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "f9a51aba4a95ba4f3eab1e872a6220f4", "sha256": "1dd91a513cdca4d555b88ca8e0b66c2efeb5f4f70f1e2146fa523381160fd4b1" }, "downloads": -1, "filename": "apidecorators-0.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "f9a51aba4a95ba4f3eab1e872a6220f4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7293, "upload_time": "2018-12-03T10:05:08", "url": "https://files.pythonhosted.org/packages/f6/e6/cdd51da9738428edc21f510c407b3a08bf98567f6917a4a7b06306579316/apidecorators-0.2.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "af73b0e1dad964742504e638c96b04ff", "sha256": "8c7d7b583967456cf07954c25fdf1e4ceafc82b9108331cefcfa5e9ae5730f0b" }, "downloads": -1, "filename": "apidecorators-0.2.4.tar.gz", "has_sig": false, "md5_digest": "af73b0e1dad964742504e638c96b04ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6199, "upload_time": "2018-12-03T10:05:10", "url": "https://files.pythonhosted.org/packages/e7/1b/a92423d52701a9bb6cfae24d679cd424eea144ca9d5360e11e1be73abd3c/apidecorators-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "eeabca4a9bf37a23d8aa03db269ffdfa", "sha256": "9f57ef2ac97f3ccdd016ad1bcbbdb98983d61ae84902ef3bbceb816423ad4844" }, "downloads": -1, "filename": "apidecorators-0.2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "eeabca4a9bf37a23d8aa03db269ffdfa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7433, "upload_time": "2018-12-04T12:24:58", "url": "https://files.pythonhosted.org/packages/e3/76/26bc4c37f5bb11191974735186eccbd01442aad7b75074a9dbcea66be61c/apidecorators-0.2.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "455e8d3ea692016b6b5b437fad8e61bb", "sha256": "0bd4eb7d1974704a41bb4ae1cb219975b883a69de635a85875b7c5e16e453f76" }, "downloads": -1, "filename": "apidecorators-0.2.5.tar.gz", "has_sig": false, "md5_digest": "455e8d3ea692016b6b5b437fad8e61bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6405, "upload_time": "2018-12-04T12:24:59", "url": "https://files.pythonhosted.org/packages/e8/e2/fd5d324fa4accb5c192d82c40a3ee0e6f23dea0cc1f1e420974cd7c24815/apidecorators-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "5a0a43b4506b3a3c382380c5a4f6e138", "sha256": "8806527911afa77ebf9c5d488f4785d86121875b69c78065ea9be624ae4e3257" }, "downloads": -1, "filename": "apidecorators-0.2.6-py3-none-any.whl", "has_sig": false, "md5_digest": "5a0a43b4506b3a3c382380c5a4f6e138", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7497, "upload_time": "2018-12-04T16:54:57", "url": "https://files.pythonhosted.org/packages/2e/d9/ebb1ae030866c394fbd36689d31311f2af254108cd89325f89ca1c363aa0/apidecorators-0.2.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8eef9dddeabb8090326cfdd8ce86e484", "sha256": "b1a16d452549c1276e50344cc337f0a3477eafae2fcd2401c504620337c40f96" }, "downloads": -1, "filename": "apidecorators-0.2.6.tar.gz", "has_sig": false, "md5_digest": "8eef9dddeabb8090326cfdd8ce86e484", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6478, "upload_time": "2018-12-04T16:54:58", "url": "https://files.pythonhosted.org/packages/66/d5/f8f75aadf3dd3dca663a4d75ff47df8c386730a27615bdee8be1b8cd3b8c/apidecorators-0.2.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5a0a43b4506b3a3c382380c5a4f6e138", "sha256": "8806527911afa77ebf9c5d488f4785d86121875b69c78065ea9be624ae4e3257" }, "downloads": -1, "filename": "apidecorators-0.2.6-py3-none-any.whl", "has_sig": false, "md5_digest": "5a0a43b4506b3a3c382380c5a4f6e138", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7497, "upload_time": "2018-12-04T16:54:57", "url": "https://files.pythonhosted.org/packages/2e/d9/ebb1ae030866c394fbd36689d31311f2af254108cd89325f89ca1c363aa0/apidecorators-0.2.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8eef9dddeabb8090326cfdd8ce86e484", "sha256": "b1a16d452549c1276e50344cc337f0a3477eafae2fcd2401c504620337c40f96" }, "downloads": -1, "filename": "apidecorators-0.2.6.tar.gz", "has_sig": false, "md5_digest": "8eef9dddeabb8090326cfdd8ce86e484", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6478, "upload_time": "2018-12-04T16:54:58", "url": "https://files.pythonhosted.org/packages/66/d5/f8f75aadf3dd3dca663a4d75ff47df8c386730a27615bdee8be1b8cd3b8c/apidecorators-0.2.6.tar.gz" } ] }