{ "info": { "author": "Thorgate", "author_email": "code@thorgate.eu", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: ISC License (ISCL)", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "=================\nThorgate API Core\n=================\n\n\n.. image:: https://img.shields.io/pypi/v/tg-apicore.svg\n :target: https://pypi.python.org/pypi/tg-apicore\n\n.. image:: https://img.shields.io/travis/thorgate/tg-apicore.svg\n :target: https://travis-ci.org/thorgate/tg-apicore\n\n.. image:: https://readthedocs.org/projects/tg-apicore/badge/?version=latest\n :target: https://tg-apicore.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\n\nOpinionated API framework on top of Django REST framework\n\n\n* Free software: ISC license\n\nSupports Python 3.5+, Django 1.11+, Django REST framework 3.6+\n\n\nFeatures\n--------\n\n* API documentation automatically generated from your views\n * General intro can be added\n * You can add example request/response data\n * Autogenerated Python `requests`-based examples\n * Not interactive yet\n* Integrates `JSON API `_\n * Cursor pagination with configurable page size\n* Viewset classes for using different serializers and querysets for list/detail/edit endpoints\n* API-specific 404 view\n* Test utilities, e.g. for response validation\n* Versioning (WIP)\n * Transformer-based approach, inspired by\n `djangorestframework-version-transforms `_\n and `Stripe `_\n\n\nUsage\n-----\n\n- ``pip install tg-apicore``\n- Add ``tg_apicore`` to ``INSTALLED_APPS``\n- Ensure your ``REST_FRAMEWORK`` setting contains ``ALLOWED_VERSIONS``, e.g:\n\n .. code:: python\n\n # In your Django project settings:\n REST_FRAMEWORK = {\n 'ALLOWED_VERSIONS': ('2018-01-01',),\n }\n\n- Note that the default paginator requires that your models have ``created`` field\n\n- Create API documentation view by subclassing ``APIDocumentationView`` and making necessary modifications.\n See ``example/example/views.py`` for example.\n- Add main API urls plus 404 view (as fallback).\n\n\nHere's an example ``urls.py``:\n\n.. code:: python\n\n from tg_apicore.views import PageNotFoundView\n\n from myproject.views import MyProjectAPIDocumentationView\n\n urlpatterns = [\n # The documentation view\n url(r'^api-docs/', MyProjectAPIDocumentationView.as_view(), name='api-docs'),\n\n # myproject.urls_api should contain your API urls patterns\n url(r'^api/(?P(\\d{4}-\\d{2}-\\d{2}))/', include('myproject.urls_api')),\n\n # API-specific 404 for everything under api/ prefix\n url(r'^api/', include(PageNotFoundView.urlpatterns())),\n ]\n\nSee ``example`` directory for a more in-depth demo.\n\n\nCredits\n-------\n\nThis package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.\n\n.. _Cookiecutter: https://github.com/audreyr/cookiecutter\n.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage\n\n\n=======\nHistory\n=======\n\n0.3.0 (2018-05-23)\n------------------\n\n* Add Usage section to README (to make starting up easier)\n* Most ``REST_FRAMEWORK`` settings are now automatically configured by Thorgate API Core.\n Users only need to specify ``ALLOWED_VERSIONS``, the rest is optional.\n\n\n0.2.1 (2018-04-14)\n------------------\n\n* Fix packaging (tg_apicore subdirs weren't included)\n\n\n0.2.0 (2018-04-14)\n------------------\n\n* Added PageNotFoundView (JSON-based 404 views)\n* Added DetailSerializerViewSet (different serializers and queryset for list/detail/edit views)\n* Added CreateOnlyFieldsSerializerMixin, ModelValidationSerializerMixin and BaseModelSerializer\n* Renamed APIDocumentationView.get_patterns() to .urlpatterns()\n* Improved example app a lot. It now also includes tests that partially test tg-apicore itself\n\n\n0.1.0 (2018-03-08)\n------------------\n\n* First release on PyPI.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/thorgate/tg-apicore", "keywords": "tg-apicore django djangorestframework", "license": "ISC license", "maintainer": "", "maintainer_email": "", "name": "tg-apicore", "package_url": "https://pypi.org/project/tg-apicore/", "platform": "", "project_url": "https://pypi.org/project/tg-apicore/", "project_urls": { "Homepage": "https://github.com/thorgate/tg-apicore" }, "release_url": "https://pypi.org/project/tg-apicore/0.3.0/", "requires_dist": [ "Django (<2.1,>=1.11)", "djangorestframework (<4,>=3.6)", "djangorestframework-jsonapi (<3,>=2.4)", "attrs (>=17.2.0)", "coreapi (>=2.3)", "Markdown (>=2.6)", "Pygments (>=2.2)" ], "requires_python": "", "summary": "Opinionated API framework on top of Django REST framework", "version": "0.3.0" }, "last_serial": 3890807, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "1f53853e8f024ec9332f828147e1f9b9", "sha256": "c15e1fd9c3b57e2f79ac20fc92ec5123b7055b919c5b288b0d04878b51ef0f62" }, "downloads": -1, "filename": "tg_apicore-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1f53853e8f024ec9332f828147e1f9b9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14519, "upload_time": "2018-03-08T12:55:40", "url": "https://files.pythonhosted.org/packages/ca/32/3d92633ef978063ca7671fbbafc179f9c3dd71967c6fe9c2f780ae00c7e2/tg_apicore-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4cbc8fab7bafc757ba95458bc70ac791", "sha256": "6258053c635edf5745f247088248225cb67e350a87517bab0c9f7d0fe4c070e7" }, "downloads": -1, "filename": "tg-apicore-0.1.0.tar.gz", "has_sig": false, "md5_digest": "4cbc8fab7bafc757ba95458bc70ac791", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15824, "upload_time": "2018-03-08T12:55:42", "url": "https://files.pythonhosted.org/packages/1e/e2/575c4de714fa90855cb9453ecf277ea47c1f49816d12d3efc07093b2715e/tg-apicore-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "0366dec7319f942a1d5b31a6ba5ed430", "sha256": "9eed2bc777df953dd01e424d5f357b44f1b001c2e184cb8946e674e52cf02720" }, "downloads": -1, "filename": "tg_apicore-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0366dec7319f942a1d5b31a6ba5ed430", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15907, "upload_time": "2018-04-14T09:22:57", "url": "https://files.pythonhosted.org/packages/bb/af/85458f228206ad4a5c496b230b96a077e6b1d3176484f49c36faac4d3b17/tg_apicore-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b1a3bdb97cb4c83db66e52e36f5470a6", "sha256": "989d488162e3f0a8daafac3b94df7530245f825e3ff8748903d8f49c78aed9a9" }, "downloads": -1, "filename": "tg-apicore-0.2.0.tar.gz", "has_sig": false, "md5_digest": "b1a3bdb97cb4c83db66e52e36f5470a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18152, "upload_time": "2018-04-14T09:22:58", "url": "https://files.pythonhosted.org/packages/6f/71/9a29e79d1a512d172c9f77c011896c4aa45a1120dd8280949edeaceebc55/tg-apicore-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "86acf33a700d8e75fd55adebeb3323ba", "sha256": "638def191c7ddae39e9e125554b91cc9b478ffafec56063c65a7bf0c9fa23688" }, "downloads": -1, "filename": "tg_apicore-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "86acf33a700d8e75fd55adebeb3323ba", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 23745, "upload_time": "2018-04-14T12:09:53", "url": "https://files.pythonhosted.org/packages/dd/f0/3eafcce863aa98f87e745dfa7efe6d20064a6246ed317c43412d34d5c8f6/tg_apicore-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a9a34feae5e201b69e6d6988dd19af25", "sha256": "8fa1fdf2eb44c15c16f69d0b0dd20859e108bb6dcda06ece7b2b68e064aa6a1b" }, "downloads": -1, "filename": "tg-apicore-0.2.1.tar.gz", "has_sig": false, "md5_digest": "a9a34feae5e201b69e6d6988dd19af25", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27898, "upload_time": "2018-04-14T12:09:54", "url": "https://files.pythonhosted.org/packages/b7/31/af9ca4368114dc7eed89dcb09783790e70c4f9ff8ef12b2fd9fe73418ca9/tg-apicore-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "f85726d6daa5d397bebd3844b500c97f", "sha256": "ac7c9a749b950b1e7e7f5da76c63d809a41e08d772faea62c53847a93b2329b4" }, "downloads": -1, "filename": "tg_apicore-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f85726d6daa5d397bebd3844b500c97f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 23621, "upload_time": "2018-05-23T10:11:41", "url": "https://files.pythonhosted.org/packages/0d/8b/c209afe8f2ef5ec4de9c27501fae51bd0d07cd1dcc593f7e443be9e423d4/tg_apicore-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "41b071cedbf2db12779217857b3e7a80", "sha256": "da47e7539dc080bced58f982df7aba14aa22226473bb7685085e07d063320a03" }, "downloads": -1, "filename": "tg-apicore-0.3.0.tar.gz", "has_sig": false, "md5_digest": "41b071cedbf2db12779217857b3e7a80", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22724, "upload_time": "2018-05-23T10:11:43", "url": "https://files.pythonhosted.org/packages/0c/f2/a32347f79323716be0c168d4379aaf52e784b63aebc813c6c17cec9f6ff9/tg-apicore-0.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f85726d6daa5d397bebd3844b500c97f", "sha256": "ac7c9a749b950b1e7e7f5da76c63d809a41e08d772faea62c53847a93b2329b4" }, "downloads": -1, "filename": "tg_apicore-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f85726d6daa5d397bebd3844b500c97f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 23621, "upload_time": "2018-05-23T10:11:41", "url": "https://files.pythonhosted.org/packages/0d/8b/c209afe8f2ef5ec4de9c27501fae51bd0d07cd1dcc593f7e443be9e423d4/tg_apicore-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "41b071cedbf2db12779217857b3e7a80", "sha256": "da47e7539dc080bced58f982df7aba14aa22226473bb7685085e07d063320a03" }, "downloads": -1, "filename": "tg-apicore-0.3.0.tar.gz", "has_sig": false, "md5_digest": "41b071cedbf2db12779217857b3e7a80", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22724, "upload_time": "2018-05-23T10:11:43", "url": "https://files.pythonhosted.org/packages/0c/f2/a32347f79323716be0c168d4379aaf52e784b63aebc813c6c17cec9f6ff9/tg-apicore-0.3.0.tar.gz" } ] }