{ "info": { "author": "Christian Boelsen", "author_email": "christian.boelsen@hds.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Topic :: Internet :: WWW/HTTP", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "TastyTopping\n============\n\n.. image:: https://img.shields.io/travis/cboelsen/tastytopping/master.png\n :target: https://travis-ci.org/cboelsen/tastytopping\n\n.. image:: https://img.shields.io/pypi/v/TastyTopping.png\n :target: https://pypi.python.org/pypi/TastyTopping\n\n\nDesigned to take the heavy lifting out of working with django-tastypie APIs on\nthe client side.\n\n\nFeatures\n^^^^^^^^\n\n- Django model-like ORM API allowing you to GET, POST, PUT, PATCH, and DELETE::\n\n factory = ResourceFactory('http://localhost:8000/myapp/api/v1/')\n current_resource = factory.resource.get(field='name') # GET\n new_resource = factory.resource(field='new_name').save() # POST\n new_resource.field = 'different_name'\n new_resource.save() # PUT / PATCH\n current_resource.delete() # DELETE\n\n- Easily work with any related resources::\n\n new_resource.children = [\n factory.resource(field='new_name1').save(),\n factory.resource(field='new_name2').save(),\n ]\n\n- QuerySets::\n\n queryset1 = factory.resource.filter(field2__gt=20)\n queryset2 = queryset1.order_by('field2')\n # Evaluation happens here:\n resources = queryset2[5:-8]\n\n- Simple way to set and update authentication per resource::\n\n factory.resource.auth = HTTPApiKeyAuth('username', 'key12345')\n\n- Access nested resources using simple methods::\n\n new_resource.nested.nested_resource('arg1', arg2=3)\n\n- Basic field validation before connecting to the API.\n\n- Bulk create / update / delete to minimise API access::\n\n\n factory.resource.bulk(\n create=[{field='name1'}, {field='name2'}],\n update=[current_resource, new_resource],\n delete=[new_resource],\n )\n\nFind more information on these features at `read the docs!\n`_\n\n\nRequirements\n^^^^^^^^^^^^\n\nThe following needs to be installed locally to run TastyTopping:\n\n- Python 2.7+ or Python 3.3+\n\n- `requests `_ >= 1.2.3\n\n\nTested with / against:\n\n- `django `_ >= 1.5.0\n\n- `django-tastypie `_ >= 0.9.14\n\n- `requests `_ >= 1.2.3\n\n(see the `tox.ini\n`_ file for\nmore information).\n\n\nExample\n^^^^^^^\n\nA basic example of a simple workflow, using the following API on the server\nside:\n\n::\n\n # myapp/models.py\n # ===============\n from django.db import models\n\n class Example(models.Model):\n path = models.CharField(max_length=255, unique=True)\n rating = models.IntegerField(default=50)\n date = models.DateTimeField('date', null=True)\n\n\n # myapp/api.py\n # ============\n from .models import Example\n\n class ExampleResource(ModelResource):\n class Meta:\n queryset = Example.objects.all()\n resource_name = 'example'\n authorization = Authorization()\n filtering = {'path': ALL, 'rating': ALL}\n ordering = ['rating']\n\nUsing TastyTopping on the client side would look like this:\n\n::\n\n from datetime import datetime\n from tastytopping import ResourceFactory\n\n factory = ResourceFactory('http://localhost:8000/myapp/api/v1/')\n ex1 = factory.example(path='any text', rating=80).save()\n ex1.date = datetime.now()\n ex1_copy = factory.example.get(rating=80)\n ex1.delete()\n\nFind more examples at `read the docs!\n`_\n\n\nJustification\n^^^^^^^^^^^^^\n\nWhy another one? There are some other packages around that do something\nsimilar, but none are the complete package:\n\n- `ORM `_. A lot of\n other packages use a C-style API, which involves passing a dict with your\n data to their functions. TastyTopping wraps it all up in an ORM-style object,\n which is more OO, more elegant, and more pythonic.\n\n- Python3 support.\n\n- Support for authentication.\n\n- Support for nested resources.\n\n- QuerySets!\n\n- A thorough set of `unit tests\n `_.\n\n- Development has stagnated (none of them have released in close to a year,\n whereas tastypie has been releasing thick and fast).\n\n- Creating this was FUN!", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/cboelsen/tastytopping", "keywords": "tastypie,client,django,rest,api,resource,orm", "license": "LGPLv3", "maintainer": null, "maintainer_email": null, "name": "TastyTopping", "package_url": "https://pypi.org/project/TastyTopping/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/TastyTopping/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/cboelsen/tastytopping" }, "release_url": "https://pypi.org/project/TastyTopping/1.2.5/", "requires_dist": null, "requires_python": null, "summary": "An ORM for tastypie's API on the client-side.", "version": "1.2.5" }, "last_serial": 1671310, "releases": { "1.0.5": [], "1.0.6": [ { "comment_text": "", "digests": { "md5": "b63c2ea6204a4995a83304e78350b81c", "sha256": "88aaa33f95739f727f0226ca04855f4ff0d594a16e11f4cb1e8a4d722dc2bfe5" }, "downloads": -1, "filename": "TastyTopping-1.0.6.tar.gz", "has_sig": false, "md5_digest": "b63c2ea6204a4995a83304e78350b81c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17577, "upload_time": "2013-12-31T15:17:41", "url": "https://files.pythonhosted.org/packages/70/05/49c853dd9bad121edfac10e71b13805e2a7e53fa608c8e0cd579087a3afa/TastyTopping-1.0.6.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "79d23fc5d7d8275fde2a61d5ce336d0b", "sha256": "11d4f68450f7fc4f7c3f2cf6f716a0bc3668a9d52c2d99df94569a1f7e0a911a" }, "downloads": -1, "filename": "TastyTopping-1.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "79d23fc5d7d8275fde2a61d5ce336d0b", "packagetype": "bdist_wheel", "python_version": "3.3", "requires_python": null, "size": 22540, "upload_time": "2014-01-06T19:02:47", "url": "https://files.pythonhosted.org/packages/9d/d3/c63a088c5cb1b4841b66b18a40011f26d5aaa1f897a8f953272f310d2c23/TastyTopping-1.0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9bcf8442f18bdbb070fcbe76c3dd18ba", "sha256": "d27c32eff4e3938d184b33c075440eec96d61d4f5986bac260c7149c663f0338" }, "downloads": -1, "filename": "TastyTopping-1.0.7.tar.gz", "has_sig": false, "md5_digest": "9bcf8442f18bdbb070fcbe76c3dd18ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19033, "upload_time": "2014-01-05T21:32:49", "url": "https://files.pythonhosted.org/packages/08/9f/d8710512a7fa966f465c8bb2ccfdc42c395a822d9befb32bb04b6200fb32/TastyTopping-1.0.7.tar.gz" } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "85ac78bcfbf1153d66240c247993a16e", "sha256": "df76854f6f29ab6ba066001ca4d9e3c57c3b714a4f922f2c62f5355d4303be20" }, "downloads": -1, "filename": "TastyTopping-1.0.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "85ac78bcfbf1153d66240c247993a16e", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 22679, "upload_time": "2014-01-08T15:24:41", "url": "https://files.pythonhosted.org/packages/83/91/fd443f210a85a3a9c938859af2e55398082303004aee2f524faa81ccdebb/TastyTopping-1.0.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fbd65bf9af9f558c2f20805bdf99ce35", "sha256": "931b468219f55e93bebb90dc1d9fbdc503c0e8ac45cf168b0f97173884082635" }, "downloads": -1, "filename": "TastyTopping-1.0.8.tar.gz", "has_sig": false, "md5_digest": "fbd65bf9af9f558c2f20805bdf99ce35", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23754, "upload_time": "2014-01-08T15:24:33", "url": "https://files.pythonhosted.org/packages/33/70/61193c9c3f9152b3a7e191d250da2b039c3fc58a9b7ba8b1a81df4982f4d/TastyTopping-1.0.8.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "9974e64bca94185b181ff6e73f8881c5", "sha256": "1177a4d213ac3cd718fb9a29bbac3ec70b620ffb853e51fcf17f4f370ac7f88d" }, "downloads": -1, "filename": "TastyTopping-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9974e64bca94185b181ff6e73f8881c5", "packagetype": "bdist_wheel", "python_version": "3.3", "requires_python": null, "size": 25199, "upload_time": "2014-02-25T11:18:41", "url": "https://files.pythonhosted.org/packages/47/0f/f9a452e07ff3aa07dc9c2983ff44f9a50aec043468ce254bacfbd1ce0582/TastyTopping-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a5307a89d1b62a20b2c4b6ae963a331a", "sha256": "0540ef672f44f8a50a7330328b7e323b1af25d4201585618dabcfb6ca18bc130" }, "downloads": -1, "filename": "TastyTopping-1.1.0.tar.gz", "has_sig": false, "md5_digest": "a5307a89d1b62a20b2c4b6ae963a331a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25694, "upload_time": "2014-02-25T11:18:15", "url": "https://files.pythonhosted.org/packages/e8/8b/fe910be814e6affe7ee7a957b5343f85a0bfd3f353469a1f1066ec0748e1/TastyTopping-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "584bdd37c4a48b60b078b4a1f21b3707", "sha256": "ffb9af0ed949a975bbfd76de5bed6d330c4cabfbf635134f71d79df4bc956bef" }, "downloads": -1, "filename": "TastyTopping-1.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "584bdd37c4a48b60b078b4a1f21b3707", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 25988, "upload_time": "2014-03-12T10:16:43", "url": "https://files.pythonhosted.org/packages/10/42/ac7dbb8fe0fa1e8bd484da516347503a2a0253701deb3c283580514249a6/TastyTopping-1.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e1c592bf6e343019705f9d820a4b274e", "sha256": "0dc4925b40addde6879ecc21a9c2e53f3b4f586db3c51c4b5c621f6b3876b8a3" }, "downloads": -1, "filename": "TastyTopping-1.1.1.tar.gz", "has_sig": false, "md5_digest": "e1c592bf6e343019705f9d820a4b274e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27484, "upload_time": "2014-03-12T10:16:40", "url": "https://files.pythonhosted.org/packages/37/92/ba359c57e35addf050f039b7a291079165e153fbb0778d9e40060a9833ef/TastyTopping-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "b8dd53a46dcb3a0259631f62d41274f2", "sha256": "0c918ca5ae8ca98a0875b924c49c5ba4dd118ed8a2035084a659a8766c4ea59c" }, "downloads": -1, "filename": "TastyTopping-1.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b8dd53a46dcb3a0259631f62d41274f2", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 26138, "upload_time": "2014-03-14T11:34:17", "url": "https://files.pythonhosted.org/packages/d6/d1/2a51adb096fe400385038812eac15ec7ccacc79c993604c8ea1b3d1dec7e/TastyTopping-1.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "286895faaceb483143cc57a11f3f5e06", "sha256": "2af32b3d241b9649553a6fb47de30da107f81d9575b8b3d029229ee52bdebe15" }, "downloads": -1, "filename": "TastyTopping-1.1.2.tar.gz", "has_sig": false, "md5_digest": "286895faaceb483143cc57a11f3f5e06", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27661, "upload_time": "2014-03-14T11:34:14", "url": "https://files.pythonhosted.org/packages/7b/97/f83313890782e451e622bf1fcf0d1503d5ac12c77c802163c542e0a1c055/TastyTopping-1.1.2.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "ccf50ec11bdcbf96d8e92cc5eefdf3ad", "sha256": "4957951063098269ca877cc25905ccfc173ae53c1c452fe7b5ee77b7061d8008" }, "downloads": -1, "filename": "TastyTopping-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ccf50ec11bdcbf96d8e92cc5eefdf3ad", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 31300, "upload_time": "2014-04-03T09:00:51", "url": "https://files.pythonhosted.org/packages/2c/e7/0fc15f1afb917e86c7278318be1e178d505ce14413b20b0d88f973b518f1/TastyTopping-1.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "de75538a6ccbbf908daa53b08df071a7", "sha256": "fa286d6c87f0211de709e65c4b8ab8862466200dd672e491726d20cd528995de" }, "downloads": -1, "filename": "TastyTopping-1.2.0.tar.gz", "has_sig": false, "md5_digest": "de75538a6ccbbf908daa53b08df071a7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34360, "upload_time": "2014-04-03T09:00:42", "url": "https://files.pythonhosted.org/packages/fb/f2/5a853e4f7a1308a61bbf9b70f08f11d9cecf2e33d80f72d73f812971cb06/TastyTopping-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "8b0d1b5317154a172736cf144f92fb13", "sha256": "1e77bb46c89d38b97b4d9742514db261154542093ff63edc3bccfd2213fbbf1f" }, "downloads": -1, "filename": "TastyTopping-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8b0d1b5317154a172736cf144f92fb13", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 31945, "upload_time": "2014-04-10T09:47:23", "url": "https://files.pythonhosted.org/packages/b7/63/5e0271b98c170167d47a3f21668c519700398ad513ebf5de7d855e038c47/TastyTopping-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "56cf0520beefa0a5f102b7385270cbc7", "sha256": "009e83d32a40bb30250b97b1d132f98aac6e1e7319a54c140068cc808217a2f9" }, "downloads": -1, "filename": "TastyTopping-1.2.1.tar.gz", "has_sig": false, "md5_digest": "56cf0520beefa0a5f102b7385270cbc7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36235, "upload_time": "2014-04-10T09:47:12", "url": "https://files.pythonhosted.org/packages/d6/0b/aa6cc3993b272d6b06487516a72db51a42fcec2c07ae156cc0af528b418b/TastyTopping-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "a0d98f32bb75fc1b8acd2734d760d6b2", "sha256": "28b628ee1719db7df0a445835684315a71b3757623e46fc420cfc0f3f41d4061" }, "downloads": -1, "filename": "TastyTopping-1.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a0d98f32bb75fc1b8acd2734d760d6b2", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 31922, "upload_time": "2014-04-25T09:21:48", "url": "https://files.pythonhosted.org/packages/7d/de/092c15fc3c21eeafcba52eba732e97e79f772a01849fdbf346a4562b1749/TastyTopping-1.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d0a9d53184b73069fbf8901bc81279f5", "sha256": "e389ca897bf0310036bd69bffd1fbabacf36ada8c08475e69ff3c42462d45124" }, "downloads": -1, "filename": "TastyTopping-1.2.2.tar.gz", "has_sig": false, "md5_digest": "d0a9d53184b73069fbf8901bc81279f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36295, "upload_time": "2014-04-25T09:21:39", "url": "https://files.pythonhosted.org/packages/29/b7/692107a427d29245386d5ae77f160e260e979fa5a40ff9c18c1918865fe8/TastyTopping-1.2.2.tar.gz" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "ba2998bf759d9250fcb681ac226880b6", "sha256": "935e53a7a40d87aca1577a30ed934c180ab917da5cdeac404c16fe5a97f54c69" }, "downloads": -1, "filename": "TastyTopping-1.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ba2998bf759d9250fcb681ac226880b6", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 31934, "upload_time": "2014-06-27T12:35:25", "url": "https://files.pythonhosted.org/packages/8c/c3/113df875767633aee26658ef5d96a7d35ba62c692b0ba493d21b93121318/TastyTopping-1.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "93e790f8fc1eae33bbc69d4f7cea2ff8", "sha256": "3085b80ecc7a57550780688fb40fca69cabf0233f6e0d3ef5562d9e18097f23e" }, "downloads": -1, "filename": "TastyTopping-1.2.3.tar.gz", "has_sig": false, "md5_digest": "93e790f8fc1eae33bbc69d4f7cea2ff8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36305, "upload_time": "2014-06-27T12:35:22", "url": "https://files.pythonhosted.org/packages/db/d6/2f9b4089a98ef7ae9eb8fc44c020ce4ed1e1b70949b4a5ec5468007c496d/TastyTopping-1.2.3.tar.gz" } ], "1.2.4": [ { "comment_text": "", "digests": { "md5": "28c9ade76c2b3273f16ad1e2a6aa47ed", "sha256": "1ebf8f67424382356feb25e1cb933079ded02763c04a0daa99a6947e31b6d089" }, "downloads": -1, "filename": "TastyTopping-1.2.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "28c9ade76c2b3273f16ad1e2a6aa47ed", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 32184, "upload_time": "2014-09-05T10:37:14", "url": "https://files.pythonhosted.org/packages/41/40/0784ed310593550071aad8306c4d1493f812199771a0c5ee89b633cea731/TastyTopping-1.2.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a4705a69913ca2dc676c66e6b3e9eca6", "sha256": "ef504fc1ac7393ddb5c88867962eda905bbfda2043e5ab22f3c816d854069e32" }, "downloads": -1, "filename": "TastyTopping-1.2.4.tar.gz", "has_sig": false, "md5_digest": "a4705a69913ca2dc676c66e6b3e9eca6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36528, "upload_time": "2014-09-05T10:37:12", "url": "https://files.pythonhosted.org/packages/27/18/61095512b890bcd3cff007c829b4fe8b829be75dcb7d93ffa5616163159a/TastyTopping-1.2.4.tar.gz" } ], "1.2.5": [ { "comment_text": "", "digests": { "md5": "7483596ed5414a595bfdcdd569844072", "sha256": "0eab60a36901b8131cf7762d964f8e0a4c653286e8b8ecc0cd703d98e85355b7" }, "downloads": -1, "filename": "TastyTopping-1.2.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7483596ed5414a595bfdcdd569844072", "packagetype": "bdist_wheel", "python_version": "any", "requires_python": null, "size": 32221, "upload_time": "2015-08-10T13:30:08", "url": "https://files.pythonhosted.org/packages/0e/06/c385fac7138701967c736d311bea7aaaad51f93db614b14aa921544eca55/TastyTopping-1.2.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "855d9a35b43fac63de3f766e5d9419dc", "sha256": "b21adf48bdb03b08b30ae459c55c584363331c335cde376cb07383ae9604b966" }, "downloads": -1, "filename": "TastyTopping-1.2.5.tar.gz", "has_sig": false, "md5_digest": "855d9a35b43fac63de3f766e5d9419dc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36560, "upload_time": "2015-08-10T13:29:48", "url": "https://files.pythonhosted.org/packages/d7/64/afbb65138a24ec0ab3defebb7bd3f1eb9bf7f2b6cf08282f15990d632a55/TastyTopping-1.2.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7483596ed5414a595bfdcdd569844072", "sha256": "0eab60a36901b8131cf7762d964f8e0a4c653286e8b8ecc0cd703d98e85355b7" }, "downloads": -1, "filename": "TastyTopping-1.2.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7483596ed5414a595bfdcdd569844072", "packagetype": "bdist_wheel", "python_version": "any", "requires_python": null, "size": 32221, "upload_time": "2015-08-10T13:30:08", "url": "https://files.pythonhosted.org/packages/0e/06/c385fac7138701967c736d311bea7aaaad51f93db614b14aa921544eca55/TastyTopping-1.2.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "855d9a35b43fac63de3f766e5d9419dc", "sha256": "b21adf48bdb03b08b30ae459c55c584363331c335cde376cb07383ae9604b966" }, "downloads": -1, "filename": "TastyTopping-1.2.5.tar.gz", "has_sig": false, "md5_digest": "855d9a35b43fac63de3f766e5d9419dc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36560, "upload_time": "2015-08-10T13:29:48", "url": "https://files.pythonhosted.org/packages/d7/64/afbb65138a24ec0ab3defebb7bd3f1eb9bf7f2b6cf08282f15990d632a55/TastyTopping-1.2.5.tar.gz" } ] }