{ "info": { "author": "Artur Barseghyan", "author_email": "artur.barseghyan@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License v2 (GPLv2)", "License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)", "Operating System :: OS Independent", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "============================\ndjango-rest-framework-tricks\n============================\nCollection of various tricks for\n`Django REST framework `_.\n\nPrerequisites\n=============\n\n- Django 1.8, 1.9, 1.10, 1.11, 2.0, 2.1 and 2.2.\n- Python 2.7, 3.4, 3.5, 3.6, 3.7\n\nDependencies\n============\n\n- djangorestframework: Written with 3.6.3, tested with >=3.5.0,<=3.7.7. May\n work on earlier versions, although not guaranteed.\n\nInstallation\n============\n\n(1) Install latest stable version from PyPI:\n\n .. code-block:: sh\n\n pip install django-rest-framework-tricks\n\n or latest stable version from GitHub:\n\n .. code-block:: sh\n\n pip install https://github.com/barseghyanartur/django-rest-framework-tricks/archive/stable.tar.gz\n\n or latest stable version from BitBucket:\n\n .. code-block:: sh\n\n pip install https://bitbucket.org/barseghyanartur/django-rest-framework-tricks/get/stable.tar.gz\n\n(2) Add ``rest_framework`` and ``rest_framework_tricks`` to ``INSTALLED_APPS``:\n\n .. code-block:: python\n\n INSTALLED_APPS = (\n # ...\n # REST framework\n 'rest_framework',\n\n # REST framework tricks (this package)\n 'rest_framework_tricks',\n\n # ...\n )\n\nDocumentation\n=============\n\nDocumentation is available on `Read the Docs\n`_.\n\nMain features and highlights\n============================\n\n- `Nested serializers`_: Nested serializers for non-relational fields.\n- `Ordering filter`_: Developer friendly names for ordering options (for\n instance, for related field names).\n\nUsage examples\n==============\n\nNested serializers\n------------------\n\nNested serializers for non-relational fields.\n\nOur imaginary ``Book`` model consists of the following (non-relational) Django\nmodel fields:\n\n- ``title``: ``CharField``\n- ``description``: ``TextField``\n- ``summary``: ``TextField``\n- ``publication_date``: ``DateTimeField``\n- ``state``: ``CharField`` (with choices)\n- ``isbn``: ``CharField``\n- ``price``: ``DecimalField``\n- ``pages``: ``IntegerField``\n- ``stock_count``: ``IntegerField``\n\nIn our REST API, we want to split the Book serializer into parts using nested\nserializers to have the following structure:\n\n.. code-block:: javascript\n\n {\n \"id\": \"\",\n \"title\": \"\",\n \"description\": \"\",\n \"summary\": \"\",\n \"publishing_information\": {\n \"publication_date\": \"\",\n \"isbn\": \"\",\n \"pages\": \"\"\n },\n \"stock_information\": {\n \"stock_count\": \"\",\n \"price\": \"\",\n \"state\": \"\"\n }\n }\n\nSample model\n~~~~~~~~~~~~\n\nThe only variation from standard implementation here is that we declare two\n``NestedProxyField`` fields on the ``Book`` model level for to be used in\n``BookSerializer`` serializer.\n\nNote, that the change does not cause model change (no migrations or\nwhatsoever).\n\nRequired imports\n^^^^^^^^^^^^^^^^\n\n.. code-block:: python\n\n from django.db import models\n\n from rest_framework_tricks.models.fields import NestedProxyField\n\nModel definition\n^^^^^^^^^^^^^^^^\n\n.. code-block:: python\n\n BOOK_PUBLISHING_STATUS_PUBLISHED = 'published'\n BOOK_PUBLISHING_STATUS_NOT_PUBLISHED = 'not_published'\n BOOK_PUBLISHING_STATUS_IN_PROGRESS = 'in_progress'\n BOOK_PUBLISHING_STATUS_CHOICES = (\n (BOOK_PUBLISHING_STATUS_PUBLISHED, \"Published\"),\n (BOOK_PUBLISHING_STATUS_NOT_PUBLISHED, \"Not published\"),\n (BOOK_PUBLISHING_STATUS_IN_PROGRESS, \"In progress\"),\n )\n BOOK_PUBLISHING_STATUS_DEFAULT = BOOK_PUBLISHING_STATUS_PUBLISHED\n\n\n class Book(models.Model):\n \"\"\"Book.\"\"\"\n\n title = models.CharField(max_length=100)\n description = models.TextField(null=True, blank=True)\n summary = models.TextField(null=True, blank=True)\n publication_date = models.DateField()\n state = models.CharField(max_length=100,\n choices=BOOK_PUBLISHING_STATUS_CHOICES,\n default=BOOK_PUBLISHING_STATUS_DEFAULT)\n isbn = models.CharField(max_length=100, unique=True)\n price = models.DecimalField(max_digits=10, decimal_places=2)\n pages = models.PositiveIntegerField(default=200)\n stock_count = models.PositiveIntegerField(default=30)\n\n # List the fields for `PublishingInformationSerializer` nested\n # serializer. This does not cause a model change.\n publishing_information = NestedProxyField(\n 'publication_date',\n 'isbn',\n 'pages',\n )\n\n # List the fields for `StockInformationSerializer` nested serializer.\n # This does not cause a model change.\n stock_information = NestedProxyField(\n 'stock_count',\n 'price',\n 'state',\n )\n\n class Meta(object):\n \"\"\"Meta options.\"\"\"\n\n ordering = [\"isbn\"]\n\n def __str__(self):\n return self.title\n\nSample serializers\n~~~~~~~~~~~~~~~~~~\n\nAt first, we add ``nested_proxy_field`` property to the ``Meta`` class\ndefinitions of ``PublishingInformationSerializer`` and\n``StockInformationSerializer`` nested serializers.\n\nThen we define our (main) ``BookSerializer`` class, which is going to be\nused as a ``serializer_class`` of the ``BookViewSet``. We inherit the\n``BookSerializer`` from\n``rest_framework_tricks.serializers.HyperlinkedModelSerializer``\ninstead of the one of the Django REST framework. There's also a\n``rest_framework_tricks.serializers.ModelSerializer`` available.\n\nRequired imports\n^^^^^^^^^^^^^^^^\n\n.. code-block:: python\n\n from rest_framework import serializers\n from rest_framework_tricks.serializers import (\n HyperlinkedModelSerializer,\n )\n\n from .models import Book\n\nDefining the serializers\n^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. note::\n\n If you get validation errors about null-values, add ``allow_null=True``\n next to the ``required=False`` for serializer field definitions.\n\n**Nested serializer**\n\n.. code-block:: python\n\n class PublishingInformationSerializer(serializers.ModelSerializer):\n \"\"\"Publishing information serializer.\"\"\"\n\n publication_date = serializers.DateField(required=False)\n isbn = serializers.CharField(required=False)\n pages = serializers.IntegerField(required=False)\n\n class Meta(object):\n \"\"\"Meta options.\"\"\"\n\n model = Book\n fields = (\n 'publication_date',\n 'isbn',\n 'pages',\n )\n # Note, that this should be set to True to identify that\n # this serializer is going to be used as `NestedProxyField`.\n nested_proxy_field = True\n\n**Nested serializer**\n\n.. code-block:: python\n\n class StockInformationSerializer(serializers.ModelSerializer):\n \"\"\"Stock information serializer.\"\"\"\n\n class Meta(object):\n \"\"\"Meta options.\"\"\"\n\n model = Book\n fields = (\n 'stock_count',\n 'price',\n 'state',\n )\n # Note, that this should be set to True to identify that\n # this serializer is going to be used as `NestedProxyField`.\n nested_proxy_field = True\n\n**Main serializer to be used in the ViewSet**\n\n.. code-block:: python\n\n # Note, that we are importing the ``HyperlinkedModelSerializer`` from\n # the `rest_framework_tricks.serializers`. Names of the serializers\n # should match the names of model properties set with ``NestedProxyField``\n # fields.\n class BookSerializer(HyperlinkedModelSerializer):\n \"\"\"Book serializer.\"\"\"\n\n publishing_information = PublishingInformationSerializer(required=False)\n stock_information = StockInformationSerializer(required=False)\n\n class Meta(object):\n \"\"\"Meta options.\"\"\"\n\n model = Book\n fields = (\n 'url',\n 'id',\n 'title',\n 'description',\n 'summary',\n 'publishing_information',\n 'stock_information',\n )\n\nSample ViewSet\n~~~~~~~~~~~~~~\n\nAbsolutely no variations from standard implementation here.\n\nRequired imports\n^^^^^^^^^^^^^^^^\n\n.. code-block:: python\n\n from rest_framework.viewsets import ModelViewSet\n from rest_framework.permissions import AllowAny\n\n from .models import Book\n from .serializers import BookSerializer\n\nViewSet definition\n^^^^^^^^^^^^^^^^^^\n\n.. code-block:: python\n\n class BookViewSet(ModelViewSet):\n \"\"\"Book ViewSet.\"\"\"\n\n queryset = Book.objects.all()\n serializer_class = BookSerializer\n permission_classes = [AllowAny]\n\nSample OPTIONS call\n^^^^^^^^^^^^^^^^^^^\n\n.. code-block:: text\n\n OPTIONS /books/api/books/\n HTTP 200 OK\n Allow: GET, POST, HEAD, OPTIONS\n Content-Type: application/json\n Vary: Accept\n\n.. code-block:: javascript\n\n {\n \"name\": \"Book List\",\n \"description\": \"Book ViewSet.\",\n \"renders\": [\n \"application/json\",\n \"text/html\"\n ],\n \"parses\": [\n \"application/json\",\n \"application/x-www-form-urlencoded\",\n \"multipart/form-data\"\n ],\n \"actions\": {\n \"POST\": {\n \"id\": {\n \"type\": \"integer\",\n \"required\": false,\n \"read_only\": true,\n \"label\": \"ID\"\n },\n \"title\": {\n \"type\": \"string\",\n \"required\": true,\n \"read_only\": false,\n \"label\": \"Title\",\n \"max_length\": 100\n },\n \"description\": {\n \"type\": \"string\",\n \"required\": false,\n \"read_only\": false,\n \"label\": \"Description\"\n },\n \"summary\": {\n \"type\": \"string\",\n \"required\": false,\n \"read_only\": false,\n \"label\": \"Summary\"\n },\n \"publishing_information\": {\n \"type\": \"nested object\",\n \"required\": false,\n \"read_only\": false,\n \"label\": \"Publishing information\",\n \"children\": {\n \"publication_date\": {\n \"type\": \"date\",\n \"required\": false,\n \"read_only\": false,\n \"label\": \"Publication date\"\n },\n \"isbn\": {\n \"type\": \"string\",\n \"required\": false,\n \"read_only\": false,\n \"label\": \"Isbn\"\n },\n \"pages\": {\n \"type\": \"integer\",\n \"required\": false,\n \"read_only\": false,\n \"label\": \"Pages\"\n }\n }\n },\n \"stock_information\": {\n \"type\": \"nested object\",\n \"required\": false,\n \"read_only\": false,\n \"label\": \"Stock information\",\n \"children\": {\n \"stock_count\": {\n \"type\": \"integer\",\n \"required\": false,\n \"read_only\": false,\n \"label\": \"Stock count\"\n },\n \"price\": {\n \"type\": \"decimal\",\n \"required\": true,\n \"read_only\": false,\n \"label\": \"Price\"\n },\n \"state\": {\n \"type\": \"choice\",\n \"required\": false,\n \"read_only\": false,\n \"label\": \"State\",\n \"choices\": [\n {\n \"value\": \"published\",\n \"display_name\": \"Published\"\n },\n {\n \"value\": \"not_published\",\n \"display_name\": \"Not published\"\n },\n {\n \"value\": \"in_progress\",\n \"display_name\": \"In progress\"\n }\n ]\n }\n }\n }\n }\n }\n }\n\nUnlimited nesting depth\n~~~~~~~~~~~~~~~~~~~~~~~\n\nUnlimited nesting depth is supported.\n\nOur imaginary ``Author`` model could consist of the following (non-relational)\nDjango model fields:\n\n- ``salutation``: ``CharField``\n- ``name``: ``CharField``\n- ``email``: ``EmailField``\n- ``birth_date``: ``DateField``\n- ``biography``: ``TextField``\n- ``phone_number``: ``CharField``\n- ``website``: ``URLField``\n- ``company``: ``CharField``\n- ``company_phone_number``: ``CharField``\n- ``company_email``: ``EmailField``\n- ``company_website``: ``URLField``\n\nIn our REST API, we could split the Author serializer into parts using\nnested serializers to have the following structure:\n\n.. code-block:: javascript\n\n {\n \"id\": \"\",\n \"salutation\": \"\",\n \"name\": \"\",\n \"birth_date\": \"\",\n \"biography\": \"\",\n \"contact_information\": {\n \"personal_contact_information\": {\n \"email\": \"\",\n \"phone_number\": \"\",\n \"website\": \"\"\n },\n \"business_contact_information\": {\n \"company\": \"\",\n \"company_email\": \"\",\n \"company_phone_number\": \"\",\n \"company_website\": \"\"\n }\n }\n }\n\nOur model would have to be defined as follows (see ``Advanced usage examples``\nfor complete model definition):\n\n.. code-block:: python\n\n class Author(models.Model):\n \"\"\"Author.\"\"\"\n\n # ...\n\n # List the fields for `PersonalContactInformationSerializer` nested\n # serializer. This does not cause a model change.\n personal_contact_information = NestedProxyField(\n 'email',\n 'phone_number',\n 'website',\n )\n\n # List the fields for `BusinessContactInformationSerializer` nested\n # serializer. This does not cause a model change.\n business_contact_information = NestedProxyField(\n 'company',\n 'company_email',\n 'company_phone_number',\n 'company_website',\n )\n\n # List the fields for `ContactInformationSerializer` nested\n # serializer. This does not cause a model change.\n contact_information = NestedProxyField(\n 'personal_contact_information',\n 'business_contact_information',\n )\n\n # ...\n\nSee the `Advanced usage examples\n`_\nfor complete example.\n\nOrdering filter\n---------------\nDeveloper friendly names for ordering options (for instance, for related field\nnames) for making better APIs.\n\nSample model\n~~~~~~~~~~~~\n\nAbsolutely no variations from standard implementation here.\n\nRequired imports\n^^^^^^^^^^^^^^^^\n\n.. code-block:: python\n\n from django.db import models\n\n\nModel definition\n^^^^^^^^^^^^^^^^\n\n.. code-block:: python\n\n class Profile(models.Model):\n \"\"\"Profile.\"\"\"\n\n user = models.ForeignKey('auth.User')\n biography = models.TextField()\n hobbies = models.TextField()\n\n\nSample serializer\n~~~~~~~~~~~~~~~~~\n\nAbsolutely no variations from standard implementation here.\n\nRequired imports\n^^^^^^^^^^^^^^^^\n\n.. code-block:: python\n\n from rest_framework import serializers\n\n from .models import Profile\n\nDefining the serializers\n^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code-block:: python\n\n class ProfileSerializer(serializers.ModelSerializer):\n \"\"\"Profile serializer.\"\"\"\n\n username = serializers.CharField(source='user.username', read_only=True)\n full_name = serializers.SerializerMethodField()\n email = serializers.CharField(source='user.email', read_only=True)\n\n class Meta(object):\n\n model = Profile\n fields = (\n 'id',\n 'username',\n 'full_name',\n 'email',\n 'biography',\n 'hobbies',\n )\n\n def get_full_name(self, obj):\n return obj.user.get_full_name()\n\nSample ViewSet\n~~~~~~~~~~~~~~\n\nThe only variation from standard implementation here is that we\nuse ``rest_frameworks_tricks.filters.OrderingFilter`` instead\nof ``rest_framework.filters.OrderingFilter``.\n\nRequired imports\n^^^^^^^^^^^^^^^^\n\n.. code-block:: python\n\n from rest_framework.viewsets import ModelViewSet\n from rest_framework.permissions import AllowAny\n from rest_framework_tricks.filters import OrderingFilter\n\n from .models import Profile\n from .serializers import ProfileSerializer\n\nViewSet definition\n^^^^^^^^^^^^^^^^^^\n\n.. code-block:: python\n\n class ProfileViewSet(ModelViewSet):\n \"\"\"Profile ViewSet.\"\"\"\n\n queryset = Profile.objects.all()\n serializer_class = ProfileSerializer\n permission_classes = [AllowAny]\n filter_backends = (OrderingFilter,)\n ordering_fields = {\n 'id': 'id',\n 'username': 'user__username',\n 'email': 'user__email',\n 'full_name': ['user__first_name', 'user__last_name']\n }\n ordering = ('id',)\n\nSample GET calls\n^^^^^^^^^^^^^^^^\n\nNote, that our ordering options are now equal to the field names in the\nserializer (JSON response). API becomes easier to use/understand that way.\n\n.. code-block:: text\n\n GET /api/profile/?ordering=email\n GET /api/profile/?ordering=-username\n GET /api/profile/?ordering=full_name\n GET /api/profile/?ordering=-full_name\n\nDemo\n====\nRun demo locally\n----------------\nIn order to be able to quickly evaluate the ``django-rest-framework-tricks``,\na demo app (with a quick installer) has been created (works on Ubuntu/Debian,\nmay work on other Linux systems as well, although not guaranteed). Follow the\ninstructions below to have the demo running within a minute.\n\nGrab and run the latest ``rest_framework_tricks_demo_installer.sh`` demo\ninstaller:\n\n.. code-block:: sh\n\n wget -O - https://raw.github.com/barseghyanartur/django-rest-framework-tricks/master/examples/rest_framework_tricks_demo_installer.sh | bash\n\nOpen your browser and test the app.\n\n.. code-block:: text\n\n http://127.0.0.1:8001/books/api/\n\nTesting\n=======\n\nProject is covered with tests.\n\nTo test with all supported Python/Django versions type:\n\n.. code-block:: sh\n\n tox\n\nTo test against specific environment, type:\n\n.. code-block:: sh\n\n tox -e py36-django110\n\nTo test just your working environment type:\n\n.. code-block:: sh\n\n ./runtests.py\n\nTo run a single test in your working environment type:\n\n.. code-block:: sh\n\n ./runtests.py src/rest_framework_tricks/tests/test_nested_proxy_field.py\n\nOr:\n\n.. code-block:: sh\n\n ./manage.py test rest_framework_tricks.tests.test_nested_proxy_field\n\nIt's assumed that you have all the requirements installed. If not, first\ninstall the test requirements:\n\n.. code-block:: sh\n\n pip install -r examples/requirements/test.txt\n\nWriting documentation\n=====================\n\nKeep the following hierarchy.\n\n.. code-block:: text\n\n =====\n title\n =====\n\n header\n ======\n\n sub-header\n ----------\n\n sub-sub-header\n ~~~~~~~~~~~~~~\n\n sub-sub-sub-header\n ^^^^^^^^^^^^^^^^^^\n\n sub-sub-sub-sub-header\n ++++++++++++++++++++++\n\n sub-sub-sub-sub-sub-header\n **************************\n\nLicense\n=======\n\nGPL 2.0/LGPL 2.1\n\nSupport\n=======\n\nFor any issues contact me at the e-mail given in the `Author`_ section.\n\nAuthor\n======\n\nArtur Barseghyan \n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/barseghyanartur/django-rest-framework-tricks/", "keywords": "django", "license": "GPL 2.0/LGPL 2.1", "maintainer": "", "maintainer_email": "", "name": "django-rest-framework-tricks", "package_url": "https://pypi.org/project/django-rest-framework-tricks/", "platform": "", "project_url": "https://pypi.org/project/django-rest-framework-tricks/", "project_urls": { "Homepage": "https://github.com/barseghyanartur/django-rest-framework-tricks/" }, "release_url": "https://pypi.org/project/django-rest-framework-tricks/0.2.10/", "requires_dist": null, "requires_python": "", "summary": "Collection of various tricks for Django REST framework.", "version": "0.2.10" }, "last_serial": 5128041, "releases": { "0.1.8": [ { "comment_text": "", "digests": { "md5": "9848100edc107833335786fb83584615", "sha256": "99f41fbadd68a6319dce78d8ca71a0fbdaaca0f2f5f178ca471892298ad0e76b" }, "downloads": -1, "filename": "django_rest_framework_tricks-0.1.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9848100edc107833335786fb83584615", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 16822, "upload_time": "2017-06-30T22:22:32", "url": "https://files.pythonhosted.org/packages/9b/68/667df6f0cf56db2eeb0b921517d8bda4858a36867245c0ae27fb50f61e7c/django_rest_framework_tricks-0.1.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9ae4eff37a362500a8dea6c8a38a4293", "sha256": "cac51b239ea13f9421f286f49244ac4598687026fa59d128dd7fda8abe48f407" }, "downloads": -1, "filename": "django-rest-framework-tricks-0.1.8.tar.gz", "has_sig": false, "md5_digest": "9ae4eff37a362500a8dea6c8a38a4293", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29135, "upload_time": "2017-06-30T22:22:30", "url": "https://files.pythonhosted.org/packages/71/b5/ae85f76ac616fb16de9d5cf6fab518d977a4175014d77cd577c46451b878/django-rest-framework-tricks-0.1.8.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "83629816e12788b06869426d9ac3d586", "sha256": "aff85fca18f6b7871f0a26e6e6db5eeb34a3c1ebc9a2e0cbfda879b334f603c9" }, "downloads": -1, "filename": "django_rest_framework_tricks-0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "83629816e12788b06869426d9ac3d586", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 19544, "upload_time": "2017-07-02T21:56:43", "url": "https://files.pythonhosted.org/packages/56/a1/1a988b51151580e5863962a7ca8628554c987a3bee23120b1bc366159de9/django_rest_framework_tricks-0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "304dd5288c867b0ae6d397e59493d50f", "sha256": "23e965fb89bf280c83885d83adecec4ca59de3eda67372913a0ca0024323a758" }, "downloads": -1, "filename": "django-rest-framework-tricks-0.2.tar.gz", "has_sig": false, "md5_digest": "304dd5288c867b0ae6d397e59493d50f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32344, "upload_time": "2017-07-02T21:56:42", "url": "https://files.pythonhosted.org/packages/e2/c4/3df3ca88478437c194153b654cd2e578e5018de62d88c3c9c6cedb3826ca/django-rest-framework-tricks-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "afc56aabd80d9ce6512781ffae81d715", "sha256": "2738fc167dc13428a255eb7b449753537ebbde21396fb045c93bb16002648af7" }, "downloads": -1, "filename": "django_rest_framework_tricks-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "afc56aabd80d9ce6512781ffae81d715", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 19605, "upload_time": "2017-07-04T00:24:44", "url": "https://files.pythonhosted.org/packages/4d/2f/8568ad7166af66427afece3cd43f27a233fa75d8fcb4f7b6b579e126db7f/django_rest_framework_tricks-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "98f5c83826a3d6863bd43c97ff1927ce", "sha256": "2e17e666945d3b62a40bd85d9bc3696065e27ae3abd6a1b240d39ac9a7c2f230" }, "downloads": -1, "filename": "django-rest-framework-tricks-0.2.1.tar.gz", "has_sig": false, "md5_digest": "98f5c83826a3d6863bd43c97ff1927ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32410, "upload_time": "2017-07-04T00:24:42", "url": "https://files.pythonhosted.org/packages/19/0c/cecdcb4e57a9650a964879556792b2333e73c2e2fc7fac2a3de310c63b62/django-rest-framework-tricks-0.2.1.tar.gz" } ], "0.2.10": [ { "comment_text": "", "digests": { "md5": "61def1f9e5f2bada40c1850c2ffe82f0", "sha256": "2e0b1b46a5b35a770b499d856a74829410822328da2f04fd19907a7d37adfc2d" }, "downloads": -1, "filename": "django_rest_framework_tricks-0.2.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "61def1f9e5f2bada40c1850c2ffe82f0", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 36069, "upload_time": "2019-04-11T09:38:49", "url": "https://files.pythonhosted.org/packages/1b/75/60fe8f397df96f11727cc30055832e1b4640d94454cedff30f5de6965303/django_rest_framework_tricks-0.2.10-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "50093b25285c62b8093c01e938a4482e", "sha256": "c85cb3ce55cc2216c80ae1e7153f3534decbaa333e553a41e7c373331be37513" }, "downloads": -1, "filename": "django-rest-framework-tricks-0.2.10.tar.gz", "has_sig": false, "md5_digest": "50093b25285c62b8093c01e938a4482e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37453, "upload_time": "2019-04-11T09:38:47", "url": "https://files.pythonhosted.org/packages/03/4d/292a706fb457281479b0df943d0338f70c1c097fe5ec9266754e5a065f39/django-rest-framework-tricks-0.2.10.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "3368aaa63e505be960ea281c8f54ad23", "sha256": "10260f862e9f321aa2a53c44923a194df77303dc808a4b664626717cbe5db786" }, "downloads": -1, "filename": "django_rest_framework_tricks-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3368aaa63e505be960ea281c8f54ad23", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 19842, "upload_time": "2017-07-04T20:33:11", "url": "https://files.pythonhosted.org/packages/67/c5/f89041709d855eb41b4be282f6242eef37bc84bdf9c036481190b3a5aa78/django_rest_framework_tricks-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "517f39255ecf78ab3880d454d35ca62f", "sha256": "621d6fa9fb7870c696b5d69c308cc70b2854531f9b2072c9677b73225d6586f4" }, "downloads": -1, "filename": "django-rest-framework-tricks-0.2.2.tar.gz", "has_sig": false, "md5_digest": "517f39255ecf78ab3880d454d35ca62f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32662, "upload_time": "2017-07-04T20:33:09", "url": "https://files.pythonhosted.org/packages/eb/6f/ad8cf3aacbb9ebe69886cb02fff1fd8a8ddce575929998e15c6189e243d2/django-rest-framework-tricks-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "bcdf51f9cec35d93ddc3ede2a64bf533", "sha256": "8c46d08303c50d5b272dc16d9c9dd9f7f1ee55d3707013035c6438c33c83ecbf" }, "downloads": -1, "filename": "django_rest_framework_tricks-0.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bcdf51f9cec35d93ddc3ede2a64bf533", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 20469, "upload_time": "2017-07-13T19:18:08", "url": "https://files.pythonhosted.org/packages/1d/71/24ff27e6a5eedd1dbe87566b994f8e5bbc2d9dc6e8a5f811da47ab2d55f9/django_rest_framework_tricks-0.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ec88cbf24e2d4cf83a6b2d6d122a8f8a", "sha256": "0243e7277f961059974e0a1946da8328c6f10f6685847db366434068361a5151" }, "downloads": -1, "filename": "django-rest-framework-tricks-0.2.3.tar.gz", "has_sig": false, "md5_digest": "ec88cbf24e2d4cf83a6b2d6d122a8f8a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33304, "upload_time": "2017-07-13T19:18:04", "url": "https://files.pythonhosted.org/packages/6d/43/923673a697f63bfc9b7646b3621f8d230b4ca6b899f96f0c84261c579680/django-rest-framework-tricks-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "46213edce7ec102ce94e0030decf08c3", "sha256": "f259c083955146fa0ba9e0506a5c256e928830af4fd13146e49e1a5a05129c79" }, "downloads": -1, "filename": "django_rest_framework_tricks-0.2.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "46213edce7ec102ce94e0030decf08c3", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 20707, "upload_time": "2017-07-14T20:26:16", "url": "https://files.pythonhosted.org/packages/fa/6d/9f42b74dc3b23a2ff81c6b08668e7b7882ad01d7f92282c2c363565cf25c/django_rest_framework_tricks-0.2.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "672675322ac71263ab3399ee35b602c3", "sha256": "31e6e53258008c7da21523214977f5af88b98aab19a1892c2a6131d150f50249" }, "downloads": -1, "filename": "django-rest-framework-tricks-0.2.4.tar.gz", "has_sig": false, "md5_digest": "672675322ac71263ab3399ee35b602c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33580, "upload_time": "2017-07-14T20:26:14", "url": "https://files.pythonhosted.org/packages/48/af/a0d767d8979ab32a46abfd04b3a332b476373d5f46527aa37e228178fa1d/django-rest-framework-tricks-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "f3eee8dec32bad9324037155ed861ddb", "sha256": "7705fa2dd24489569af36f526be8dc14fd6f438649fee22ebcd34035e91de677" }, "downloads": -1, "filename": "django_rest_framework_tricks-0.2.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f3eee8dec32bad9324037155ed861ddb", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 20807, "upload_time": "2017-12-30T20:55:09", "url": "https://files.pythonhosted.org/packages/8e/7d/644aa1ee3909e3a424a0937567fa242fd579903dca9849e5ca4fb3937d30/django_rest_framework_tricks-0.2.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "196e72d5dc441f66bdc3ca183c232514", "sha256": "29ee6b065bfa7ff22ee525bc6d6f5160ebc0c87d5194a0e7a161b76b723a8124" }, "downloads": -1, "filename": "django-rest-framework-tricks-0.2.5.tar.gz", "has_sig": false, "md5_digest": "196e72d5dc441f66bdc3ca183c232514", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29815, "upload_time": "2017-12-30T20:55:06", "url": "https://files.pythonhosted.org/packages/e2/34/95809bd737ead244aa1b723f826e0878568eb72e6de78b7f33cd94032a44/django-rest-framework-tricks-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "646bf0910c5d1b1f97fcb29533ec96f2", "sha256": "8fe2dad131815f68dcad345c06560cd2cebd52c0661175c619a5a210a488f1c8" }, "downloads": -1, "filename": "django_rest_framework_tricks-0.2.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "646bf0910c5d1b1f97fcb29533ec96f2", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 24474, "upload_time": "2018-01-28T00:39:11", "url": "https://files.pythonhosted.org/packages/cc/fb/c9c7d39cdd21d2c77e44bf662ceb248b8b5da5b3257674dee5e07aa9fc5f/django_rest_framework_tricks-0.2.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0b3acfd40e8c2e143b7259084a028047", "sha256": "77e9c49fbfd627b1df6f0b50afbab8f63f7d7fdfaff192e6184579b5e81689d2" }, "downloads": -1, "filename": "django-rest-framework-tricks-0.2.6.tar.gz", "has_sig": false, "md5_digest": "0b3acfd40e8c2e143b7259084a028047", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32366, "upload_time": "2018-01-28T00:39:09", "url": "https://files.pythonhosted.org/packages/ca/f4/16d294fbed9dcba358f4d53f790c59499a87b4ace7b01d57e0123485fb58/django-rest-framework-tricks-0.2.6.tar.gz" } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "1c0eb8aecec82ac3f371b1fcea4267c6", "sha256": "473977b309ef816d5ed030b941bcfde817e4832c6830fd738a018dfb53e0b90b" }, "downloads": -1, "filename": "django_rest_framework_tricks-0.2.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1c0eb8aecec82ac3f371b1fcea4267c6", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 24488, "upload_time": "2018-01-28T00:58:02", "url": "https://files.pythonhosted.org/packages/1a/02/bee6e309558c5619f58050885133082cc3e9d7931e0600e587cf61bee977/django_rest_framework_tricks-0.2.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6a9fd1a0dc8a890081dbb3c741599a80", "sha256": "d1cf3c16a0ed3bcf74c2231386446d9b6e0265be522a0f11d96f33ab27d57e84" }, "downloads": -1, "filename": "django-rest-framework-tricks-0.2.7.tar.gz", "has_sig": false, "md5_digest": "6a9fd1a0dc8a890081dbb3c741599a80", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32402, "upload_time": "2018-01-28T00:57:59", "url": "https://files.pythonhosted.org/packages/94/29/194b6a83157b6c69134a56c3577b3262d07ea67eef819f6c00377b8523de/django-rest-framework-tricks-0.2.7.tar.gz" } ], "0.2.8": [ { "comment_text": "", "digests": { "md5": "0f5469c8d59b5b089a435a09756d9fd9", "sha256": "7368f7c3f06683bec9847d7e5521357b0a7021da54e7e4feeaa0d721c4babe63" }, "downloads": -1, "filename": "django_rest_framework_tricks-0.2.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0f5469c8d59b5b089a435a09756d9fd9", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 24707, "upload_time": "2018-01-31T21:03:42", "url": "https://files.pythonhosted.org/packages/04/1a/2330f9f4b0bd6d2e5114af64f9870dfe5b398690cd218464f2df50c4dbf5/django_rest_framework_tricks-0.2.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "27f5dc28c10cafb1c0d59e3700c15848", "sha256": "984921095b667b3766c42de2da58eb0a67f295a754f5d28170becaf7f1d8abf1" }, "downloads": -1, "filename": "django-rest-framework-tricks-0.2.8.tar.gz", "has_sig": false, "md5_digest": "27f5dc28c10cafb1c0d59e3700c15848", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32643, "upload_time": "2018-01-31T21:03:40", "url": "https://files.pythonhosted.org/packages/78/e7/db428180894ccce425b70b9bdd417c0f7b4f7d9e0206c7f8132bf2c1ab1a/django-rest-framework-tricks-0.2.8.tar.gz" } ], "0.2.9": [ { "comment_text": "", "digests": { "md5": "c09658e6ffa66a0aa99ec3da0844c21a", "sha256": "eedfc4a2618e6b10b46ee03f7719f91d40a9ac7246357179586d894b38de236e" }, "downloads": -1, "filename": "django_rest_framework_tricks-0.2.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c09658e6ffa66a0aa99ec3da0844c21a", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 25092, "upload_time": "2018-02-02T22:23:29", "url": "https://files.pythonhosted.org/packages/65/3b/6246a3b5b5f58dfb0fefc1121310c5af47f8c166168246f0668d0aa49f94/django_rest_framework_tricks-0.2.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "93361d074da6c145b779bb2ab116fcf0", "sha256": "0f3447f3bcc28efc829111d5ed101fa3f247f8ddb0c61639e78e0dd705061c3b" }, "downloads": -1, "filename": "django-rest-framework-tricks-0.2.9.tar.gz", "has_sig": false, "md5_digest": "93361d074da6c145b779bb2ab116fcf0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33052, "upload_time": "2018-02-02T22:23:25", "url": "https://files.pythonhosted.org/packages/20/a5/9a7bf67aaf5f40fcbd6d373f664ae4acaa553494e29b0d46296743b458d6/django-rest-framework-tricks-0.2.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "61def1f9e5f2bada40c1850c2ffe82f0", "sha256": "2e0b1b46a5b35a770b499d856a74829410822328da2f04fd19907a7d37adfc2d" }, "downloads": -1, "filename": "django_rest_framework_tricks-0.2.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "61def1f9e5f2bada40c1850c2ffe82f0", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 36069, "upload_time": "2019-04-11T09:38:49", "url": "https://files.pythonhosted.org/packages/1b/75/60fe8f397df96f11727cc30055832e1b4640d94454cedff30f5de6965303/django_rest_framework_tricks-0.2.10-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "50093b25285c62b8093c01e938a4482e", "sha256": "c85cb3ce55cc2216c80ae1e7153f3534decbaa333e553a41e7c373331be37513" }, "downloads": -1, "filename": "django-rest-framework-tricks-0.2.10.tar.gz", "has_sig": false, "md5_digest": "50093b25285c62b8093c01e938a4482e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37453, "upload_time": "2019-04-11T09:38:47", "url": "https://files.pythonhosted.org/packages/03/4d/292a706fb457281479b0df943d0338f70c1c097fe5ec9266754e5a065f39/django-rest-framework-tricks-0.2.10.tar.gz" } ] }