{ "info": { "author": "Petr Skramovsky", "author_email": "petr.skramovsky@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Topic :: Internet :: WWW/HTTP :: WSGI" ], "description": ".. image:: https://travis-ci.org/petr-s/cleaREST.svg?branch=master\r\n :target: https://travis-ci.org/petr-s/cleaREST\r\n\r\n.. image:: https://coveralls.io/repos/github/petr-s/cleaREST/badge.svg?branch=master\r\n :target: https://coveralls.io/github/petr-s/cleaREST?branch=master\r\n\r\n========\r\ncleaREST\r\n========\r\n\r\nLight-weight Python framework for building REST APIs\r\n\r\n* WSGI\r\n* minimalistic\r\n* easy to use\r\n* advanced variables processing\r\n* automatic html documentation generation\r\n\r\n\r\nURL Routing\r\n===========\r\n\r\nis done by decorating your handling function with one of these decorators:\r\n\r\n* @GET\r\n* @POST\r\n\r\nonly one argument is required (url to handle) ie: ::\r\n\r\n @GET(\"/my/awesome/url\")\r\n def my_function():\r\n ...\r\n\r\noptionally you can specify successful http result status (default is HTTP_OK) ie: ::\r\n\r\n @GET(\"/my/awesome/url\", status=HTTP_CREATED)\r\n def my_function():\r\n ...\r\n\r\nlist of status tuples:\r\n\r\n* HTTP_OK\r\n* HTTP_CREATED\r\n\r\n\r\n\r\nVariables\r\n=========\r\n\r\n- GET variables from query string\r\n\r\n* POST variables can be send as:\r\n\r\n * application/x-www-form-urlencoded\r\n * multipart/form-data\r\n * application/json\r\n\r\n* url path variables (identifier inside curly brackets) ie: ::\r\n\r\n @GET(\"/my/awesome/url/{variable}\")\r\n def my_function(variable):\r\n ...\r\n\r\n\r\n\r\nParsing\r\n=======\r\n\r\nper parameter parsing function assigned as default value ie: ::\r\n\r\n @GET(\"/my/awesome/url\")\r\n def my_function(myid=int):\r\n ...\r\n\r\noptional parameter: ::\r\n\r\n @GET(\"/my/awesome/url\")\r\n def my_function(myid=(int, 0)):\r\n ...\r\n\r\nreduction multiple into one: ::\r\n\r\n @GET(\"/my/awesome/url\")\r\n def my_function(user_id=lambda user, password: login):\r\n ...\r\n\r\n\r\n\r\nReturning data\r\n==============\r\n\r\nbuild-in support:\r\n\r\n+---------+-------------------+\r\n| Class | Content-type |\r\n+=========+===================+\r\n| str | text/plain |\r\n+---------+-------------------+\r\n| dict | application/json |\r\n+---------+-------------------+\r\n| minidom | application/xml |\r\n+---------+-------------------+\r\n| etree | application/xml |\r\n+---------+-------------------+\r\n\r\nyou can also register any custom data-type or override table above with: ::\r\n\r\n register_content_type(type_, content_type, handler)\r\n\r\n\r\n\r\nErrors\r\n======\r\n\r\nto return a http error raise one of these exceptions:\r\n\r\n* HttpBadRequest\r\n* HttpNotFound\r\n* HttpUnsupportedMediaType\r\n* HttpNotImplemented\r\n\r\nie: ::\r\n\r\n @GET(\"/my/awesome/url\")\r\n def my_function(myid=int):\r\n if myid == -1:\r\n raise HttpNotFound()\r\n ...\r\n\r\nHTML Documentation\r\n==================\r\n\r\nwhen is url opened by web-browser html documentation is shown instead of actual function call.\r\n\r\n* \"application/xhtml+xml\" in accept http header\r\n* similar tags to sphinx/docutils\r\n* extra example tags: \":example:\" and for response \":rexample\":\r\n\r\nie: ::\r\n\r\n @GET(\"/my/api\")\r\n def my_function(a, b=int):\r\n \"\"\"\r\n Describe your function here.\r\n\r\n :param str a: Describe a here.\r\n :param int b: Describe b here.\r\n :return: W/E you function returns.\r\n\r\n :example::\r\n\r\n GET /my/api?a=someting&b=42\r\n\r\n :rexample::\r\n\r\n {\r\n \"something\": \"something\"\r\n ...\r\n }\r\n \"\"\"\r\n ...\r\n\r\n\"real app\" example:\r\n\r\n.. image:: https://cloud.githubusercontent.com/assets/4590121/15144637/01abb660-16b1-11e6-85b4-bdb46d33e3cf.png\r\n\r\n\r\n=========\r\nExamples:\r\n=========\r\n\r\n**GET Hello world:** ::\r\n\r\n from wsgiref.simple_server import make_server\r\n from clearest import application, GET\r\n\r\n\r\n @GET(\"/\")\r\n def hello():\r\n return \"hello world!\"\r\n\r\n httpd = make_server(\"\", 8000, application)\r\n httpd.serve_forever()\r\n\r\nOutput:\r\n\r\n curl localhost:8000\r\n\r\n hello world!\r\n\r\n**POST var:** ::\r\n\r\n from wsgiref.simple_server import make_server\r\n from clearest import application, POST\r\n\r\n\r\n @POST(\"/\")\r\n def hello(what):\r\n return \"hello {what}!\".format(what=what)\r\n\r\n\r\n httpd = make_server(\"\", 8000, application)\r\n httpd.serve_forever()\r\n\r\nOutput:\r\n\r\n curl --data \"what=world\" localhost:8000\r\n\r\n hello world!", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/petr-s/cleaREST", "keywords": "rest api framework json xml", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "cleaREST", "package_url": "https://pypi.org/project/cleaREST/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/cleaREST/", "project_urls": { "Homepage": "https://github.com/petr-s/cleaREST" }, "release_url": "https://pypi.org/project/cleaREST/0.3.5/", "requires_dist": [ "decorator (==4.0.9)", "docutils (==0.12)", "jinja2 (==2.8)", "mock", "six (==1.10.0)" ], "requires_python": "", "summary": "Light-weight Python framework for building REST APIs.", "version": "0.3.5" }, "last_serial": 2170723, "releases": { "0.0.1": [], "0.1.0": [ { "comment_text": "", "digests": { "md5": "95ad16587cb1b039881fa3dc32f06508", "sha256": "6faf0920dbd1c658f3670a8f32e4de81baaf8b814d2c6b60f46bf98a24f16c37" }, "downloads": -1, "filename": "cleaREST-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "95ad16587cb1b039881fa3dc32f06508", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10460, "upload_time": "2016-03-14T13:33:55", "url": "https://files.pythonhosted.org/packages/c6/3c/8aea2097a8deada9c44f5cb7e61626e85e2f7648d1e079b5e95987258132/cleaREST-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4b6ae93abe358252babdb73d6cd84f29", "sha256": "7fae0151aeadf3f04d18a721ec5ef9c426b9880e865487ee561c94f2da756259" }, "downloads": -1, "filename": "cleaREST-0.1.0.zip", "has_sig": false, "md5_digest": "4b6ae93abe358252babdb73d6cd84f29", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11170, "upload_time": "2016-03-14T13:34:24", "url": "https://files.pythonhosted.org/packages/cf/36/268fb58431b140b23387c285cf76cba0281c3c1d329720e0b6bc2f9fdc50/cleaREST-0.1.0.zip" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "0de0689ee2e1d21669ed95a1a5d38266", "sha256": "75112430bd0c64153b7689152e557b1519e9224c697508f0d38cf9317a594c3a" }, "downloads": -1, "filename": "cleaREST-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0de0689ee2e1d21669ed95a1a5d38266", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12772, "upload_time": "2016-03-29T08:28:14", "url": "https://files.pythonhosted.org/packages/7c/80/ce40c13a316d0283ee14f4634670fd23dd22464c30644c98c9a8d344644b/cleaREST-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e0556e73974814062f072a5aec4a2e40", "sha256": "9a4329cd87b39a1020dbcd906e9fe7a320f489e8b9908b72a9268f9fdbfabff7" }, "downloads": -1, "filename": "cleaREST-0.2.0.zip", "has_sig": false, "md5_digest": "e0556e73974814062f072a5aec4a2e40", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14302, "upload_time": "2016-03-29T08:28:22", "url": "https://files.pythonhosted.org/packages/a0/2e/6d9f1a0aae270902ebf5fd8369cd184c1bf07bbf410930f0449bd7dfea83/cleaREST-0.2.0.zip" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "beb254c27499056108b9799c3fff9e27", "sha256": "4d6b8a8bc04935a3bc31abd6a8c76252564d0988f0f2a6969f09d72f791638d6" }, "downloads": -1, "filename": "cleaREST-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "beb254c27499056108b9799c3fff9e27", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19533, "upload_time": "2016-05-10T12:03:37", "url": "https://files.pythonhosted.org/packages/58/ab/1eb68c690017dd098fd7458d655f9cb2286e2c419c7a561657a394068895/cleaREST-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1e6010e8c6dc55d907af38f96dedc58b", "sha256": "ca6bc3a390726a267b9f3547917f3ea1ffe116893c9c8fb08caf77c048eebf6b" }, "downloads": -1, "filename": "cleaREST-0.3.0.zip", "has_sig": false, "md5_digest": "1e6010e8c6dc55d907af38f96dedc58b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21370, "upload_time": "2016-05-10T12:03:56", "url": "https://files.pythonhosted.org/packages/00/ee/c3d36c475c8aac0818d4a6e6d746855fcd5298e398fb095d0d3f00d8dc98/cleaREST-0.3.0.zip" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "ef9cd3d32b7df5947431f74a588b2124", "sha256": "49e77a2c1d44c548bafa0fa775827e5abd07d0b6dcc97e19ee4291eaf5e4fbe9" }, "downloads": -1, "filename": "cleaREST-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ef9cd3d32b7df5947431f74a588b2124", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19785, "upload_time": "2016-05-11T14:58:07", "url": "https://files.pythonhosted.org/packages/3b/86/82b8d5d5af459dd885d1b22d80deac5ec106357d749c854a99a0a61c0b44/cleaREST-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c98814bb176fdc02659c568e51db8c1c", "sha256": "a01d4bacf97cf89ae6aff0bc3f57220cc29ac04e326de2f58c6dc2b89033feb5" }, "downloads": -1, "filename": "cleaREST-0.3.1.zip", "has_sig": false, "md5_digest": "c98814bb176fdc02659c568e51db8c1c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21818, "upload_time": "2016-05-11T14:58:34", "url": "https://files.pythonhosted.org/packages/22/4e/929b15f95f381638b8723b441ed740b5cc376641343f362d353ae82bc377/cleaREST-0.3.1.zip" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "22b83f0d8fe3a3a2c4232c8e42fc3194", "sha256": "759787ec6103cf556c45421589fd4bb644e765fcf8f87f7c6b60bf464ff1ba4a" }, "downloads": -1, "filename": "cleaREST-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "22b83f0d8fe3a3a2c4232c8e42fc3194", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21023, "upload_time": "2016-05-11T15:21:42", "url": "https://files.pythonhosted.org/packages/54/42/6c3e7e859dc74e2a1c18acdb0803b113b34b950547af4b6ba77d8f69cb3d/cleaREST-0.3.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9b51dccb85bffed33965ccf20792fba7", "sha256": "677f6939454cb7c3a6ed1db4c3797848af079d3a72fec30e766865873be56941" }, "downloads": -1, "filename": "cleaREST-0.3.2.zip", "has_sig": false, "md5_digest": "9b51dccb85bffed33965ccf20792fba7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23206, "upload_time": "2016-05-11T15:22:14", "url": "https://files.pythonhosted.org/packages/2f/ce/a0b0e6e02d193183bb81cfe83a4080317c1b6a77f4466067bfe8b19adde8/cleaREST-0.3.2.zip" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "5745c07551b8b3b03eb3b1aa61c33313", "sha256": "736ce3ddf61ca85c01f2683c97d50e3fcca6fcbc59b52f673768a4cb88eb2c80" }, "downloads": -1, "filename": "cleaREST-0.3.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5745c07551b8b3b03eb3b1aa61c33313", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21572, "upload_time": "2016-05-12T11:48:15", "url": "https://files.pythonhosted.org/packages/b2/c5/8e174c301e2a21f03d49305c2ae6975c22ad78ebb6f464603496bbb4ab3c/cleaREST-0.3.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eacfc31a22ea649bb9e2cd04e1e868e8", "sha256": "6fb8d9bc6bb4d0219de56b96f3a85598c0f8f7f9275a68f740c0c630c6b7ca19" }, "downloads": -1, "filename": "cleaREST-0.3.3.zip", "has_sig": false, "md5_digest": "eacfc31a22ea649bb9e2cd04e1e868e8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23749, "upload_time": "2016-05-12T11:48:34", "url": "https://files.pythonhosted.org/packages/55/23/318f4c7a5fd4a79c130ede92bc1889dbf6ebf9d222bd03f4f34afa47a51d/cleaREST-0.3.3.zip" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "3f7dd0b431c9368cae6aa8e4e90e0332", "sha256": "74ee41605e8dd2b64eb9247a5d583ef7ac16c9869215de0e25698a81be1e89d3" }, "downloads": -1, "filename": "cleaREST-0.3.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3f7dd0b431c9368cae6aa8e4e90e0332", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21660, "upload_time": "2016-05-18T13:08:03", "url": "https://files.pythonhosted.org/packages/ac/d4/50e7dc690470d83f2a720cce272409b5a01f61d1c7cefc8f203d5cb6758c/cleaREST-0.3.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f15d8a41a0d28b7af8df2a31e7dcdf5b", "sha256": "9d707a73a302e27a32b836a41e46191dfda596a90e0eae681d947942d8018d8d" }, "downloads": -1, "filename": "clearest-0.3.4.zip", "has_sig": false, "md5_digest": "f15d8a41a0d28b7af8df2a31e7dcdf5b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23836, "upload_time": "2016-05-18T13:08:19", "url": "https://files.pythonhosted.org/packages/2e/b0/1df6ac8b7361cd048ffdf1d535edc979c453756b2c240ac73d25203879cc/clearest-0.3.4.zip" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "aab4b68db136f2942b059626b99bf651", "sha256": "23b10a6286498534bcfae75da76d0a613d69da8e5d2561928d5cbb9555972aa2" }, "downloads": -1, "filename": "cleaREST-0.3.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "aab4b68db136f2942b059626b99bf651", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21699, "upload_time": "2016-06-16T12:19:50", "url": "https://files.pythonhosted.org/packages/33/af/60b90eda0b67ffbe0d7801300fe84165410401b7815a6f0b97435765b771/cleaREST-0.3.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1849e6c3ab1023403864301dd0fb800c", "sha256": "972308f983509ddf3b61799d54539ff0f950dea56f10460abe5d89b622f8aa45" }, "downloads": -1, "filename": "cleaREST-0.3.5.zip", "has_sig": false, "md5_digest": "1849e6c3ab1023403864301dd0fb800c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23881, "upload_time": "2016-06-16T12:19:56", "url": "https://files.pythonhosted.org/packages/7e/cb/bf8d324ed709bff62b04579508b7bb015f80e095d46aefb2a1043368834b/cleaREST-0.3.5.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "aab4b68db136f2942b059626b99bf651", "sha256": "23b10a6286498534bcfae75da76d0a613d69da8e5d2561928d5cbb9555972aa2" }, "downloads": -1, "filename": "cleaREST-0.3.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "aab4b68db136f2942b059626b99bf651", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21699, "upload_time": "2016-06-16T12:19:50", "url": "https://files.pythonhosted.org/packages/33/af/60b90eda0b67ffbe0d7801300fe84165410401b7815a6f0b97435765b771/cleaREST-0.3.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1849e6c3ab1023403864301dd0fb800c", "sha256": "972308f983509ddf3b61799d54539ff0f950dea56f10460abe5d89b622f8aa45" }, "downloads": -1, "filename": "cleaREST-0.3.5.zip", "has_sig": false, "md5_digest": "1849e6c3ab1023403864301dd0fb800c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23881, "upload_time": "2016-06-16T12:19:56", "url": "https://files.pythonhosted.org/packages/7e/cb/bf8d324ed709bff62b04579508b7bb015f80e095d46aefb2a1043368834b/cleaREST-0.3.5.zip" } ] }