{ "info": { "author": "Yezy Ilomo", "author_email": "yezileliilomo@hotmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "# django-restql\n[![Build Status](https://api.travis-ci.com/yezyilomo/django-restql.svg?branch=master)](https://api.travis-ci.com/yezyilomo/django-restql)\n[![Latest Version](https://img.shields.io/pypi/v/django-restql.svg)](https://pypi.org/project/django-restql/)\n[![Python Versions](https://img.shields.io/pypi/pyversions/django-restql.svg)](https://pypi.org/project/django-restql/)\n[![License](https://img.shields.io/pypi/l/django-restql.svg)](https://pypi.org/project/django-restql/)\n\n**django-restql** is a python library which allows you to turn your API made with **Django REST Framework(DRF)** into a GraphQL like API. With **django-restql** you will be able to\n* Send a query to your API and get exactly what you need, nothing more and nothing less.\n\n* Control the data you get, not the server.\n\n* Get predictable results, since you control what you get from the server.\n\n* Save the load of fetching unused data from the server(Over-fetching and Under-fetching problem).\n\n* Write(create & update) nested data of any level with flexibility.\n\nIsn't it cool?.\n\n\n## Requirements\n* Python >= 3.5\n* Django >= 1.10\n* Django REST Framework >= 3.5\n\n\n## Installing\n\n```python\npip install django-restql\n```\n\n\n## Querying Data\nUsing **django-restql** to query data is very simple, you just have to inherit the `DynamicFieldsMixin` class when defining a serializer.\n```python\nfrom rest_framework import serializers\nfrom django.contrib.auth.models import User\n\nfrom django_restql.mixins import DynamicFieldsMixin\n\nclass UserSerializer(DynamicFieldsMixin, serializer.ModelSerializer):\n class Meta:\n model = User\n fields = ['id', 'username', 'email', 'groups']\n```\n\nA regular request returns all fields as specified on DRF serializer, in fact **django-restql** doesn't handle this request at all. Below is an example of a request without a query parameter, as you see all fields are retured as specified on `UserSerializer`.\n\n`GET /users`\n\n``` json\n [\n {\n \"id\": 1,\n \"username\": \"yezyilomo\",\n \"email\": \"yezileliilomo@hotmail.com\",\n \"groups\": [1,2]\n },\n ...\n ]\n```\n\n**django-restql** handle all GET requests with `query` parameter, this parameter is the one used to pass all fields to be included in a response. For example to select `id` and `username` fields from User model, send a request with a ` query` parameter as shown below.\n\n`GET /users/?query={id, username}`\n\n```json\n [\n {\n \"id\": 1,\n \"username\": \"yezyilomo\"\n },\n ...\n ]\n```\n\n**django-restql** support querying both flat and nested resources, so you can expand or query nested fields at any level as long as your field is defined as nested field on a serializer. For example you can query a country and region field from location.\n\n`GET /users/?query={id, username, location{country, region}}`\n\n```json\n [\n {\n \"id\": 1,\n \"username\": \"yezyilomo\",\n \"location\": {\n \"contry\": \"Tanzania\",\n \"region\": \"Dar es salaam\"\n }\n },\n ...\n ]\n```\n\n**django-restql** got your back on querying iterable nested fields(one2many or many2many) too. For example if you want to expand `groups` field into `id` and `name`, here is how you would do it.\n\n`GET /users/?query={id, username, groups{id, name}}`\n\n```json\n [\n {\n \"id\": 1,\n \"username\": \"yezyilomo\",\n \"groups\": [\n {\n \"id\": 2,\n \"name\": \"Auth_User\"\n }\n {\n \"id\": 3,\n \"name\": \"Admin_User\"\n }\n ]\n },\n ...\n ]\n```\n\nIf a query contains nested field without expanding and it's not defined as a nested field on a serializer, **django-restql** will return its id or array of ids for the case of nested iterable field(one2many or many2many). For example on a request below `location` is a flat nested field(many2one) and `groups` is an iterable nested field(one2many or many2many).\n\n`GET /users/?query={id, username, location, group}`\n\n```json\n [\n {\n \"id\": 1,\n \"username\": \"yezyilomo\",\n \"location\": 6,\n \"groups\": [1,2]\n },\n ...\n ]\n```\n\n\n### Using `fields=[..]` and `exclude=[..]` kwargs\nWith **django-restql** you can specify fields to be included when instantiating a serializer, this provides a way to refilter fields on nested fields(i.e you can opt to remove some fields on a nested field). Below is an example which shows how you can specify fields to be included on nested resources. \n\n```python\nfrom rest_framework import serializers\nfrom django.contrib.auth.models import User\nfrom django_restql.mixins import DynamicFieldsMixin\n\nfrom app.models import Book, Course\n\n\nclass BookSerializer(DynamicFieldsMixin, serializers.ModelSerializer):\n class Meta:\n model = Book\n fields = ['id', 'title', 'author']\n\n\nclass CourseSerializer(DynamicFieldsMixin, serializers.ModelSerializer):\n books = BookSerializer(many=True, read_only=True, fields=[\"title\"])\n class Meta:\n model = Course\n fields = ['name', 'code', 'books']\n```\n\n`GET /courses/`\n\n```json\n [\n {\n \"name\": \"Computer Programming\",\n \"code\": \"CS50\",\n \"books\": [\n {\"title\": \"Computer Programming Basics\"},\n {\"title\": \"Data structures\"}\n ]\n },\n ...\n ]\n```\nAs you see from the response above, the nested resource(book) has only one field(title) as specified on `fields=[\"title\"]` kwarg during instantiating BookSerializer, so if you send a request like `GET /course?query={name, code, books{title, author}}` you will get an error that `author` field is not found because it was not included on `fields=[\"title\"]` kwarg.\n\n\nYou can also specify fields to be excluded when instantiating a serializer by using `exclude=[]` as shown below \n```python\nfrom rest_framework import serializers\nfrom django_restql.mixins import DynamicFieldsMixin\n\nfrom app.models import Book, Course\n\n\nclass BookSerializer(DynamicFieldsMixin, serializers.ModelSerializer):\n class Meta:\n model = Book\n fields = ['id', 'title', 'author']\n\n\nclass CourseSerializer(DynamicFieldsMixin, serializers.ModelSerializer):\n books = BookSerializer(many=True, read_only=True, exclude=[\"author\"])\n class Meta:\n model = Course\n fields = ['name', 'code', 'books']\n```\n\n`GET /courses/`\n\n```json\n [\n {\n \"name\": \"Computer Programming\",\n \"code\": \"CS50\",\n \"books\": [\n {\"id\": 1, \"title\": \"Computer Programming Basics\"},\n {\"id\": 2, \"title\": \"Data structures\"}\n ]\n },\n ...\n ]\n```\nFrom the response above you can see that `author` field has been excluded fom book nested resource as specified on `exclude=[\"author\"]` kwarg during instantiating BookSerializer.\n\n**Note:** `fields=[..]` and `exclude=[]` kwargs have no effect when you access the resources directly, so when you access books you will still get all fields i.e\n\n`GET /books/`\n\n```json\n [\n {\n \"id\": 1,\n \"title\": \"Computer Programming Basics\",\n \"author\": \"S.Mobit\"\n },\n ...\n ]\n```\nSo you can see that all fields have appeared as specified on `fields = ['id', 'title', 'author']` on BookSerializer class.\n\n\n### Using `return_pk=True` kwargs\nWith **django-restql** you can specify whether to return nested resource pk or data. Below is an example which shows how we can specify fields to be included on nested resources. \n\n```python\nfrom rest_framework import serializers\nfrom django_restql.mixins import DynamicFieldsMixin\n\nfrom app.models import Book, Course\n\n\nclass BookSerializer(DynamicFieldsMixin, serializers.ModelSerializer):\n class Meta:\n model = Book\n fields = ['id', 'title', 'author']\n\n\nclass CourseSerializer(DynamicFieldsMixin, serializers.ModelSerializer):\n books = BookSerializer(many=True, read_only=True, return_pk=True)\n class Meta:\n model = Course\n fields = ['name', 'code', 'books']\n```\n\n`GET /course/`\n\n```json\n [\n {\n \"name\": \"Computer Programming\",\n \"code\": \"CS50\",\n \"books\": [1,2]\n },\n ...\n ]\n```\nSo you can see that on a nested field `books` book pks have been returned instead of books data as specified on `return_pk=True` kwarg on `BookSerializer`.\n\n\n## Mutating Data(Creating and Updating Data)\n**django-restql** got your back on creating and updating nested data too, it has two components for mutating nested data, `NestedModelSerializer` and `NestedField`. A serializer `NestedModelSerializer` has `update` and `create` logics for nested fields on the other hand `NestedField` is used to validate data before dispatching update or create.\n\n\n### Using NestedField & NestedModelSerializer to mutate data\nJust like in querying data, mutating nested data with **django-restql** is very simple, you just have to inherit `NestedModelSerializer` on a serializer with nested fields and use `NestedField` to define those nested fields. Below is an example which shows how to use `NestedModelSerializer` and `NestedField`.\n```python\nfrom rest_framework import serializers\nfrom django_restql.serializers import NestedModelSerializer\nfrom django_restql.fields import NestedField\n\nfrom app.models import Location, Amenity, Property\n\n\nclass LocationSerializer(serializers.ModelSerializer):\n class Meta:\n model = Location\n fields = (\"id\", \"city\", \"country\")\n\n\nclass AmenitySerializer(serializers.ModelSerializer):\n class Meta:\n model = Amenity\n fields = (\"id\", \"name\")\n\n\n# Inherit NestedModelSerializer to support create and update \n# on nested fields\nclass PropertySerializer(NestedModelSerializer):\n location = NestedField(LocationSerializer) # Define location as nested field\n amenities = NestedField(AmenitySerializer, many=True) # Define amenities as nested field\n class Meta:\n model = Property\n fields = (\n 'id', 'price', 'location', 'amenities'\n )\n```\n
\n\n\n```POST /api/property/```\n\nRequest Body\n```json\n{\n \"price\": 60000,\n \"location\": {\n \"city\": \"Newyork\",\n \"country\": \"USA\"\n },\n \"amenities\": {\n \"add\": [3],\n \"create\": [\n {\"name\": \"Watererr\"},\n {\"name\": \"Electricity\"}\n ]\n }\n}\n```\nWhat's done here is pretty clear, location will be created and associated with the property created, also create operation on amenities will create amenities with values specified in a list and associate with the property, add operation will add amenity with id 4 to a list of amenities of the property.\n\n**Note:** POST for many related field supports two operations which are `create` and `add`.\n\n
\n\nResponse\n```json\n{\n \"id\": 2,\n \"price\": 60000,\n \"location\": {\n \"id\": 3,\n \"city\": \"Newyork\",\n \"country\": \"USA\"\n },\n \"amenities\": [\n {\"id\": 1, \"name\": \"Watererr\"},\n {\"id\": 2, \"name\": \"Electricity\"},\n {\"id\": 3, \"name\": \"Swimming Pool\"}\n ]\n}\n```\n
\n\n\n```PUT /api/property/2/```\n\nRequest Body\n```json\n{\n \"price\": 50000,\n \"location\": {\n \"city\": \"Newyork\",\n \"country\": \"USA\"\n },\n \"amenities\": {\n \"add\": [4],\n \"create\": [{\"name\": \"Fance\"}],\n \"remove\": [3],\n \"update\": {1: {\"name\": \"Water\"}}\n }\n}\n```\n**Note:** Here `add`, `create`, `remove` and `update` are operations, so `add` operation add amenitiy with id 4 to a list of amenities of the property, `create` operation create amenities with values specified in a list, `remove` operation dessociate amenities with id 3 from a property, `update` operation edit amenity with id 1 according to values specified.\n\n**Note:** PUT/PATCH for many related field supports four operations which are `create`, `add`, `remove` and `update`.\n\n
\n\nResponse\n```json\n{\n \"id\": 2,\n \"price\": 50000,\n \"location\": {\n \"id\": 3,\n \"city\": \"Newyork\",\n \"country\": \"USA\"\n },\n \"amenities\": [\n {\"id\": 1, \"name\": \"Water\"},\n {\"id\": 2, \"name\": \"Electricity\"},\n {\"id\": 4, \"name\": \"Bathtub\"},\n {\"id\": 5, \"name\": \"Fance\"}\n ]\n}\n```\n
\n\n\n### Using NestedField with `accept_pk=True` kwarg.\n`accept_pk=True` is used if you want to update nested field by using pk/id of existing data(basically associate and dessociate existing nested resources with the parent resource without actually mutating the nested resource). This applies to ForeignKey relation only.\n\n```python\nfrom rest_framework import serializers \nfrom django_restql.fields import NestedField\nfrom django_restql.serializers import NestedModelSerializer\n\nfrom app.models import Location, Property\n\n\nclass LocationSerializer(serializers.ModelSerializer):\n class Meta:\n model = Location\n fields = (\"id\", \"city\", \"country\")\n\n\nclass PropertySerializer(NestedModelSerializer):\n location = NestedField(ocationSerializer, accept_pk=True) # pk based nested field\n class Meta:\n model = Property\n fields = (\n 'id', 'price', 'location'\n )\n```\n
\n\n\n```POST /api/property/```\n\nRequest Body\n```json\n{\n \"price\": 40000,\n \"location\": 2\n}\n```\n**Note:** Here location resource with id 2 is already existing, so what's done here is create new property resource and associate it with a location with id 2.\n
\n\nResponse\n```json\n{\n \"id\": 1,\n \"price\": 40000,\n \"location\": {\n \"id\": 2,\n \"city\": \"Tokyo\",\n \"country\": \"China\"\n }\n}\n```\n
\n\n\n### Using NestedField with `create_ops=[..]` and `update_ops=[..]` kwargs.\nYou can restrict some operations by using `create_ops` and `update_ops` keyword arguments as follows\n\n```python\nfrom rest_framework import serializers \nfrom django_restql.fields import NestedField\nfrom django_restql.serializers import NestedModelSerializer \n\nfrom app.models import Location, Amenity, Property\n\n\nclass AmenitySerializer(serializers.ModelSerializer):\n class Meta:\n model = Amenity\n fields = (\"id\", \"name\")\n\n\nclass PropertySerializer(NestedModelSerializer):\n amenities = NestedField(\n AmenitySerializer, \n many=True,\n create_ops=[\"add\"], # Allow only add operation(restrict create operation)\n update_ops=[\"add\", \"remove\"] # Allow only add and remove operations(restrict create and update operations)\n )\n class Meta:\n model = Property\n fields = (\n 'id', 'price', 'amenities'\n )\n```\n
\n\n\n```POST /api/property/```\n\nRequest Body\n```json\n{\n \"price\": 60000,\n \"amenities\": {\n \"add\": [1, 2]\n }\n}\n```\n**Note:** According to `create_ops=[\"add\"]`, you can't use `create` operation in here!.\n
\n\nResponse\n```json\n{\n \"id\": 2,\n \"price\": 60000,\n \"amenities\": [\n {\"id\": 1, \"name\": \"Watererr\"},\n {\"id\": 2, \"name\": \"Electricity\"}\n ]\n}\n```\n
\n\n\n```PUT /api/property/2/```\n\nRequest Body\n```json\n{\n \"price\": 50000,\n \"amenities\": {\n \"add\": [3],\n \"remove\": [2]\n }\n}\n```\n**Note:** According to `update_ops=[\"add\", \"remove\"]`, you can't use `create` or `update` operation in here!.\n
\n\nResponse\n```json\n{\n \"id\": 2,\n \"price\": 50000,\n \"amenities\": [\n {\"id\": 1, \"name\": \"Water\"},\n {\"id\": 3, \"name\": \"Bathtub\"}\n ]\n}\n```\n
\n\n\n## Using `DynamicFieldsMixin` and `NestedField` together\nYou can use `DynamicFieldsMixin` and `NestedModelSerializer` together if you want your serializer to be writable(on nested fields) and support querying data, this is very common. Below is an example which shows how you can use `DynamicFieldsMixin` and `NestedField` together.\n```python\nfrom rest_framework import serializers \nfrom django_restql.fields import NestedField\nfrom django_restql.mixins import DynamicFieldsMixin\nfrom django_restql.serializers import NestedModelSerializer \n\nfrom app.models import Location, Property\n\n\nclass LocationSerializer(DynamicFieldsMixin, serializers.ModelSerializer):\n class Meta:\n model = Location\n fields = (\"id\", \"city\", \"country\")\n\n# Inherit both DynamicFieldsMixin and NestedModelSerializer\nclass PropertySerializer(DynamicFieldsMixin, NestedModelSerializer):\n location = NestedField(LocationSerializer)\n class Meta:\n model = Property\n fields = (\n 'id', 'price', 'location'\n )\n```\n\n`NestedField` is nothing but a serializer wrapper, it returns an instance of a modified version of a serializer passed, so you can pass all the args and kwargs accepted by a serializer on it, it will simply pass them to a serializer passed when instantiating an instance. So you can pass anything accepted by a serializer to a `NestedField` wrapper, and if a serializer passed inherits `DynamicFieldsMini` just like `LocationSerializer` on above example then you can pass any arg or kwarg accepted by `DynamicFieldsMixin` when defining location as a nested field, i.e\n\n```python\nlocation = NestedField(LocationSerializer, fields=[..])\n```\n\n```python \nlocation = NestedField(LocationSerializer, exclude=[..])\n``` \n\n```python\nlocation = NestedField(LocationSerializer, return_pk=True)\n``` \n\n\n## Customizing django-restql\n**django-restql** is very configurable, here is what you can customize on it.\n* Change the name of ```query``` parameter when querying data.\n\n If you don't want to use the name ```query``` as your parameter, you can inherit `DynamicFieldsMixin` and change it as shown below\n ```python\n from django_restql.mixins import DynamicFieldsMixin\n\n class MyDynamicFieldMixin(DynamicFieldsMixin):\n query_param_name = \"your_favourite_name\"\n ```\n Now you can use this Mixin on your serializer and use the name `your_favourite_name` as your parameter. E.g\n\n `GET /users/?your_favourite_name={id, username}`\n\n* Customize how fields to include in a response are filtered.\n You can do this by inheriting DynamicFieldsMixin and override `field` methods as shown below.\n\n ```python\n from django_restql.mixins import DynamicFieldsMixin\n\n class CustomDynamicFieldMixin(DynamicFieldsMixin):\n @property\n def fields(self):\n # Your customization here\n return fields\n ```\n **Note:** To be able to do this you must understand how **django-restql** is implemented, specifically **DynamicFieldsMixin** class, you can check it [here](https://github.com/yezyilomo/django-restql/blob/master/django_restql/mixins.py). In fact this is how **django-restql** is implemented(just by overriding `field` method of a serializer, nothing more and nothing less).\n\n\n## Running Tests\n`python setup.py test`\n\n\n## Credits\n* Implementation of this library is based on the idea behind [GraphQL](https://graphql.org/).\n* My intention is to extend the capability of [drf-dynamic-fields](https://github.com/dbrgn/drf-dynamic-fields) library to support more functionalities like allowing to query nested fields both flat and iterable at any level and allow writing on nested fields while maintaining simplicity.\n\n\n## Contributing [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)\n\nWe welcome all contributions. Please read our [CONTRIBUTING.md](https://github.com/yezyilomo/django-restql/blob/master/CONTRIBUTING.md) first. You can submit any ideas as [pull requests](https://github.com/yezyilomo/django-restql/pulls) or as [GitHub issues](https://github.com/yezyilomo/django-restql/issues). If you'd like to improve code, check out the [Code Style Guide](https://github.com/yezyilomo/django-restql/blob/master/CONTRIBUTING.md#styleguides) and have a good time!.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/yezyilomo/django-restql", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "django-restql", "package_url": "https://pypi.org/project/django-restql/", "platform": "", "project_url": "https://pypi.org/project/django-restql/", "project_urls": { "Homepage": "https://github.com/yezyilomo/django-restql" }, "release_url": "https://pypi.org/project/django-restql/0.5.2/", "requires_dist": [ "pypeg2", "djangorestframework" ], "requires_python": ">=3.5", "summary": "Turn your API made with Django REST Framework(DRF) into a GraphQL like API.", "version": "0.5.2" }, "last_serial": 5831349, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "a1a7d3bf497e826caac2502fbc0d54f9", "sha256": "e5a3c7b2169c9272def3f4a10d323f289fca115f7e16bab7a2fe726dbb07d057" }, "downloads": -1, "filename": "django_restql-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "a1a7d3bf497e826caac2502fbc0d54f9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 4089, "upload_time": "2019-04-14T18:07:10", "url": "https://files.pythonhosted.org/packages/0b/b8/a12ab01b115bef2167398bd91781f43439b9bd09c3fffe71b1618378da2c/django_restql-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1cdc2d6ea0648003e68fa8ff5e0c9908", "sha256": "ad242bf26c4310c4510e90da3989b12ee492c4b848a8d88782ce5e301626df03" }, "downloads": -1, "filename": "django-restql-0.1.0.tar.gz", "has_sig": false, "md5_digest": "1cdc2d6ea0648003e68fa8ff5e0c9908", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 3153, "upload_time": "2019-04-14T18:07:13", "url": "https://files.pythonhosted.org/packages/87/11/1d9db09669d95f33d0fb08d39b515abb5afed24078448f570d4b592df803/django-restql-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "72c3a7f143876627edb6cb93b6408f44", "sha256": "f490c49af209924537946e5ab2644c4a9a3d51a8bf865987ddcff7c183bcb457" }, "downloads": -1, "filename": "django_restql-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "72c3a7f143876627edb6cb93b6408f44", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 5191, "upload_time": "2019-05-10T20:01:07", "url": "https://files.pythonhosted.org/packages/43/44/8f0d5df5e0a2c5eafad5f66b5b7c071a0f89292c3db9fbabf38eff3e5ebf/django_restql-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "74ce54e4a29662f161d48858d39f6356", "sha256": "107034402623968106a7c0595ead5de49ecbfb60b881bcd4568a15fd18fcc714" }, "downloads": -1, "filename": "django-restql-0.1.1.tar.gz", "has_sig": false, "md5_digest": "74ce54e4a29662f161d48858d39f6356", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 4434, "upload_time": "2019-05-10T20:01:10", "url": "https://files.pythonhosted.org/packages/85/39/2b0dec93d5a4797fff35495d7599f51cfc7e01568083a839d6fa6f070eef/django-restql-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "f14d13173ea7a980aa418fae84bd43d8", "sha256": "4e6debb314ad5597ea35eb817d083397aa1e06ad233bd948cc44f21d8d43164d" }, "downloads": -1, "filename": "django_restql-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f14d13173ea7a980aa418fae84bd43d8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 4722, "upload_time": "2019-05-16T21:34:37", "url": "https://files.pythonhosted.org/packages/af/66/e131f898c48bec273d97f36aa488923b5f00a97cefa053ab248a9531c829/django_restql-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3674f5a0c6da66d95ced82d1f6ce88ed", "sha256": "ac4c276f528a2369e60cc33de2c5289d6524f336b1d66fe5ed7560118fe3d10c" }, "downloads": -1, "filename": "django-restql-0.2.0.tar.gz", "has_sig": false, "md5_digest": "3674f5a0c6da66d95ced82d1f6ce88ed", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 3911, "upload_time": "2019-05-16T21:34:39", "url": "https://files.pythonhosted.org/packages/cf/9d/d79eaf21c1126231a09ad85f15e40c4815ecb4d2a45c54cc385ad7b92760/django-restql-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "f74ee2f31f6beb011a739d36be470353", "sha256": "f979c2d8947e3ab3ec7202b2f7277d9f35d9d34731a648622ff529f438ab2947" }, "downloads": -1, "filename": "django_restql-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f74ee2f31f6beb011a739d36be470353", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 5259, "upload_time": "2019-05-24T04:33:27", "url": "https://files.pythonhosted.org/packages/c1/d1/2b0acc5fe413060c443413fb9525e790e41c8eef39f074da9d1dec95b5c1/django_restql-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "539cfa5a642bbb829e17206bd859a133", "sha256": "95ba58d35e097d4e20c2d15e8691eebb57e1e83b117921ba274375baf14c2919" }, "downloads": -1, "filename": "django-restql-0.2.1.tar.gz", "has_sig": false, "md5_digest": "539cfa5a642bbb829e17206bd859a133", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 4492, "upload_time": "2019-05-24T04:33:29", "url": "https://files.pythonhosted.org/packages/ab/aa/478ebb5282df418a7c15056570b751dc95b2ec5be54a1ccf94f2b613a442/django-restql-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "3f2cb15f29b1d507a90beb1a2d92f5fb", "sha256": "7814886d7779d629ae1ae3c3a4438c0527134904a9026d267011c959a8352034" }, "downloads": -1, "filename": "django_restql-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3f2cb15f29b1d507a90beb1a2d92f5fb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 5477, "upload_time": "2019-05-24T12:15:22", "url": "https://files.pythonhosted.org/packages/4d/6b/d7a45994a96c1a121e315c47c79c60e5ea8363a06de7b0d9f0fdd3efac5a/django_restql-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bb5800a557a523f38784d438a97d5b84", "sha256": "9eb6ce99818eed15fab05b4444a0c4fc1f7753a925a4cce8c90130b1c55dc4ee" }, "downloads": -1, "filename": "django-restql-0.3.0.tar.gz", "has_sig": false, "md5_digest": "bb5800a557a523f38784d438a97d5b84", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 4770, "upload_time": "2019-05-24T12:15:24", "url": "https://files.pythonhosted.org/packages/7c/93/981c93fa01c2c255c8c1102bbc49c27bf5ea4ee4028fcc24ee528cefd0ed/django-restql-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "fa127db2b62a381578b06505d11f027f", "sha256": "b3e91a6cebbd7c1e583a7c8d882965e2bfc1902dca420afabe761334f5b0dcff" }, "downloads": -1, "filename": "django_restql-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "fa127db2b62a381578b06505d11f027f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 5554, "upload_time": "2019-05-27T12:44:53", "url": "https://files.pythonhosted.org/packages/02/58/c96e7b13a01d0d6e10ea39ebcab86495f2204270af8aec8d94ed5758844a/django_restql-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3afc14f145b2856ac893ea017eecba96", "sha256": "535340f1142dc87809693660af61b48e6bc088460f8fc19456d0b3743cc2b6c1" }, "downloads": -1, "filename": "django-restql-0.3.1.tar.gz", "has_sig": false, "md5_digest": "3afc14f145b2856ac893ea017eecba96", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 4850, "upload_time": "2019-05-27T12:44:55", "url": "https://files.pythonhosted.org/packages/c0/ce/06f98751b5adc4087d49448451437a9fb90a24add6ef183050b8fedd7cd7/django-restql-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "06b928a7a3efc4be559a87d6983e7416", "sha256": "5af789c78bce69b8e55afaa8d73f300d142c6b8449693a5379220ce800abad58" }, "downloads": -1, "filename": "django_restql-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "06b928a7a3efc4be559a87d6983e7416", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 5615, "upload_time": "2019-05-28T08:39:14", "url": "https://files.pythonhosted.org/packages/f4/19/9f7bfee667060a3ca85ed8efdd1257b703b9a88ab9f0e775c761381712d3/django_restql-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4dc0fc532fde8472c7c0374942c19c1a", "sha256": "fd535c7a4e3f15c8e1419fa18c0639ad0e645db03e20c44904a83a9ed5079994" }, "downloads": -1, "filename": "django-restql-0.3.2.tar.gz", "has_sig": false, "md5_digest": "4dc0fc532fde8472c7c0374942c19c1a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 4917, "upload_time": "2019-05-28T08:39:16", "url": "https://files.pythonhosted.org/packages/bf/9d/311ecb8f0ce1b813f89c3707b44e013c71a34aa09f1c14011c68edaff4e8/django-restql-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "b017734f1180d67eee366ddb7b800667", "sha256": "531ecddf9756e447a7b29c42626c1da4a4d96ee7a1c6695abbcb401f963862cf" }, "downloads": -1, "filename": "django_restql-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "b017734f1180d67eee366ddb7b800667", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 6264, "upload_time": "2019-05-28T21:17:40", "url": "https://files.pythonhosted.org/packages/24/eb/2a61f245b6028b28f9b1e0d4c00320945a8ced2d779696726fb50e2cf44a/django_restql-0.3.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a0724fde6969c08d99a6bccec7f75485", "sha256": "3ca9e8666d185b4a04fb1a8453118c8385466d06f5459e5072d0dc6619cb671e" }, "downloads": -1, "filename": "django-restql-0.3.3.tar.gz", "has_sig": false, "md5_digest": "a0724fde6969c08d99a6bccec7f75485", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 5354, "upload_time": "2019-05-28T21:17:42", "url": "https://files.pythonhosted.org/packages/61/2b/3a8c7bc67f9e0ada90836ec9d5d74a2413bf7225ba63c83173740cefb696/django-restql-0.3.3.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "2edbf6a2c37bf9c6dd4a4a9f00c457ed", "sha256": "308310e81ae4e1550ef4f8310b1dd50706b9b3c590fec5453b79a85a27069fb1" }, "downloads": -1, "filename": "django_restql-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2edbf6a2c37bf9c6dd4a4a9f00c457ed", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 6154, "upload_time": "2019-08-19T16:40:50", "url": "https://files.pythonhosted.org/packages/15/69/71b471accc7318761b1bcc4c7d21078e35d9863abd61a33e36957719bd35/django_restql-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9c721c8f281698cca3e13b1751498c77", "sha256": "531a6f325fad4cae3f118b73a9591ce44b3688767b430498d1cf458c7d861231" }, "downloads": -1, "filename": "django-restql-0.4.0.tar.gz", "has_sig": false, "md5_digest": "9c721c8f281698cca3e13b1751498c77", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 5120, "upload_time": "2019-08-19T16:40:52", "url": "https://files.pythonhosted.org/packages/a1/45/03936a60f9b8e162ecba172a207bacb2da55f6e6696dc357175650136c48/django-restql-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "d49bf585fb30955bcf2bdf65a9516215", "sha256": "b6de8f8e5d0112fa1bf59679686363460592980faa469e15e2d68853eaf31b9f" }, "downloads": -1, "filename": "django_restql-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d49bf585fb30955bcf2bdf65a9516215", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 6154, "upload_time": "2019-08-20T06:20:35", "url": "https://files.pythonhosted.org/packages/bf/ff/1ec236d5b3d159054e78dfef430c454d28c517642b5046618708beadc76c/django_restql-0.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3101dc6dd1a28d115bc5f35694f6ab67", "sha256": "710cf64949f2f3625c92176b7cb0c0e48fe1c81ab9a0e7f4673cf8406c014102" }, "downloads": -1, "filename": "django-restql-0.4.1.tar.gz", "has_sig": false, "md5_digest": "3101dc6dd1a28d115bc5f35694f6ab67", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 5129, "upload_time": "2019-08-20T06:20:37", "url": "https://files.pythonhosted.org/packages/80/6f/ebf678c5a1c8a91ce33c47f09edb223ab15985809bbf4b9a5ec6c9edd054/django-restql-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "69c2bc65f37a717e2bbb93031aea3383", "sha256": "f53ebc7e38a8d9ce0c9885a6ca9c54ec76918fee4e32452c047e31251209c6a3" }, "downloads": -1, "filename": "django_restql-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "69c2bc65f37a717e2bbb93031aea3383", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 6749, "upload_time": "2019-08-31T22:22:42", "url": "https://files.pythonhosted.org/packages/32/88/cc4b37e90ba2a7b11d5003c2c50f2c4732f4d2070af192695adc43958829/django_restql-0.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3244a21ea318512094b046e37ebd2941", "sha256": "5e7af04d2977223259a480885f485f024ecfa601d3ba10c682a8c086d11f590d" }, "downloads": -1, "filename": "django-restql-0.4.2.tar.gz", "has_sig": false, "md5_digest": "3244a21ea318512094b046e37ebd2941", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 5540, "upload_time": "2019-08-31T22:22:44", "url": "https://files.pythonhosted.org/packages/19/dd/1a10b3ed883be4abff3b44b3e3d62ab6a314f78e5ec1ad37dd0810a11276/django-restql-0.4.2.tar.gz" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "6912ef2c37cd280b30ab8a00e67cedcb", "sha256": "e52b53f8a04328b9344f18c5b20ea0a683ce86d39f2fa9b594c9b9a6d3248859" }, "downloads": -1, "filename": "django_restql-0.4.3-py3-none-any.whl", "has_sig": false, "md5_digest": "6912ef2c37cd280b30ab8a00e67cedcb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 5988, "upload_time": "2019-09-03T17:34:58", "url": "https://files.pythonhosted.org/packages/ee/23/f3be8ee7f58123858d7f1587b4209ff4dd4b340dd60111ca886cfc7572fd/django_restql-0.4.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e2d96f085aa1332453b96616b19105a6", "sha256": "25c0369c4966bda0b91ce4d08976584ba523889ac578559c7ef355d33319b8c6" }, "downloads": -1, "filename": "django-restql-0.4.3.tar.gz", "has_sig": false, "md5_digest": "e2d96f085aa1332453b96616b19105a6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 5116, "upload_time": "2019-09-03T17:35:01", "url": "https://files.pythonhosted.org/packages/34/54/11245faaf3b1649bdb7119fbef071c820ecfdc5bb8e769849bed8fd875bd/django-restql-0.4.3.tar.gz" } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "8d13f3123d2985e06fad8358dc912bb5", "sha256": "5344f425a737b246da54f271e49ea077ef7ac05da621e26eea79782d4779ff33" }, "downloads": -1, "filename": "django_restql-0.4.4-py3-none-any.whl", "has_sig": false, "md5_digest": "8d13f3123d2985e06fad8358dc912bb5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 5990, "upload_time": "2019-09-04T07:59:19", "url": "https://files.pythonhosted.org/packages/0f/4a/e00eddd2c832f2fc167596dc63e40eff0436b22bcb878f693fd29c9cdc98/django_restql-0.4.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "576cc7d714c6fcb28e35976db83375f5", "sha256": "b3cbdbe768658242938ffeaf28af2d7725afd94ac0c83dc8a5cf499fd9088e28" }, "downloads": -1, "filename": "django-restql-0.4.4.tar.gz", "has_sig": false, "md5_digest": "576cc7d714c6fcb28e35976db83375f5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 5111, "upload_time": "2019-09-04T07:59:21", "url": "https://files.pythonhosted.org/packages/5c/de/07539cbef969131ccc6a93ebdd6fdc0748628fe365892e83293d493acdc9/django-restql-0.4.4.tar.gz" } ], "0.4.5": [ { "comment_text": "", "digests": { "md5": "964d79f9f4b782ac154837f2393fecd6", "sha256": "50f489a2ed9b7fee6277526b766cf8de18078d68b076ab6b211b29370c551124" }, "downloads": -1, "filename": "django_restql-0.4.5-py3-none-any.whl", "has_sig": false, "md5_digest": "964d79f9f4b782ac154837f2393fecd6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 7130, "upload_time": "2019-09-06T21:18:09", "url": "https://files.pythonhosted.org/packages/2f/d6/62df2d235776059cdc8d33be32494d67cf0f476c1b76e2cb843fc9e9ddc8/django_restql-0.4.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ad81a43053192b28237e08285988f1dd", "sha256": "ff752ed181370b1c8956c0b3628e05b08d724fc847cb17d3bfd684f946de61a7" }, "downloads": -1, "filename": "django-restql-0.4.5.tar.gz", "has_sig": false, "md5_digest": "ad81a43053192b28237e08285988f1dd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 6438, "upload_time": "2019-09-06T21:18:24", "url": "https://files.pythonhosted.org/packages/9a/97/bef05397362cb9d6c828c714b50c45eeb4ffd0f64a2797cb2b71e2a1c53d/django-restql-0.4.5.tar.gz" } ], "0.4.6": [ { "comment_text": "", "digests": { "md5": "6f8eda19ee9b8a27a252cc2396e0e9b5", "sha256": "b28aff522bbf6a82659d9e2e52aa4e1cf7319b73cbd7332655c42b00c015c1f3" }, "downloads": -1, "filename": "django_restql-0.4.6-py3-none-any.whl", "has_sig": false, "md5_digest": "6f8eda19ee9b8a27a252cc2396e0e9b5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 7172, "upload_time": "2019-09-09T06:01:53", "url": "https://files.pythonhosted.org/packages/0e/d7/8e2d3789f88169a6f15c7285734d538b708137960cd9f48f8b36801ee2a7/django_restql-0.4.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c1e35fdd0d30ad18864071438eaf807d", "sha256": "f69c1ef0ec4e9350eb9bcc42d2e5c62cff9d513213930379de81e58d94f64fd7" }, "downloads": -1, "filename": "django-restql-0.4.6.tar.gz", "has_sig": false, "md5_digest": "c1e35fdd0d30ad18864071438eaf807d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 6460, "upload_time": "2019-09-09T06:01:55", "url": "https://files.pythonhosted.org/packages/1f/8b/33f73e4423215a289157ca1d1044db47109dfd159cd86c2362f3dc1db319/django-restql-0.4.6.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "0948c0229003c565d6f0f5238bef540f", "sha256": "6dfd5c0109090eab6d1acbb3a7afe274791d011e688a3cbc1474c141930827a9" }, "downloads": -1, "filename": "django_restql-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0948c0229003c565d6f0f5238bef540f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 13030, "upload_time": "2019-09-10T20:28:54", "url": "https://files.pythonhosted.org/packages/aa/9e/934df43d81836922a65043af8af36958469f32b235d96438399cb99de7f2/django_restql-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "449c18d80f94cdc976e01a034f8c82b0", "sha256": "fd01571610abb5d7d20819f38e6b35d04406d28d2d206011b63745aef41b6b73" }, "downloads": -1, "filename": "django-restql-0.5.0.tar.gz", "has_sig": false, "md5_digest": "449c18d80f94cdc976e01a034f8c82b0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 12097, "upload_time": "2019-09-10T20:29:08", "url": "https://files.pythonhosted.org/packages/75/9e/6f83a3c892479854cdd32c3c44650e8f5d6667aabd0823ddd5af35f79a8e/django-restql-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "985d9fe02a988509f939c1519c779f71", "sha256": "9c0489bdceb199e260312238962a121c2bea84bbaa255e53fb49ce4613f65d26" }, "downloads": -1, "filename": "django_restql-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "985d9fe02a988509f939c1519c779f71", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 13634, "upload_time": "2019-09-13T15:34:07", "url": "https://files.pythonhosted.org/packages/85/f2/6f9b6e1414674997e80332f3d9e3fd83e0296eb66109b7a5ccc774fb3b0a/django_restql-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d3fcb22022214978ca51c1b0b2ff3994", "sha256": "f55b3648218d89a293eef467e329a523f993220cf76d74c40f4069f2e0a3b101" }, "downloads": -1, "filename": "django-restql-0.5.1.tar.gz", "has_sig": false, "md5_digest": "d3fcb22022214978ca51c1b0b2ff3994", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 12781, "upload_time": "2019-09-13T15:34:37", "url": "https://files.pythonhosted.org/packages/39/ba/0002015207a313e7437476ddc9bb6fdf34b241348888a00ac708922a29d0/django-restql-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "0479c7d44ad48044bdc47b8aedfe47d8", "sha256": "66745757bf646233d2d3701462b5227fb85815851f8f257cadaad708150763ba" }, "downloads": -1, "filename": "django_restql-0.5.2-py3-none-any.whl", "has_sig": false, "md5_digest": "0479c7d44ad48044bdc47b8aedfe47d8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 13615, "upload_time": "2019-09-15T10:08:25", "url": "https://files.pythonhosted.org/packages/7b/cd/750395de29540894948a46d1678ab818077b32d235947ae913f425e2cf60/django_restql-0.5.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c2d149c4bb7b36b6e8b1cd610dd8ec96", "sha256": "63553ee88d9417b97e749729f2cc8fcaafabee2cb1f8205c0f4b1961a6b29226" }, "downloads": -1, "filename": "django-restql-0.5.2.tar.gz", "has_sig": false, "md5_digest": "c2d149c4bb7b36b6e8b1cd610dd8ec96", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 12763, "upload_time": "2019-09-15T10:08:28", "url": "https://files.pythonhosted.org/packages/67/9d/6813c4b4db8a3cbf9e8df0596c7b0b94ab0923a6ec809f66f9437cfc58c7/django-restql-0.5.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0479c7d44ad48044bdc47b8aedfe47d8", "sha256": "66745757bf646233d2d3701462b5227fb85815851f8f257cadaad708150763ba" }, "downloads": -1, "filename": "django_restql-0.5.2-py3-none-any.whl", "has_sig": false, "md5_digest": "0479c7d44ad48044bdc47b8aedfe47d8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 13615, "upload_time": "2019-09-15T10:08:25", "url": "https://files.pythonhosted.org/packages/7b/cd/750395de29540894948a46d1678ab818077b32d235947ae913f425e2cf60/django_restql-0.5.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c2d149c4bb7b36b6e8b1cd610dd8ec96", "sha256": "63553ee88d9417b97e749729f2cc8fcaafabee2cb1f8205c0f4b1961a6b29226" }, "downloads": -1, "filename": "django-restql-0.5.2.tar.gz", "has_sig": false, "md5_digest": "c2d149c4bb7b36b6e8b1cd610dd8ec96", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 12763, "upload_time": "2019-09-15T10:08:28", "url": "https://files.pythonhosted.org/packages/67/9d/6813c4b4db8a3cbf9e8df0596c7b0b94ab0923a6ec809f66f9437cfc58c7/django-restql-0.5.2.tar.gz" } ] }