{ "info": { "author": "Daniel Lindsley", "author_email": "daniel@toastdriven.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "Framework :: Flask", "Framework :: Pyramid", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Utilities" ], "description": "========\nrestless\n========\n\n.. image:: https://travis-ci.org/toastdriven/restless.png?branch=master\n :target: https://travis-ci.org/toastdriven/restless\n\n.. image:: https://coveralls.io/repos/github/toastdriven/restless/badge.svg?branch=master\n :target: https://coveralls.io/github/toastdriven/restless?branch=master\n\n\nA lightweight REST miniframework for Python.\n\nDocumentation is at http://restless.readthedocs.org/.\n\nWorks great with Django_, Flask_, Pyramid_, Tornado_ & Itty_, but should be useful for\nmany other Python web frameworks. Based on the lessons learned from Tastypie_\n& other REST libraries.\n\n.. _Django: http://djangoproject.com/\n.. _Flask: http://flask.pocoo.org/\n.. _Pyramid: http://www.pylonsproject.org/\n.. _Itty: https://pypi.python.org/pypi/itty\n.. _Tastypie: http://tastypieapi.org/\n.. _Tornado: http://www.tornadoweb.org/\n.. _tox: https://tox.readthedocs.io/\n\n\nFeatures\n========\n\n* Small, fast codebase\n* JSON output by default, but overridable\n* RESTful\n* Python 3.2+ (with shims to make broke-ass Python 2.6+ work)\n* Django 1.8+\n* Flexible\n\n\nAnti-Features\n=============\n\n(Things that will never be added...)\n\n* Automatic ORM integration\n* Authorization (per-object or not)\n* Extensive filtering options\n* XML output (though you can implement your own)\n* Metaclasses\n* Mixins\n* HATEOAS\n\n\nWhy?\n====\n\nQuite simply, I care about creating flexible & RESTFul APIs. In building\nTastypie, I tried to create something extremely complete & comprehensive.\nThe result was writing a lot of hook methods (for easy extensibility) & a lot\nof (perceived) bloat, as I tried to accommodate for everything people might\nwant/need in a flexible/overridable manner.\n\nBut in reality, all I really ever personally want are the RESTful verbs, JSON\nserialization & the ability of override behavior.\n\nThis one is written for me, but maybe it's useful to you.\n\n\nManifesto\n=========\n\nRather than try to build something that automatically does the typically\ncorrect thing within each of the views, it's up to you to implement the bodies\nof various HTTP methods.\n\nExample code:\n\n.. code:: python\n\n # posts/api.py\n from django.contrib.auth.models import User\n\n from restless.dj import DjangoResource\n from restless.preparers import FieldsPreparer\n\n from posts.models import Post\n\n\n class PostResource(DjangoResource):\n # Controls what data is included in the serialized output.\n preparer = FieldsPreparer(fields={\n 'id': 'id',\n 'title': 'title',\n 'author': 'user.username',\n 'body': 'content',\n 'posted_on': 'posted_on',\n })\n\n # GET /\n def list(self):\n return Post.objects.all()\n\n # GET /pk/\n def detail(self, pk):\n return Post.objects.get(id=pk)\n\n # POST /\n def create(self):\n return Post.objects.create(\n title=self.data['title'],\n user=User.objects.get(username=self.data['author']),\n content=self.data['body']\n )\n\n # PUT /pk/\n def update(self, pk):\n try:\n post = Post.objects.get(id=pk)\n except Post.DoesNotExist:\n post = Post()\n\n post.title = self.data['title']\n post.user = User.objects.get(username=self.data['author'])\n post.content = self.data['body']\n post.save()\n return post\n\n # DELETE /pk/\n def delete(self, pk):\n Post.objects.get(id=pk).delete()\n\nHooking it up:\n\n.. code:: python\n\n # api/urls.py\n from django.conf.urls.default import url, include\n\n from posts.api import PostResource\n\n urlpatterns = [\n # The usual suspects, then...\n\n url(r'^api/posts/', include(PostResource.urls())),\n ]\n\n\nLicence\n=======\n\nBSD\n\n\nRunning the Tests\n=================\n\nThe test suite uses tox_ for simultaneous support of multiple versions of both\nPython and Django. The current versions of Python supported are:\n\n* CPython 2.7\n* CPython 3.3\n* CPython 3.4\n* CPython 3.5\n* CPython 3.6\n* PyPy (Python 2.7)\n\nYou just need to install the Python interpreters above and the `tox` package\n(available via `pip`), then run the `tox` command.\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/toastdriven/restless/", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "restless", "package_url": "https://pypi.org/project/restless/", "platform": "", "project_url": "https://pypi.org/project/restless/", "project_urls": { "Homepage": "http://github.com/toastdriven/restless/" }, "release_url": "https://pypi.org/project/restless/2.1.1/", "requires_dist": null, "requires_python": "", "summary": "A lightweight REST miniframework for Python.", "version": "2.1.1" }, "last_serial": 2917748, "releases": { "0.9.0": [], "1.0.0": [ { "comment_text": "", "digests": { "md5": "8e3d6962826cb2a203aabc1179dcd980", "sha256": "b420604f858c1907db88721d73b4c953d45b894725a0638b84e73e7d893e43d8" }, "downloads": -1, "filename": "restless-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8e3d6962826cb2a203aabc1179dcd980", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 14121, "upload_time": "2014-01-13T10:31:07", "url": "https://files.pythonhosted.org/packages/67/c1/e3421c59e3cef035d4cff6cec94800e7ec276f00e937483ea49b5f4abef5/restless-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4d6d7f1419234544084c73d414016e9b", "sha256": "94877a36976304db6a340ae1fbc7b7022a8fd47d729cbaaf9e0612cc16cfed2b" }, "downloads": -1, "filename": "restless-1.0.0.tar.gz", "has_sig": false, "md5_digest": "4d6d7f1419234544084c73d414016e9b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 238937, "upload_time": "2014-01-13T10:29:41", "url": "https://files.pythonhosted.org/packages/dc/25/9e72cd1cd73b03b388053fcdbc11e2f68ff6575cf54281ff8faa51770ae1/restless-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "52aa711433b84f984a8cb2b40fa7e35f", "sha256": "930eaf043c89bb0a69d3dbcb4f54b4a1a5845705983a14903d62f2519e29d312" }, "downloads": -1, "filename": "restless-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "52aa711433b84f984a8cb2b40fa7e35f", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 14943, "upload_time": "2014-01-15T09:13:22", "url": "https://files.pythonhosted.org/packages/bd/23/debd401c32104cd3aedf2335bc27c5eedb610b76af34e7d6fe293c24844a/restless-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "efd3c65a453e5b53806af2ace8740816", "sha256": "9926dc83b68dc75c007c2d9d8c8bf8e01fb02fd1caff5883b499fbf0e21319a7" }, "downloads": -1, "filename": "restless-1.1.0.tar.gz", "has_sig": false, "md5_digest": "efd3c65a453e5b53806af2ace8740816", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 269608, "upload_time": "2014-01-15T09:13:07", "url": "https://files.pythonhosted.org/packages/40/82/95e2403199efd0c5671e524980ebbfe17041f4ede17318c8aa37e6561d18/restless-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "6e7a0fb203a314e047be12f221eb1c96", "sha256": "8e3b6e318702f7492ff0d5675710d01ff76b95b7ad3e6662f9ae49b74c09d04a" }, "downloads": -1, "filename": "restless-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6e7a0fb203a314e047be12f221eb1c96", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 15223, "upload_time": "2014-01-16T06:46:30", "url": "https://files.pythonhosted.org/packages/c6/ca/37a1b0f0be9a506554f20c20f64550436cf289de2362e4c53bfdf274af99/restless-1.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "86c72fceac5863c53cdebe9937c058f5", "sha256": "235d96e0ed5607b3fe1ea4f04f86075befbe3fa9a4a6d809ba167e4bd134b623" }, "downloads": -1, "filename": "restless-1.2.0.tar.gz", "has_sig": false, "md5_digest": "86c72fceac5863c53cdebe9937c058f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 270045, "upload_time": "2014-01-16T06:46:16", "url": "https://files.pythonhosted.org/packages/28/e1/86315ff7fba2a17e848bcea63ef6d66fe2692a3208108999cb48bf16341d/restless-1.2.0.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "a69e60a643e1be75220162e278c2167a", "sha256": "a69aaf7042e1893d4e57be89937abebd9c7bb83026cb7c8e0d66b3a6621d2f3d" }, "downloads": -1, "filename": "restless-1.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a69e60a643e1be75220162e278c2167a", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 16532, "upload_time": "2014-01-30T05:12:05", "url": "https://files.pythonhosted.org/packages/db/47/48d5ae3b2c31200b9aca66e063034015cbe86c308a69ee095c2455da8d25/restless-1.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d17b98ce1471d893c46d071fa0c5a4dc", "sha256": "96a639aa02150807c9f7b4ac55823907a93df074262f895da93085f916105232" }, "downloads": -1, "filename": "restless-1.3.0.tar.gz", "has_sig": false, "md5_digest": "d17b98ce1471d893c46d071fa0c5a4dc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 279674, "upload_time": "2014-01-30T05:11:51", "url": "https://files.pythonhosted.org/packages/2a/57/51847633756446cb84293de83559108dc26909c6d1e4f724270be55c0998/restless-1.3.0.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "b144fa8ec0ae5b4a9fa10cecd39e6306", "sha256": "0f510734efc039809064cc4930bde7da4d2dfae85946759a780a2cb501f80fd3" }, "downloads": -1, "filename": "restless-1.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b144fa8ec0ae5b4a9fa10cecd39e6306", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 17118, "upload_time": "2014-02-21T01:56:59", "url": "https://files.pythonhosted.org/packages/10/e4/2f468865fd1f1cf19fcd77af4685beb4c54b0c7941c81461f2ee887d9382/restless-1.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "438973e006b6d78ba55c43bf21f417b1", "sha256": "d3b06e48f1e592df81b86f5d1011050960ce4f303a5cf55b3ddb7db7e0611793" }, "downloads": -1, "filename": "restless-1.4.0.tar.gz", "has_sig": false, "md5_digest": "438973e006b6d78ba55c43bf21f417b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 303635, "upload_time": "2014-02-21T01:58:58", "url": "https://files.pythonhosted.org/packages/dc/5b/47a98d423b7c02792565fee66cc4cef2067917e5f6f85d1469c8b6954390/restless-1.4.0.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "72c7e816089d782041679b5a1ea942ab", "sha256": "f1f731e4d704cec393ef2e4604ad1a7d6056257833620c9506cea798b68d31a6" }, "downloads": -1, "filename": "restless-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "72c7e816089d782041679b5a1ea942ab", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 19199, "upload_time": "2014-05-23T06:39:17", "url": "https://files.pythonhosted.org/packages/b6/1b/4369df05985b0b195d22db3c2412da0366513e086a5adad24be8ce09d651/restless-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fd654dafcf6c5bb4761c6ab18b9d7165", "sha256": "d3eb709c83502f482fbcfb01464e5737910a91dc2825018a8c49452506424bd4" }, "downloads": -1, "filename": "restless-2.0.0.tar.gz", "has_sig": false, "md5_digest": "fd654dafcf6c5bb4761c6ab18b9d7165", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 305733, "upload_time": "2014-05-23T06:39:07", "url": "https://files.pythonhosted.org/packages/c7/1e/e5f0938fa1c589abaa96b9e36bf91c9bd32e1a8b965e38e17e57ec26875a/restless-2.0.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "cdad73b941735f00d08508fbca979b24", "sha256": "2532748510c494304553bcd6b0d04095dd6a8800f724e1172d2b1e4fc68a2584" }, "downloads": -1, "filename": "restless-2.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cdad73b941735f00d08508fbca979b24", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 21221, "upload_time": "2014-08-21T00:17:15", "url": "https://files.pythonhosted.org/packages/8c/c1/7b1f2f4d07d198210488e96e94f24128c61bb58277cdbf45702a5a882ab2/restless-2.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "303b14ce5d8ce25272cb94a3cae474a3", "sha256": "4d100f505944c2f07c03960556c5431c5edad4aaced43f4239a1346570c654a5" }, "downloads": -1, "filename": "restless-2.0.1.tar.gz", "has_sig": false, "md5_digest": "303b14ce5d8ce25272cb94a3cae474a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 307485, "upload_time": "2014-08-21T00:17:02", "url": "https://files.pythonhosted.org/packages/14/ea/d28fc9441d1542cbf107c5b45d2b014e0e47b87bee5aec0a14dd4b59a103/restless-2.0.1.tar.gz" } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "daebd267bd97435435d74b30415a0145", "sha256": "2bfa5d6689d353c585c28e49d67c3091aeb412478b832f69e6bcb792b41c269b" }, "downloads": -1, "filename": "restless-2.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "daebd267bd97435435d74b30415a0145", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 38434, "upload_time": "2016-11-14T16:37:26", "url": "https://files.pythonhosted.org/packages/c3/cd/d3c0d2d8d8f253e75a1ab03d2cc0ec0d0a140c7a7814dd5c2294d22130a8/restless-2.0.2-py2.py3-none-any.whl" } ], "2.0.3": [ { "comment_text": "", "digests": { "md5": "5d700de018d074c4e5b7476f4fc75972", "sha256": "f05c742724a33b9a66ae557fd01ee4b64bb4d917cd6b9eef7f8af1f85ea56988" }, "downloads": -1, "filename": "restless-2.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5d700de018d074c4e5b7476f4fc75972", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22477, "upload_time": "2016-11-21T17:45:41", "url": "https://files.pythonhosted.org/packages/28/8f/3e030b8984adc96afdd894ab203743b2f3126c1efdcc0db9e9aa40eb7f7e/restless-2.0.3-py2.py3-none-any.whl" } ], "2.0.4": [ { "comment_text": "", "digests": { "md5": "81e1a581f57392af8ba3ab18f5cdc593", "sha256": "1d3ddb7fdf9416403d59cc9ef423be2f0654545e2c3e22bfcf2fdd4b7ef261f1" }, "downloads": -1, "filename": "restless-2.0.4.tar.gz", "has_sig": false, "md5_digest": "81e1a581f57392af8ba3ab18f5cdc593", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41641, "upload_time": "2017-05-22T18:09:04", "url": "https://files.pythonhosted.org/packages/6b/4b/4017b33607d940d9a8bd4d8c4d6cfc36a38890a40755fe31f88b11599238/restless-2.0.4.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "9bf58610225afb6d65f47a6c284f5eba", "sha256": "c4848fc83810544de74e93ef8c2279a340f966bafa86ce77976b173c5864cf08" }, "downloads": -1, "filename": "restless-2.1.0.tar.gz", "has_sig": false, "md5_digest": "9bf58610225afb6d65f47a6c284f5eba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44122, "upload_time": "2017-06-01T16:00:17", "url": "https://files.pythonhosted.org/packages/93/76/393376e3d03304138bcdf57da9900c661afc8ea3852d75b73db22d8de1d1/restless-2.1.0.tar.gz" } ], "2.1.1": [ { "comment_text": "", "digests": { "md5": "d6841de78162279ef173219c95ae4487", "sha256": "f66b590cd1a248fd60a7f6540dff318a180bcbf073eefa16ac5ea978c161087b" }, "downloads": -1, "filename": "restless-2.1.1.tar.gz", "has_sig": false, "md5_digest": "d6841de78162279ef173219c95ae4487", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43626, "upload_time": "2017-06-01T19:06:40", "url": "https://files.pythonhosted.org/packages/42/4f/9692f950d2e66c9889ade4c38fa7d7b08b6e928d3085783f4921c5b2719a/restless-2.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d6841de78162279ef173219c95ae4487", "sha256": "f66b590cd1a248fd60a7f6540dff318a180bcbf073eefa16ac5ea978c161087b" }, "downloads": -1, "filename": "restless-2.1.1.tar.gz", "has_sig": false, "md5_digest": "d6841de78162279ef173219c95ae4487", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43626, "upload_time": "2017-06-01T19:06:40", "url": "https://files.pythonhosted.org/packages/42/4f/9692f950d2e66c9889ade4c38fa7d7b08b6e928d3085783f4921c5b2719a/restless-2.1.1.tar.gz" } ] }