{ "info": { "author": "Denis Stebunov", "author_email": "support@ivelum.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "DjangoQL\n========\n\n.. image:: https://travis-ci.org/ivelum/djangoql.svg?branch=master\n :target: https://travis-ci.org/ivelum/djangoql\n\nAdvanced search language for Django, with auto-completion. Supports logical\noperators, parenthesis, table joins, and works with any Django model. Tested on\nPython 2.7, 3.5 - 3.7, Django 1.8 - 2.2. The auto-completion feature has been\ntested in Chrome, Firefox, Safari, IE9+.\n\nSee a video: `DjangoQL demo `_\n\n.. image:: https://raw.githubusercontent.com/ivelum/djangoql/master/djangoql/static/djangoql/img/completion_example_scaled.png\n\nContents\n--------\n\n* `Installation`_\n* `Add it to your Django admin`_\n* `Using DjangoQL with the standard Django admin search`_\n* `Language reference`_\n* `DjangoQL Schema`_\n* `Custom search fields`_\n* `Can I use it outside of Django admin?`_\n* `Using completion widget outside of Django admin`_\n\nInstallation\n------------\n\n.. code:: shell\n\n $ pip install djangoql\n\nAdd ``'djangoql'`` to ``INSTALLED_APPS`` in your ``settings.py``:\n\n.. code:: python\n\n INSTALLED_APPS = [\n ...\n 'djangoql',\n ...\n ]\n\n\nAdd it to your Django admin\n---------------------------\n\nAdding ``DjangoQLSearchMixin`` your model admin will replace the standard\nDjango search functionality with DjangoQL search. Example:\n\n.. code:: python\n\n from django.contrib import admin\n\n from djangoql.admin import DjangoQLSearchMixin\n\n from .models import Book\n\n\n @admin.register(Book)\n class BookAdmin(DjangoQLSearchMixin, admin.ModelAdmin):\n pass\n\n\nUsing DjangoQL with the standard Django admin search\n----------------------------------------------------\n\nDjangoQL will recognize if you have defined search_fields in your ModelAdmin\nclass, and doing so will allow you to choose between a standard Django search\n(as specified by search fields) and an advanced search with DjangoQL. Example:\n\n.. code:: python\n\n @admin.register(Book)\n class BookAdmin(DjangoQLSearchMixin, admin.ModelAdmin):\n search_fields = ('title', 'author__name')\n\nFor the example above, a checkbox that controls search mode would appear near\nthe search input. If you don't want two search modes, simply remove\n``search_fields`` from your ModelAdmin class.\n\n\nLanguage reference\n------------------\n\nDjangoQL is shipped with comprehensive Syntax Help, which can be found in Django\nadmin (see the Syntax Help link in auto-completion popup). Here's a quick\nsummary:\n\nDjangoQL's syntax resembles Python's, with some minor\ndifferences. Basically you just reference model fields as you would\nin Python code, then apply comparison and logical operators and\nparenthesis. DjangoQL is case-sensitive.\n\n- model fields: exactly as they are defined in Python code. Access\n nested properties via ``.``, for example ``author.last_name``;\n- strings must be double-quoted. Single quotes are not supported.\n To escape a double quote use ``\\\"``;\n- boolean and null values: ``True``, ``False``, ``None``. Please note\n that they can be combined only with equality operators, so you can\n write ``published = False or date_published = None``, but\n ``published > False`` will cause an error;\n- logical operators: ``and``, ``or``;\n- comparison operators: ``=``, ``!=``, ``<``, ``<=``, ``>``, ``>=``\n - work as you expect. ``~`` and ``!~`` - test whether or not a string contains\n a substring (translated into ``__icontains``);\n- test a value vs. list: ``in``, ``not in``. Example:\n ``pk in (2, 3)``.\n\n\nDjangoQL Schema\n---------------\n\nSchema defines limitations - what you can do with a DjangoQL query.\nIf you don't specify any schema, DjangoQL will provide a default\nschema for you. This will walk recursively through all model fields and\nrelations and include everything it finds in the schema, so\nusers would be able to search through everything. Sometimes\nthis is not what you want, either due to DB performance or security\nconcerns. If you'd like to limit search models or fields, you should\ndefine a schema. Here's an example:\n\n.. code:: python\n\n class UserQLSchema(DjangoQLSchema):\n exclude = (Book,)\n suggest_options = {\n Group: ['name'],\n }\n\n def get_fields(self, model):\n if model == Group:\n return ['name']\n return super(UserQLSchema, self).get_fields(model)\n\n\n @admin.register(User)\n class CustomUserAdmin(DjangoQLSearchMixin, UserAdmin):\n djangoql_schema = UserQLSchema\n\nIn the example above we created a schema that does 3 things:\n\n- excludes the Book model from search via ``exclude`` option. Instead of\n ``exclude`` you may also use ``include``, which limits a search to\n listed models only;\n- limits available search fields for Group model to only the ``name`` field\n , in the ``.get_fields()`` method;\n- enables completion options for Group names via ``suggest_options``.\n\nAn important note about ``suggest_options``: it looks for the ``choices`` model\nfield parameter first, and if it's not specified - it will synchronously pull\nall values for given model fields, so you should avoid large querysets there.\nIf you'd like to define custom suggestion options, see below.\n\nCustom search fields\n--------------------\n\nDeeper search customization can be achieved with custom search fields. Custom\nsearch fields can be used to search by annotations, define custom suggestion\noptions, or define fully custom search logic. In ``djangoql.schema``, DjangoQL\ndefines the following base field classes that you may\nsubclass to define your own behavior:\n\n* ``IntField``\n* ``FloatField``\n* ``StrField``\n* ``BoolField``\n* ``DateField``\n* ``DateTimeField``\n* ``RelationField``\n\nHere are examples for common use cases:\n\n**Search by queryset annotations:**\n\n.. code:: python\n\n from djangoql.schema import DjangoQLSchema, IntField\n\n\n class UserQLSchema(DjangoQLSchema):\n def get_fields(self, model):\n fields = super(UserQLSchema, self).get_fields(model)\n if model == User:\n fields = [IntField(name='groups_count')] + fields\n return fields\n\n\n @admin.register(User)\n class CustomUserAdmin(DjangoQLSearchMixin, UserAdmin):\n djangoql_schema = UserQLSchema\n\n def get_queryset(self, request):\n qs = super(CustomUserAdmin, self).get_queryset(request)\n return qs.annotate(groups_count=Count('groups'))\n\nLet's take a closer look at what's happening in the example above. First, we\nadd ``groups_count`` annotation to the queryset that is used by Django admin\nin the ``CustomUserAdmin.get_queryset()`` method. It would contain the number\nof groups a user belongs to. As our queryset now pulls this column, we can\nfilter by it. It just needs to be included in the schema. In\n``UserQLSchema.get_fields()`` we define a custom integer search field for the\n``User`` model. Its name should match the name of the column in our queryset.\n\n**Custom suggestion options**\n\n.. code:: python\n\n from djangoql.schema import DjangoQLSchema, StrField\n\n\n class GroupNameField(StrField):\n model = Group\n name = 'name'\n suggest_options = True\n\n def get_options(self):\n return super(GroupNameField, self).get_options().\\\n annotate(users_count=Count('user')).\\\n order_by('-users_count')\n\n\n class UserQLSchema(DjangoQLSchema):\n def get_fields(self, model):\n if model == Group:\n return ['id', GroupNameField()]\n return super(UserQLSchema, self).get_fields(model)\n\n\n @admin.register(User)\n class CustomUserAdmin(DjangoQLSearchMixin, UserAdmin):\n djangoql_schema = UserQLSchema\n\nIn this example we've defined a custom GroupNameField that sorts suggestions\nfor group names by popularity (no. of users in a group) instead of default\nalphabetical sorting.\n\n**Custom search lookup**\n\nDjangoQL base fields provide two basic methods that you can override to\nsubstitute either search column, search value, or both -\n``.get_lookup_name()`` and ``.get_lookup_value(value)``:\n\n.. code:: python\n\n class UserDateJoinedYear(IntField):\n name = 'date_joined_year'\n\n def get_lookup_name(self):\n return 'date_joined__year'\n\n\n class UserQLSchema(DjangoQLSchema):\n def get_fields(self, model):\n fields = super(UserQLSchema, self).get_fields(model)\n if model == User:\n fields = [UserDateJoinedYear()] + fields\n return fields\n\n\n @admin.register(User)\n class CustomUserAdmin(DjangoQLSearchMixin, UserAdmin):\n djangoql_schema = UserQLSchema\n\nIn this example we've defined the custom ``date_joined_year`` search field for\nusers, and used the built-in Django ``__year`` filter option in\n``.get_lookup_name()`` to filter by date year only. Similarly you can use\n``.get_lookup_value(value)`` hook to modify a search value before it's used in\nthe filter.\n\n**Fully custom search lookup**\n\n``.get_lookup_name()`` and ``.get_lookup_value(value)`` hooks cover many\nsimple use cases, but sometimes they're not enough and you want a fully custom\nsearch logic. In such cases you can override main ``.get_lookup()`` method of\na field. Example below demonstrates User ``age`` search:\n\n.. code:: python\n\n from djangoql.schema import DjangoQLSchema, IntField\n\n\n class UserAgeField(IntField):\n \"\"\"\n Search by given number of full years\n \"\"\"\n model = User\n name = 'age'\n\n def get_lookup_name(self):\n \"\"\"\n We'll be doing comparisons vs. this model field\n \"\"\"\n return 'date_joined'\n\n def get_lookup(self, path, operator, value):\n \"\"\"\n The lookup should support with all operators compatible with IntField\n \"\"\"\n if operator == 'in':\n result = None\n for year in value:\n condition = self.get_lookup(path, '=', year)\n result = condition if result is None else result | condition\n return result\n elif operator == 'not in':\n result = None\n for year in value:\n condition = self.get_lookup(path, '!=', year)\n result = condition if result is None else result & condition\n return result\n\n value = self.get_lookup_value(value)\n search_field = '__'.join(path + [self.get_lookup_name()])\n year_start = self.years_ago(value + 1)\n year_end = self.years_ago(value)\n if operator == '=':\n return (\n Q(**{'%s__gt' % search_field: year_start}) &\n Q(**{'%s__lte' % search_field: year_end})\n )\n elif operator == '!=':\n return (\n Q(**{'%s__lte' % search_field: year_start}) |\n Q(**{'%s__gt' % search_field: year_end})\n )\n elif operator == '>':\n return Q(**{'%s__lt' % search_field: year_start})\n elif operator == '>=':\n return Q(**{'%s__lte' % search_field: year_end})\n elif operator == '<':\n return Q(**{'%s__gt' % search_field: year_end})\n elif operator == '<=':\n return Q(**{'%s__gte' % search_field: year_start})\n\n def years_ago(self, n):\n timestamp = now()\n try:\n return timestamp.replace(year=timestamp.year - n)\n except ValueError:\n # February 29\n return timestamp.replace(month=2, day=28, year=timestamp.year - n)\n\n\n class UserQLSchema(DjangoQLSchema):\n def get_fields(self, model):\n fields = super(UserQLSchema, self).get_fields(model)\n if model == User:\n fields = [UserAgeField()] + fields\n return fields\n\n\n @admin.register(User)\n class CustomUserAdmin(DjangoQLSearchMixin, UserAdmin):\n djangoql_schema = UserQLSchema\n\n\nCan I use it outside of Django admin?\n-------------------------------------\n\nSure. You can add DjangoQL search functionality to any Django model using\n``DjangoQLQuerySet``:\n\n.. code:: python\n\n from django.db import models\n\n from djangoql.queryset import DjangoQLQuerySet\n\n\n class Book(models.Model):\n name = models.CharField(max_length=255)\n author = models.ForeignKey('auth.User')\n\n objects = DjangoQLQuerySet.as_manager()\n\nWith the example above you can perform a search like this:\n\n.. code:: python\n\n qs = Book.objects.djangoql(\n 'name ~ \"war\" and author.last_name = \"Tolstoy\"'\n )\n\nIt returns a normal queryset, so you can extend it and reuse if\nnecessary. The following code works fine:\n\n.. code:: python\n\n print(qs.count())\n\nAlternatively you can add DjangoQL search to any existing queryset,\neven if it's not an instance of DjangoQLQuerySet:\n\n.. code:: python\n\n from django.contrib.auth.models import User\n\n from djangoql.queryset import apply_search\n\n qs = User.objects.all()\n qs = apply_search(qs, 'groups = None')\n print(qs.exists())\n\nSchemas can be specified either as a queryset option, or passed\nto ``.djangoql()`` queryset method directly:\n\n.. code:: python\n\n class BookQuerySet(DjangoQLQuerySet):\n djangoql_schema = BookSchema\n\n\n class Book(models.Model):\n ...\n\n objects = BookQuerySet.as_manager()\n\n # Now, Book.objects.djangoql() will use BookSchema by default:\n Book.objects.djangoql('name ~ \"Peace\") # uses BookSchema\n\n # Overriding default queryset schema with AnotherSchema:\n Book.objects.djangoql('name ~ \"Peace\", schema=AnotherSchema)\n\nYou can also provide schema as an option for ``apply_search()``\n\n.. code:: python\n\n qs = User.objects.all()\n qs = apply_search(qs, 'groups = None', schema=CustomSchema)\n\n\nUsing completion widget outside of Django admin\n-----------------------------------------------\n\nCompletion widget is not tightly coupled to Django admin, so you can easily\nuse it outside of admin if you want. Here is an example:\n\nTemplate code, ``completion_demo.html``:\n\n.. code:: html\n\n {% load static %}\n \n \n \n \n DjangoQL completion demo\n \n \n \n \n \n\n
\n

{{ error }}

\n \n
\n\n \n\n \n \n \n\nAnd in your ``views.py``:\n\n.. code:: python\n\n import json\n\n from django.contrib.auth.models import Group, User\n from django.shortcuts import render_to_response\n from django.views.decorators.http import require_GET\n\n from djangoql.exceptions import DjangoQLError\n from djangoql.queryset import apply_search\n from djangoql.schema import DjangoQLSchema\n\n\n class UserQLSchema(DjangoQLSchema):\n include = (User, Group)\n\n\n @require_GET\n def completion_demo(request):\n q = request.GET.get('q', '')\n error = ''\n query = User.objects.all().order_by('username')\n if q:\n try:\n query = apply_search(query, q, schema=UserQLSchema)\n except DjangoQLError as e:\n query = query.none()\n error = str(e)\n return render_to_response('completion_demo.html', {\n 'q': q,\n 'error': error,\n 'search_results': query,\n 'introspections': json.dumps(UserQLSchema(query.model).as_dict()),\n })\n\n\nLicense\n-------\n\nMIT\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ivelum/djangoql/", "keywords": "", "license": "MIT License\n\nCopyright (c) 2017 ivelum\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n", "maintainer": "", "maintainer_email": "", "name": "djangoql", "package_url": "https://pypi.org/project/djangoql/", "platform": "", "project_url": "https://pypi.org/project/djangoql/", "project_urls": { "Homepage": "https://github.com/ivelum/djangoql/" }, "release_url": "https://pypi.org/project/djangoql/0.13.1/", "requires_dist": null, "requires_python": "", "summary": "DjangoQL: Advanced search language for Django", "version": "0.13.1" }, "last_serial": 5944131, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "f32f4dc34ac2ee8839e07238180e92ce", "sha256": "83baf9bdbf1e0fcbe59241fed90e72b28f09705ae96d37ee5721b88ba0e023af" }, "downloads": -1, "filename": "djangoql-0.1.1.tar.gz", "has_sig": false, "md5_digest": "f32f4dc34ac2ee8839e07238180e92ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8460, "upload_time": "2017-03-23T15:40:29", "url": "https://files.pythonhosted.org/packages/56/e5/4b4dd16bd20fd31c5c64c2f202509f7d404dacf0a32daf7bbb72e6f5eb07/djangoql-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "99abdbcfe040391332fed5ca177cba98", "sha256": "1cd48a53a4574c317d8e96bdff7ae75cf18c92efd2a8fe46bea24b600cefdd00" }, "downloads": -1, "filename": "djangoql-0.1.2.tar.gz", "has_sig": false, "md5_digest": "99abdbcfe040391332fed5ca177cba98", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9114, "upload_time": "2017-03-23T17:12:42", "url": "https://files.pythonhosted.org/packages/da/b5/6700b5372556fdeb38625d7e0c49c176cf7ab7d8a8caa84bea34a4f41f9d/djangoql-0.1.2.tar.gz" } ], "0.10.0": [ { "comment_text": "", "digests": { "md5": "2e386e8ec39cf4fd773793be346559dd", "sha256": "cc7cdd17b99ced9633a482acfd629da0a60b0a7cd310a3e8108d44d0363dc6e6" }, "downloads": -1, "filename": "djangoql-0.10.0.tar.gz", "has_sig": false, "md5_digest": "2e386e8ec39cf4fd773793be346559dd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 185652, "upload_time": "2018-04-27T20:26:30", "url": "https://files.pythonhosted.org/packages/4c/39/2de8f6647c2ffc2c37b3a2d3a049a96ea96be808f228f80c6f37853d6b4c/djangoql-0.10.0.tar.gz" } ], "0.10.1": [ { "comment_text": "", "digests": { "md5": "b51801713804d0e05410d4ae78a51ba5", "sha256": "22db43c83341767a093a655c81c460ae2ab2f462fc5111c7e4b759977770fe73" }, "downloads": -1, "filename": "djangoql-0.10.1.tar.gz", "has_sig": false, "md5_digest": "b51801713804d0e05410d4ae78a51ba5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 217738, "upload_time": "2018-10-23T17:11:02", "url": "https://files.pythonhosted.org/packages/1c/77/7b8a999629897071eb3dc418130e5a00b4330b299ab71f0b070730c949d3/djangoql-0.10.1.tar.gz" } ], "0.10.2": [ { "comment_text": "", "digests": { "md5": "7cb1813eff2e942df8a109d383898e31", "sha256": "93893a5f162201b598894f15aa9642576740f8364f74d26310dc3cec962d7bf1" }, "downloads": -1, "filename": "djangoql-0.10.2.tar.gz", "has_sig": false, "md5_digest": "7cb1813eff2e942df8a109d383898e31", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 217097, "upload_time": "2018-10-24T13:29:05", "url": "https://files.pythonhosted.org/packages/05/89/41da074474503b2ea7a2b001a39decaaccf32d80dc85a7baf0f0a946b8ef/djangoql-0.10.2.tar.gz" } ], "0.10.3": [ { "comment_text": "", "digests": { "md5": "03d41c4dbca39d8a6b318071ddf14155", "sha256": "a77af13f7330bd697b5312477fc4c0cef2457bb88ee8e64fc354d5878adce19c" }, "downloads": -1, "filename": "djangoql-0.10.3.tar.gz", "has_sig": false, "md5_digest": "03d41c4dbca39d8a6b318071ddf14155", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 217229, "upload_time": "2018-10-27T09:48:29", "url": "https://files.pythonhosted.org/packages/6a/60/362ab88ac3ff022c65823ae1b1c089c76baf1766aa2c286903e79666ba51/djangoql-0.10.3.tar.gz" } ], "0.11.0": [ { "comment_text": "", "digests": { "md5": "faa6f43f6a12cc4f6a9d6781e1d01cb2", "sha256": "4ab6b445df00f5fedfcead32ccdaf92220824be1c0b45a29e53ada489e278abe" }, "downloads": -1, "filename": "djangoql-0.11.0.tar.gz", "has_sig": false, "md5_digest": "faa6f43f6a12cc4f6a9d6781e1d01cb2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 217275, "upload_time": "2018-11-06T21:25:16", "url": "https://files.pythonhosted.org/packages/c1/cc/588ae192c29ed49cea5e434f07a15c300f366c934d9a3c87fdf584195f05/djangoql-0.11.0.tar.gz" } ], "0.12.0": [ { "comment_text": "", "digests": { "md5": "8b9c6dcfe867991fc0100aac5ce01199", "sha256": "ef8cb728ef04b9514e0f83d856db2b60f19f6f23d2d56a4440dbd6389476381a" }, "downloads": -1, "filename": "djangoql-0.12.0.tar.gz", "has_sig": false, "md5_digest": "8b9c6dcfe867991fc0100aac5ce01199", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 219545, "upload_time": "2018-11-11T20:02:40", "url": "https://files.pythonhosted.org/packages/91/4a/8a987a4bef91babc7b1b31a1780cb93f198af281d1870f0e450b9eaaa350/djangoql-0.12.0.tar.gz" } ], "0.12.1": [ { "comment_text": "", "digests": { "md5": "4219fe5a1d1bb96a2e63aa85bf4c4a81", "sha256": "6ed36e785252167a33e2c613f67e05a364da21e44e3a94e755458657bf2b12a6" }, "downloads": -1, "filename": "djangoql-0.12.1.tar.gz", "has_sig": false, "md5_digest": "4219fe5a1d1bb96a2e63aa85bf4c4a81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 219584, "upload_time": "2018-11-13T19:55:33", "url": "https://files.pythonhosted.org/packages/3d/48/ff74087b8cfb29b70312b67f98dd54105a9dd551645b221408272b87290e/djangoql-0.12.1.tar.gz" } ], "0.12.2": [ { "comment_text": "", "digests": { "md5": "90a111edd9cd233061e8b8453fed196b", "sha256": "c8ed2e86af261a2e4fbf6735c41b58c578fd5bef3de526224e32cceaa0355672" }, "downloads": -1, "filename": "djangoql-0.12.2.tar.gz", "has_sig": false, "md5_digest": "90a111edd9cd233061e8b8453fed196b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 219627, "upload_time": "2018-11-16T11:51:16", "url": "https://files.pythonhosted.org/packages/c1/63/c0d618162b6f2e5999532b79fc6e954a1d9ea9b6d98b7b98f5b403555e0b/djangoql-0.12.2.tar.gz" } ], "0.12.3": [ { "comment_text": "", "digests": { "md5": "ee64cc5373acb30eff8c12b06914300c", "sha256": "7c488ec4e3362e5389ba3c1169d1ff9a27c4222601f32c6dbf6130ce04330d76" }, "downloads": -1, "filename": "djangoql-0.12.3.tar.gz", "has_sig": false, "md5_digest": "ee64cc5373acb30eff8c12b06914300c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 220061, "upload_time": "2018-11-20T21:21:19", "url": "https://files.pythonhosted.org/packages/d3/b2/2c24d84e8e45fec6291ee8966577c4cacdae38901ca845e0814897a63164/djangoql-0.12.3.tar.gz" } ], "0.12.4": [ { "comment_text": "", "digests": { "md5": "5af36dc11fbba30c71d80d549c4e8b23", "sha256": "605d88a2c89490a7aedbd89c12241cd19e6af6ef1ef83955f3a3ef918aa273b9" }, "downloads": -1, "filename": "djangoql-0.12.4.tar.gz", "has_sig": false, "md5_digest": "5af36dc11fbba30c71d80d549c4e8b23", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 221280, "upload_time": "2019-03-09T11:40:04", "url": "https://files.pythonhosted.org/packages/03/ce/db87eea428468fc94f3ecd17df5af49d2ab5ff25a5d7760b1470777dfe9f/djangoql-0.12.4.tar.gz" } ], "0.12.5": [ { "comment_text": "", "digests": { "md5": "5a733e5640172f320586dfddc0094009", "sha256": "88cec740cb513828e0102c5caeed5e2496893803f83091fce4971b8e18d8c061" }, "downloads": -1, "filename": "djangoql-0.12.5.tar.gz", "has_sig": false, "md5_digest": "5a733e5640172f320586dfddc0094009", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 222270, "upload_time": "2019-04-06T12:36:16", "url": "https://files.pythonhosted.org/packages/fa/44/c86d3e81145686814d8740fb0fbcf9e4328aa42fcbdecbb3ced53939c542/djangoql-0.12.5.tar.gz" } ], "0.12.6": [ { "comment_text": "", "digests": { "md5": "80eb9b42d18e04bc31041dc573df991d", "sha256": "fa95591b848929f610aafd4a9545ed483f6f64759e6d66c9b13549fb250d9bd7" }, "downloads": -1, "filename": "djangoql-0.12.6.tar.gz", "has_sig": false, "md5_digest": "80eb9b42d18e04bc31041dc573df991d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 222288, "upload_time": "2019-04-14T00:00:42", "url": "https://files.pythonhosted.org/packages/71/24/ec3c7bfda0ea8effbc69624ec5d02d2e5a27760c191f9a955dca01410f5c/djangoql-0.12.6.tar.gz" } ], "0.13.0": [ { "comment_text": "", "digests": { "md5": "6872ce8e757f61d2c29d43a576b71eba", "sha256": "522eed3085af045242723322f67af488f44c9731d4929d579ec4198ee0076f42" }, "downloads": -1, "filename": "djangoql-0.13.0.tar.gz", "has_sig": false, "md5_digest": "6872ce8e757f61d2c29d43a576b71eba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 223337, "upload_time": "2019-07-15T11:13:03", "url": "https://files.pythonhosted.org/packages/e6/b1/5af3cd44ea4d4fe0c7cf117a10ca3342ef56af0e27c968ce99bfb33b5b3b/djangoql-0.13.0.tar.gz" } ], "0.13.1": [ { "comment_text": "", "digests": { "md5": "40b693bdd77d307d9eb1b63e8d086c5a", "sha256": "366293d7d4e416f9f7d6e2b98775c2129222fbb4dc660f3e6c7b9e35a3cf3fce" }, "downloads": -1, "filename": "djangoql-0.13.1.tar.gz", "has_sig": false, "md5_digest": "40b693bdd77d307d9eb1b63e8d086c5a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 223631, "upload_time": "2019-10-08T10:23:32", "url": "https://files.pythonhosted.org/packages/ac/08/07f35ba68479681784a1f5a939f50951e1001e625f16a125e044fdf0996e/djangoql-0.13.1.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "95119b50449f2fc7f79e9fee986698d4", "sha256": "2351362c5f20f247fdec04203dd3b349bc9fdacaa17233079616a333bdfebcad" }, "downloads": -1, "filename": "djangoql-0.2.1.tar.gz", "has_sig": false, "md5_digest": "95119b50449f2fc7f79e9fee986698d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16839, "upload_time": "2017-03-31T20:33:06", "url": "https://files.pythonhosted.org/packages/f9/2f/b4cb3d5c920995e325d5f65ddb613a4b7bb9239e5ec686b836ae0565bdfb/djangoql-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "bc9f2def85462c948e8cce9242c102d7", "sha256": "34b73db83d31659e4c0724f3ab3bf1a8e5e19a01b6d7354d28a233ec5d139015" }, "downloads": -1, "filename": "djangoql-0.2.2.tar.gz", "has_sig": false, "md5_digest": "bc9f2def85462c948e8cce9242c102d7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16874, "upload_time": "2017-03-31T20:50:18", "url": "https://files.pythonhosted.org/packages/2f/0d/4085c733cdd2a14c2f60d4addfdb1436adf590ce59e1b8b1765b53e45e01/djangoql-0.2.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "fd02826ffc5274202f30697f5aab629b", "sha256": "55573b35014c39a9f5c1c1ff0d177b58349dbe9bbb5712d5427d19f9bb7b852a" }, "downloads": -1, "filename": "djangoql-0.3.0.tar.gz", "has_sig": false, "md5_digest": "fd02826ffc5274202f30697f5aab629b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17230, "upload_time": "2017-04-01T08:36:56", "url": "https://files.pythonhosted.org/packages/22/13/1f88b7ff47282f3a4243d4d0170cbeb8d35ed0b410bfdce90f3f16791647/djangoql-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "c7f1ffccc381aa9992befc5612c174c1", "sha256": "cb4384bcf637b1e0dc2c74f723ed1e412500e125ceafbcd31f76487e36ff5c0b" }, "downloads": -1, "filename": "djangoql-0.3.1.tar.gz", "has_sig": false, "md5_digest": "c7f1ffccc381aa9992befc5612c174c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17373, "upload_time": "2017-04-01T11:47:55", "url": "https://files.pythonhosted.org/packages/c3/e1/fc8cdead5c341f940a09760b6f182746e09c1e699464d3c9abd5ab790be9/djangoql-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "aa9493d72702a99682bc35d0e28a2042", "sha256": "4377dcc4e0b3b7096ae98eb5f3bf8b18a3021721f533347ce0aa1a4696ea4438" }, "downloads": -1, "filename": "djangoql-0.3.2.tar.gz", "has_sig": false, "md5_digest": "aa9493d72702a99682bc35d0e28a2042", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17370, "upload_time": "2017-04-01T13:24:42", "url": "https://files.pythonhosted.org/packages/b4/dc/6b7ef25e363033414ffcb771ee01450a8aa58c686f0da89468b58043c4c5/djangoql-0.3.2.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "b95c3a066336d3bfd086118e8d3ed236", "sha256": "d8a311913682d784f065593688a86b93f5a5df1c4e0a27d386fd96b02bc6895c" }, "downloads": -1, "filename": "djangoql-0.4.1.tar.gz", "has_sig": false, "md5_digest": "b95c3a066336d3bfd086118e8d3ed236", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 102980, "upload_time": "2017-04-02T17:40:00", "url": "https://files.pythonhosted.org/packages/82/c1/87914b28a13c362b4928425e57f73188179a690e9076de5a3a40033a5295/djangoql-0.4.1.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "a1679db757a74a9800b9727ea9b724ad", "sha256": "515a080eb0fd5eca18afd2cce9d9e2bcc38bde620f15d5619012ee0bf42056e5" }, "downloads": -1, "filename": "djangoql-0.5.0.tar.gz", "has_sig": false, "md5_digest": "a1679db757a74a9800b9727ea9b724ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 103692, "upload_time": "2017-04-03T16:50:27", "url": "https://files.pythonhosted.org/packages/ef/f7/2641c607aff00987707e9b8b965a2568a28b4b3fe4fb8eb52bbbf686882d/djangoql-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "0b44090a14e7c844d514f909728a5aba", "sha256": "a51549b9216ccbbab4830dcc1f0159877f8bc7861d059c61177c83e0c9fa3d73" }, "downloads": -1, "filename": "djangoql-0.5.1.tar.gz", "has_sig": false, "md5_digest": "0b44090a14e7c844d514f909728a5aba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 103745, "upload_time": "2017-04-03T17:42:44", "url": "https://files.pythonhosted.org/packages/20/cd/5ae94294c2e2b35a5e54018c1e379e9958463161419242ad713331650794/djangoql-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "861b5773264adfc994e8db4b5cbafc6e", "sha256": "144467e13f7a1dfdf26bd71d6a9fff8a46af38b371ad3c29580cf65054da8c81" }, "downloads": -1, "filename": "djangoql-0.5.2.tar.gz", "has_sig": false, "md5_digest": "861b5773264adfc994e8db4b5cbafc6e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 103897, "upload_time": "2017-04-03T19:57:37", "url": "https://files.pythonhosted.org/packages/f6/88/851abea9d934203f38cab1c12824fdebf4af0ba06a56f4500f0a7c221ac5/djangoql-0.5.2.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "ad492f260a6af628dde494044deb7d52", "sha256": "9226e192e37c9ef616f26185c7dbf767d58416751686a0323f055c2bb05a1e30" }, "downloads": -1, "filename": "djangoql-0.6.0.tar.gz", "has_sig": false, "md5_digest": "ad492f260a6af628dde494044deb7d52", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 104217, "upload_time": "2017-04-04T09:24:15", "url": "https://files.pythonhosted.org/packages/ec/c5/95f7a4408506fa6f90066a6ed6c5f15a8674aab991dfab7909335b4cff66/djangoql-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "0ccf97d1b6cc09268bf685765eab4bf9", "sha256": "6e07ab554f740700a315a8fbbc3c99afda2faadb810eb13fba7e3c8d704330d6" }, "downloads": -1, "filename": "djangoql-0.6.1.tar.gz", "has_sig": false, "md5_digest": "0ccf97d1b6cc09268bf685765eab4bf9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 104555, "upload_time": "2017-04-04T16:57:54", "url": "https://files.pythonhosted.org/packages/80/f3/dc23b9d084dddef3c0933baa82b239f728aa62aa4f2fef6371339139acfb/djangoql-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "5a88938a72536f69969cd3c075f26eda", "sha256": "4c3444b0af6927b2ad038d8260f081516c675ffa48cdd433c44f0b53012f4187" }, "downloads": -1, "filename": "djangoql-0.6.2.tar.gz", "has_sig": false, "md5_digest": "5a88938a72536f69969cd3c075f26eda", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 104721, "upload_time": "2017-04-05T08:46:38", "url": "https://files.pythonhosted.org/packages/07/5f/8459367af1f13f5522a6c19b00d5dd294837a7a6453e5afac0844c6cb814/djangoql-0.6.2.tar.gz" } ], "0.6.3": [ { "comment_text": "", "digests": { "md5": "288742d27df396cc40258238dd4a8470", "sha256": "2f3be89d0ce2a338de1ca1b04594afa3f795e181b44891d6d2d63bfdd58ab6dd" }, "downloads": -1, "filename": "djangoql-0.6.3.tar.gz", "has_sig": false, "md5_digest": "288742d27df396cc40258238dd4a8470", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 104796, "upload_time": "2017-04-05T09:14:18", "url": "https://files.pythonhosted.org/packages/06/be/86b51541cd360d4c996aa9b4cb27505328d11f5bd2aa457ef0dda82da69c/djangoql-0.6.3.tar.gz" } ], "0.6.4": [ { "comment_text": "", "digests": { "md5": "30fa7c1ce3a7a39975135bcc61514f6c", "sha256": "e10c2ac29187cae5823f0d668d1107caa808878c519438ca83291d87f1350f20" }, "downloads": -1, "filename": "djangoql-0.6.4.tar.gz", "has_sig": false, "md5_digest": "30fa7c1ce3a7a39975135bcc61514f6c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 104302, "upload_time": "2017-04-06T07:16:54", "url": "https://files.pythonhosted.org/packages/9f/48/3a200769f3bb2e52a4cd7e0a5bc7f9e43bd0b569fa8a079bf321a55cc586/djangoql-0.6.4.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "f3f81562678553867f36f0ccb4ff0a25", "sha256": "5b6180505a47dc5612add1d43e5705b6c659377ef037537cdb4249a4ec336615" }, "downloads": -1, "filename": "djangoql-0.7.0.tar.gz", "has_sig": false, "md5_digest": "f3f81562678553867f36f0ccb4ff0a25", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 173219, "upload_time": "2017-04-06T08:51:17", "url": "https://files.pythonhosted.org/packages/ad/92/b6774c0341fed6cf1c75a10b0cd97c3b694025d3f5673201d83d5ffa6e3f/djangoql-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "624ff15d779a4759cb2bfd5ba8f5c65c", "sha256": "a922dd36aa5d778f036a675168413d728b6f60137f600cc63129a20056f80fb2" }, "downloads": -1, "filename": "djangoql-0.7.1.tar.gz", "has_sig": false, "md5_digest": "624ff15d779a4759cb2bfd5ba8f5c65c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 174928, "upload_time": "2017-04-10T12:28:20", "url": "https://files.pythonhosted.org/packages/38/fa/5f1bb9661d50688503e34ff3375d6e4605b08a096fb5565360aa02534115/djangoql-0.7.1.tar.gz" } ], "0.7.2": [ { "comment_text": "", "digests": { "md5": "3f4f715150ec25bf833339e3691267cf", "sha256": "d1509020c4e2ec36a319ffc6e0de42479e240a48c079ddec68f37afecc11ad3f" }, "downloads": -1, "filename": "djangoql-0.7.2.tar.gz", "has_sig": false, "md5_digest": "3f4f715150ec25bf833339e3691267cf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 174987, "upload_time": "2017-04-13T12:52:27", "url": "https://files.pythonhosted.org/packages/b5/b2/5dc79288caec9cc2b1fbb0ba1f320a09b4bd10af73fd55efdcfd7423fe20/djangoql-0.7.2.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "42fdf59cbae9ed35beae3c9c6dd04a53", "sha256": "df058ae7d16024480d2fc6e2423b0a6684557bc94277ecdabc6dce5fbc304dca" }, "downloads": -1, "filename": "djangoql-0.8.0.tar.gz", "has_sig": false, "md5_digest": "42fdf59cbae9ed35beae3c9c6dd04a53", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 178423, "upload_time": "2017-04-15T12:01:28", "url": "https://files.pythonhosted.org/packages/0b/73/e59889199880d90b2dca9ca7d5ab9b923fc1bacd90cb0d6154234fa71d21/djangoql-0.8.0.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "50d944e5d6feb880e1197f4bc02221a3", "sha256": "9c3c3ab8f70cad899a57921b4f60c5bfdb14902882cc3cd27ed67cc67a03a0ef" }, "downloads": -1, "filename": "djangoql-0.8.1.tar.gz", "has_sig": false, "md5_digest": "50d944e5d6feb880e1197f4bc02221a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 178687, "upload_time": "2017-04-28T14:11:48", "url": "https://files.pythonhosted.org/packages/77/96/6dd4bc9d011c3a6bbc0e57c8ee0d4a1c21e9b181f7ddad55de42aa92f7ee/djangoql-0.8.1.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "65b3488ceae89d13d7a6caa75266eca9", "sha256": "842d5c69b8cb09be1a9c9ef24d59a781ed0d13214a4ad84ec9df929b2a49d24a" }, "downloads": -1, "filename": "djangoql-0.8.2.tar.gz", "has_sig": false, "md5_digest": "65b3488ceae89d13d7a6caa75266eca9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 178692, "upload_time": "2017-04-28T18:48:38", "url": "https://files.pythonhosted.org/packages/33/18/70b3c01e2c1450eee49107ca2289fde9f1c89699b9ea7a37e15ca0f6390d/djangoql-0.8.2.tar.gz" } ], "0.8.3": [ { "comment_text": "", "digests": { "md5": "def1a950dcf7a9b2ae697fb62c376c48", "sha256": "9412b4d6bad9b75ee63ece1f094cc57e028ea8be48f88c7ca37853df928073c5" }, "downloads": -1, "filename": "djangoql-0.8.3.tar.gz", "has_sig": false, "md5_digest": "def1a950dcf7a9b2ae697fb62c376c48", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 178695, "upload_time": "2017-05-22T11:58:12", "url": "https://files.pythonhosted.org/packages/a2/d3/1da9b46f2b392a36149289ec0de8068eac358342710fe74e69c4e873703f/djangoql-0.8.3.tar.gz" } ], "0.8.4": [ { "comment_text": "", "digests": { "md5": "9de2d59705f344402a41bcb786a6fb33", "sha256": "ab23af9ca0f7deb2cfb483332d1edd83c565e017bd996dd9cc9b9254501d37a0" }, "downloads": -1, "filename": "djangoql-0.8.4.tar.gz", "has_sig": false, "md5_digest": "9de2d59705f344402a41bcb786a6fb33", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 178697, "upload_time": "2017-06-02T08:51:32", "url": "https://files.pythonhosted.org/packages/bd/7f/c9a7dc09e5f5de987a0679345785e1f2b6985b5f1988dae300f3da325790/djangoql-0.8.4.tar.gz" } ], "0.8.5": [ { "comment_text": "", "digests": { "md5": "99066aa17a935034115aec009087fdb0", "sha256": "8f802debbd73ec695c44dd729c14ff14321ba7f408d0c6f30e21e8ba5569048c" }, "downloads": -1, "filename": "djangoql-0.8.5.tar.gz", "has_sig": false, "md5_digest": "99066aa17a935034115aec009087fdb0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 178962, "upload_time": "2017-06-03T09:06:15", "url": "https://files.pythonhosted.org/packages/97/1c/d92e8aa62855609b0d6c930ef8f5cd0cf17494b4fafb1b623f41398fc14c/djangoql-0.8.5.tar.gz" } ], "0.8.6": [ { "comment_text": "", "digests": { "md5": "f7753bdb0cd1348e65a6fd7f8e4b33c3", "sha256": "3a6012d7e1a1d2029baa46a559b018346343fab923902bc6f1c3558217fb19de" }, "downloads": -1, "filename": "djangoql-0.8.6.tar.gz", "has_sig": false, "md5_digest": "f7753bdb0cd1348e65a6fd7f8e4b33c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 178979, "upload_time": "2017-08-04T10:02:39", "url": "https://files.pythonhosted.org/packages/fe/b0/abf76881aa0f135b72f0c5999e3c0a858091022c5cfcffc88594ec8eb4d4/djangoql-0.8.6.tar.gz" } ], "0.8.7": [ { "comment_text": "", "digests": { "md5": "69119b7d08c54ced75163af61d8bd0c0", "sha256": "5900684906c45d6e6629800c2f05d2d23db4ba8023e7b5c0c08098e0cba45fdd" }, "downloads": -1, "filename": "djangoql-0.8.7.tar.gz", "has_sig": false, "md5_digest": "69119b7d08c54ced75163af61d8bd0c0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 178976, "upload_time": "2017-08-04T11:02:16", "url": "https://files.pythonhosted.org/packages/5e/a0/64320790a7263f19ef4d9c3e12031b12513893baadc3e3c1b9453676c38c/djangoql-0.8.7.tar.gz" } ], "0.8.8": [ { "comment_text": "", "digests": { "md5": "32eec1953a8f72673303f3c932d50258", "sha256": "fd16c37bc682b12f7c23192588b7dbce6a17a0e5391033adc1bf4cb712db61cc" }, "downloads": -1, "filename": "djangoql-0.8.8.tar.gz", "has_sig": false, "md5_digest": "32eec1953a8f72673303f3c932d50258", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 179525, "upload_time": "2017-08-04T11:50:01", "url": "https://files.pythonhosted.org/packages/f5/a6/a84e15daaed720d93041a783dcc7dfe88337243652887189a10494d287a7/djangoql-0.8.8.tar.gz" } ], "0.8.9": [ { "comment_text": "", "digests": { "md5": "5883de769d6d7e201e90179a31516bb6", "sha256": "c2b0005622258b9b9988e0142f185e308a2f0eb9ceea3cb06a9b6d48b84de67c" }, "downloads": -1, "filename": "djangoql-0.8.9.tar.gz", "has_sig": false, "md5_digest": "5883de769d6d7e201e90179a31516bb6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 179762, "upload_time": "2017-09-28T20:16:42", "url": "https://files.pythonhosted.org/packages/94/b2/96d40bc5ab48f822af814a0e2a455d703a16c4f316b5c7cd106089695470/djangoql-0.8.9.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "fb4a3638ed3b71a5cad358d14b5ce6ee", "sha256": "d1c7ae68668dad2b077d7013544aa92ac1c6b07f4510befc71f8d8235d88c212" }, "downloads": -1, "filename": "djangoql-0.9.0.tar.gz", "has_sig": false, "md5_digest": "fb4a3638ed3b71a5cad358d14b5ce6ee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 184183, "upload_time": "2018-04-25T18:05:04", "url": "https://files.pythonhosted.org/packages/59/29/f25d131fed69132fd99517622d35c6bd354ccbf9a04672401e3aed1d2403/djangoql-0.9.0.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "1ac27b96acd1908ffd451edea847d3d9", "sha256": "07e082ee696d864bb8a095c7f06532c86bb627f2be7daeb38158a757b218b258" }, "downloads": -1, "filename": "djangoql-0.9.1.tar.gz", "has_sig": false, "md5_digest": "1ac27b96acd1908ffd451edea847d3d9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 184185, "upload_time": "2018-04-25T19:50:04", "url": "https://files.pythonhosted.org/packages/c2/c4/bb5aeed36c8511a9c48f144e1a6924af33c4aa5fc1b71ddae65671f2836c/djangoql-0.9.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "40b693bdd77d307d9eb1b63e8d086c5a", "sha256": "366293d7d4e416f9f7d6e2b98775c2129222fbb4dc660f3e6c7b9e35a3cf3fce" }, "downloads": -1, "filename": "djangoql-0.13.1.tar.gz", "has_sig": false, "md5_digest": "40b693bdd77d307d9eb1b63e8d086c5a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 223631, "upload_time": "2019-10-08T10:23:32", "url": "https://files.pythonhosted.org/packages/ac/08/07f35ba68479681784a1f5a939f50951e1001e625f16a125e044fdf0996e/djangoql-0.13.1.tar.gz" } ] }