{ "info": { "author": "Dmitry Galkin", "author_email": "mon4ter@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# fashionable\nDecorate your project with some fashionable supermodels.\n\n### Model example\n```python\nfrom typing import List, Optional\n\nfrom fashionable import Attribute, Model\n\n\nclass Project(Model):\n id = Attribute(str, limit=32)\n name = Attribute(str)\n organization = Attribute(Optional[str])\n domain = Attribute(Optional[str])\n links = Attribute(Optional[List[str]])\n \nproject = Project(1, 'Test')\n```\n\n### Supermodel example with Sanic\n```python\nfrom typing import List, Optional\n\nfrom fashionable import Attribute, Supermodel\nfrom sanic import Sanic\nfrom sanic.response import json, HTTPResponse\n\napp = Sanic()\napp.db = ...\n\nclass Project(Supermodel):\n _ttl = 300\n id = Attribute(str, limit=32)\n name = Attribute(str)\n organization = Attribute(Optional[str])\n domain = Attribute(Optional[str])\n links = Attribute(Optional[List[str]])\n \n @staticmethod\n async def _create(raw: dict):\n await app.db.project_create(raw)\n\n @staticmethod\n async def _get(id_: str) -> Optional[dict]:\n return await app.db.project_get(id_)\n\n @staticmethod\n async def _update(id_: str, raw: dict):\n await app.db.project_update(id_, raw)\n\n @staticmethod\n async def _delete(id_: str):\n await app.db.project_delete(id_)\n\n\n@app.get('/project/')\nasync def project_get(request, id_):\n project = await Project.get(id_)\n return json(dict(project))\n\n\n@app.post('/project')\nasync def project_create(request):\n project = await Project.create(**request.json)\n return json(\n dict(project),\n status=201,\n headers={'Location': '/project/' + project.id},\n )\n\n\n@app.put('/project/')\nasync def project_update(request, id_):\n project = await Project.get(id_, fresh=True)\n await project.update(**request.json)\n return json(dict(project))\n\n\n@app.delete('/project/')\nasync def project_delete(request, id_):\n project = await Project.get(id_, fresh=True)\n await project.delete()\n return HTTPResponse(status=204)\n\n\nif __name__ == '__main__':\n app.run(host='0.0.0.0', port=8000)\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/mon4ter/fashionable", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "fashionable", "package_url": "https://pypi.org/project/fashionable/", "platform": "", "project_url": "https://pypi.org/project/fashionable/", "project_urls": { "Homepage": "https://github.com/mon4ter/fashionable" }, "release_url": "https://pypi.org/project/fashionable/0.9.0/", "requires_dist": null, "requires_python": "", "summary": "Decorate your project with some fashionable supermodels", "version": "0.9.0" }, "last_serial": 5865345, "releases": { "0.2.0": [ { "comment_text": "", "digests": { "md5": "5e2098bcd0bd2c416e480ab8b50c66be", "sha256": "f71b6fcffdc4dd2559582b5ec85c5260f23a5c50697692c31228507028a77d29" }, "downloads": -1, "filename": "fashionable-0.2.0.tar.gz", "has_sig": false, "md5_digest": "5e2098bcd0bd2c416e480ab8b50c66be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3362, "upload_time": "2018-09-17T13:47:03", "url": "https://files.pythonhosted.org/packages/39/66/a79bf6a58e484a21e63ba49d48026e65d2ee7922e25938210da74125d6e1/fashionable-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "0930861991cb17a2c07d96bacca70852", "sha256": "b17e5162ada7840da2f78a354517b449dedea4f5012d83af87b7b69e859100e2" }, "downloads": -1, "filename": "fashionable-0.2.1.tar.gz", "has_sig": false, "md5_digest": "0930861991cb17a2c07d96bacca70852", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4251, "upload_time": "2018-09-18T09:14:48", "url": "https://files.pythonhosted.org/packages/82/ee/033a2bfb518f45486fb590fbae3ed28e4a612ab27f87b95f4284f17cb70f/fashionable-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "d51d46e2c4fda651b913ded8e1c19afa", "sha256": "acb47e642e63a212e6884183edec4c949d612c3743996cc039637e7c50654b86" }, "downloads": -1, "filename": "fashionable-0.2.2.tar.gz", "has_sig": false, "md5_digest": "d51d46e2c4fda651b913ded8e1c19afa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4277, "upload_time": "2018-09-18T12:53:58", "url": "https://files.pythonhosted.org/packages/11/57/2c0e2f5332a4fa4b8a8cd9540306b084171755ef5084f9a4935100bfdc3a/fashionable-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "ca096536c9ae614845a6feca7c55db8e", "sha256": "2e6dceddb054cf58524431a46fa75775b758c7325c54d674f4495fb2f3b697b4" }, "downloads": -1, "filename": "fashionable-0.2.3.tar.gz", "has_sig": false, "md5_digest": "ca096536c9ae614845a6feca7c55db8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4284, "upload_time": "2018-09-18T14:17:10", "url": "https://files.pythonhosted.org/packages/ef/a3/4fc68ef3b7b1a507830bac7b53f4a9a91fcbc913c6c57c6416ab23854695/fashionable-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "25ba0caea6786044a2cacc44311aa095", "sha256": "65a55a1701fc5bfc562d8da627d84bbe20b30357532dab2bdaf79173ae6b869f" }, "downloads": -1, "filename": "fashionable-0.2.4.tar.gz", "has_sig": false, "md5_digest": "25ba0caea6786044a2cacc44311aa095", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4245, "upload_time": "2018-09-18T15:01:49", "url": "https://files.pythonhosted.org/packages/3a/4e/17bc2c6d44d1799037feb0ae88b03903433e3bbbe3a3306b62114dc843c3/fashionable-0.2.4.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "1d6c317a4d39d6cbf2d4e67fffdb6050", "sha256": "2c0a98796a82bf2723e1516dce652fa4334f338f6c663b9f4305f4df3aa5d865" }, "downloads": -1, "filename": "fashionable-0.3.0.tar.gz", "has_sig": false, "md5_digest": "1d6c317a4d39d6cbf2d4e67fffdb6050", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4252, "upload_time": "2018-09-19T07:26:56", "url": "https://files.pythonhosted.org/packages/2b/92/5f958a43025cb48591ad688932a134cda8c894e01f511119eed2ed02425e/fashionable-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "36bebc47c943b85a1d4f7286c87343d1", "sha256": "fe972d9cd7f8cda85d3aa1b6a278f391a111a2fde0b05742be0eafeb06674dc7" }, "downloads": -1, "filename": "fashionable-0.3.1.tar.gz", "has_sig": false, "md5_digest": "36bebc47c943b85a1d4f7286c87343d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4290, "upload_time": "2018-09-28T13:04:17", "url": "https://files.pythonhosted.org/packages/7f/98/fef32eec31856f31dcbb85c93186b26e481899a122df6f1150a70078ce5d/fashionable-0.3.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "0cbfad52d9b2d65208f8603f8ead1f43", "sha256": "82b05f46de2a98a726246d0ae65ad8564a5f496a217612719e79bc70a55a6ccd" }, "downloads": -1, "filename": "fashionable-0.4.0.tar.gz", "has_sig": false, "md5_digest": "0cbfad52d9b2d65208f8603f8ead1f43", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4273, "upload_time": "2018-10-09T05:20:13", "url": "https://files.pythonhosted.org/packages/69/7f/2b9c3282a0c6754c8856900d44a61b9f84b288cfe0c27aa5104e23b15e7f/fashionable-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "a5ae8fd36c5326b7cda538a61cc7609f", "sha256": "58f92b2eac6e63f57e0674467b6f93b79e45551f57482660b7b8be6df7324e06" }, "downloads": -1, "filename": "fashionable-0.5.0.tar.gz", "has_sig": false, "md5_digest": "a5ae8fd36c5326b7cda538a61cc7609f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4430, "upload_time": "2018-10-11T12:26:05", "url": "https://files.pythonhosted.org/packages/ca/8a/f6852fecbfc22eff12cd0956060691048bfd9e2c514d7b20f18571a1689d/fashionable-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "9516207ffbbd38bdaa9b28e5f12ba26c", "sha256": "1f338a4b122e9b19deb2c974b39bf59accb36de35e76f33134df56295b603850" }, "downloads": -1, "filename": "fashionable-0.6.0.tar.gz", "has_sig": false, "md5_digest": "9516207ffbbd38bdaa9b28e5f12ba26c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4797, "upload_time": "2019-04-13T01:10:11", "url": "https://files.pythonhosted.org/packages/ed/4f/6f45c48b3c1dd4f5ef50c6207347389308b8f7f2df220e01c09a5c173c8f/fashionable-0.6.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "e3dcf2e26786a35a8bbcfd66dea9111f", "sha256": "7861d9a5e36254bf6ad61e693210f3a3f8a99dcfff7a99b7fdfde4bbf3db6f8d" }, "downloads": -1, "filename": "fashionable-0.7.0.tar.gz", "has_sig": false, "md5_digest": "e3dcf2e26786a35a8bbcfd66dea9111f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4770, "upload_time": "2019-05-29T08:41:33", "url": "https://files.pythonhosted.org/packages/de/a5/b2e855edb565cf67a173499fa56488ee160dcfc01bfd106c2502e4b9f8ec/fashionable-0.7.0.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "24d63e8633c91b2296408c233b227d10", "sha256": "833b4203a3a5a62b461a10a9c081f9d1a29aa90c2ec948d8ededefe00b63d90e" }, "downloads": -1, "filename": "fashionable-0.8.0.tar.gz", "has_sig": false, "md5_digest": "24d63e8633c91b2296408c233b227d10", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5174, "upload_time": "2019-07-03T15:13:11", "url": "https://files.pythonhosted.org/packages/80/08/7495822632beaaf49bf94be3f4266e3ea4d12f2808c0e13514e93233996e/fashionable-0.8.0.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "d10d3566762eac69eadb0bf9441ff72c", "sha256": "01063188b0fcdef6143c44d68164849c5d7a19df1647a1f043a4fee60f30b1c8" }, "downloads": -1, "filename": "fashionable-0.8.1.tar.gz", "has_sig": false, "md5_digest": "d10d3566762eac69eadb0bf9441ff72c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5365, "upload_time": "2019-07-04T12:45:43", "url": "https://files.pythonhosted.org/packages/ad/f8/dd9eb94f63374b419d50c441527b691e029f7eaaef5682a8152710079965/fashionable-0.8.1.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "83f6c70ae0d9f73543bffb0cd9fafe38", "sha256": "04848234ddca6b7ec7734e6cf6aa2ea6f9c9f06b4de6f4fba7cbf81c83d13b16" }, "downloads": -1, "filename": "fashionable-0.8.2.tar.gz", "has_sig": false, "md5_digest": "83f6c70ae0d9f73543bffb0cd9fafe38", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5514, "upload_time": "2019-07-05T10:17:33", "url": "https://files.pythonhosted.org/packages/c3/3c/307bf4485a2e796878cf29c8550749b85eb40a0f042f976b3400205a7b75/fashionable-0.8.2.tar.gz" } ], "0.8.3": [ { "comment_text": "", "digests": { "md5": "e79ffe1f565995c30efde1ae02d05b97", "sha256": "e28d6f0d09ca1b629a3022974a4a75d92718081670aa3c1a82142d3543dfe997" }, "downloads": -1, "filename": "fashionable-0.8.3.tar.gz", "has_sig": false, "md5_digest": "e79ffe1f565995c30efde1ae02d05b97", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5538, "upload_time": "2019-07-06T07:21:32", "url": "https://files.pythonhosted.org/packages/a4/e6/36b8663a6b4e1aafca7fb45d413a23cf149f4830df314b8b89528d8c6a93/fashionable-0.8.3.tar.gz" } ], "0.8.4": [ { "comment_text": "", "digests": { "md5": "0f3145bd5a94e1e6c648a7b5aa775459", "sha256": "5823cce2b41e5b3870c630d170ee836b3e98b95da39969bef1e15f7e206a9229" }, "downloads": -1, "filename": "fashionable-0.8.4.tar.gz", "has_sig": false, "md5_digest": "0f3145bd5a94e1e6c648a7b5aa775459", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5592, "upload_time": "2019-07-06T07:53:44", "url": "https://files.pythonhosted.org/packages/c9/46/191eb1930a485ae8ac6b994e2c3fd9ce06f4cb78e6fe2ad021d94ccbd207/fashionable-0.8.4.tar.gz" } ], "0.8.5": [ { "comment_text": "", "digests": { "md5": "8fe222f5a64ce5943a0ce972240609f7", "sha256": "a910ef7701f963cb31ca3fffe75210f40368f36c30d49e645d9ff07ca0020ae0" }, "downloads": -1, "filename": "fashionable-0.8.5.tar.gz", "has_sig": false, "md5_digest": "8fe222f5a64ce5943a0ce972240609f7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5838, "upload_time": "2019-07-08T06:02:18", "url": "https://files.pythonhosted.org/packages/be/5f/ce04fdac09027f41a26f5125c892ffa3e3bef5dfb75b9f9035e598f9f413/fashionable-0.8.5.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "e739039a41c1bf4bde211ae8d3a85fc9", "sha256": "0b95a4c94bcc41fcfaf83e68303f323d2463c5e5733afa9646146c05a89bb0a6" }, "downloads": -1, "filename": "fashionable-0.9.0.tar.gz", "has_sig": false, "md5_digest": "e739039a41c1bf4bde211ae8d3a85fc9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5930, "upload_time": "2019-09-21T06:56:21", "url": "https://files.pythonhosted.org/packages/41/5e/376bac851dd6f0775088a15cb7a1c567f4e431ca84897e33b8d1dd611b84/fashionable-0.9.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e739039a41c1bf4bde211ae8d3a85fc9", "sha256": "0b95a4c94bcc41fcfaf83e68303f323d2463c5e5733afa9646146c05a89bb0a6" }, "downloads": -1, "filename": "fashionable-0.9.0.tar.gz", "has_sig": false, "md5_digest": "e739039a41c1bf4bde211ae8d3a85fc9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5930, "upload_time": "2019-09-21T06:56:21", "url": "https://files.pythonhosted.org/packages/41/5e/376bac851dd6f0775088a15cb7a1c567f4e431ca84897e33b8d1dd611b84/fashionable-0.9.0.tar.gz" } ] }