{ "info": { "author": "Artem Fedotov", "author_email": "", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries" ], "description": "Graphene-SQLAlchemy-Filter\n==========================\n\n|circle-ci| |coveralls| |pypi|\n\nFilters for `Graphene SQLAlchemy integration `__\n\n|preview|\n\nQuick start\n===========\n\nCreate a filter and add it to the graphene field.\n\n.. code:: python\n\n from graphene_sqlalchemy_filter import FilterableConnectionField, FilterSet\n\n\n class UserFilter(FilterSet):\n is_admin = graphene.Boolean()\n\n class Meta:\n model = User\n fields = {\n 'username': ['eq', 'ne', 'in', 'ilike'],\n 'is_active': [...], # shortcut!\n }\n\n @staticmethod\n def is_admin_filter(info, query, value):\n if value:\n return User.username == 'admin'\n else:\n return User.username != 'admin'\n\n\n class Query(ObjectType):\n all_users = FilterableConnectionField(UserConnection, filters=UserFilter())\n\nNow, we're going to create query.\n\n.. code::\n\n {\n allUsers (\n filters: {\n isActive: true,\n or: [\n {isAdmin: true},\n {usernameIn: [\"moderator\", \"cool guy\"]}\n ]\n }\n ){\n edges {\n node {\n id\n username\n }\n }\n }\n }\n\n\ud83d\udd25 **Let's rock!** \ud83d\udd25\n\n--------------\n\nFilters\n=======\n\nFilterSet class must inherit ``graphene_sqlalchemy_filter.FilterSet`` or your subclass of this class.\n\nThere are three types of filters:\n\n#. `automatically generated\n filters <#automatically-generated-filters>`__\n#. `simple filters <#simple-filters>`__\n#. `filters that require join <#filters-that-require-join>`__\n\nAutomatically generated filters\n-------------------------------\n\n.. code:: python\n\n class UserFilter(FilterSet):\n class Meta:\n model = User\n fields = {\n 'username': ['eq', 'ne', 'in', 'ilike'],\n 'is_active': [...], # shortcut!\n }\n\nMetaclass must contain the sqlalchemy model and fields.\n\nAutomatically generated filters must be specified by ``fields`` variable. Key - field name of sqlalchemy model, value - list of expressions (or shortcut).\n\nShortcut (default: ``[...]``) will add all the allowed filters for this type of sqlalchemy field.\n\n+--------------------+------------------------------------+-------------------+\n| Key | Description | GraphQL postfix |\n+====================+====================================+===================+\n| ``eq`` | equal | |\n+--------------------+------------------------------------+-------------------+\n| ``ne`` | not equal | Ne |\n+--------------------+------------------------------------+-------------------+\n| ``like`` | like | Like |\n+--------------------+------------------------------------+-------------------+\n| ``ilike`` | insensitive like | Ilike |\n+--------------------+------------------------------------+-------------------+\n| ``is_null`` | is null | IsNull |\n+--------------------+------------------------------------+-------------------+\n| ``in`` | in | In |\n+--------------------+------------------------------------+-------------------+\n| ``not_in`` | not in | NotIn |\n+--------------------+------------------------------------+-------------------+\n| ``lt`` | less than | Lt |\n+--------------------+------------------------------------+-------------------+\n| ``lte`` | less than or equal | Lte |\n+--------------------+------------------------------------+-------------------+\n| ``gt`` | greater than | Gt |\n+--------------------+------------------------------------+-------------------+\n| ``gte`` | greater than or equal | Gte |\n+--------------------+------------------------------------+-------------------+\n| ``range`` | in range | Range |\n+--------------------+------------------------------------+-------------------+\n| ``contains`` | contains (PostgreSQL array) | Contains |\n+--------------------+------------------------------------+-------------------+\n| ``contained_by`` | contained\\_by (PostgreSQL array) | ContainedBy |\n+--------------------+------------------------------------+-------------------+\n| ``overlap`` | overlap (PostgreSQL array) | Overlap |\n+--------------------+------------------------------------+-------------------+\n\nSimple filters\n--------------\n\n.. code:: python\n\n class UserFilter(FilterSet):\n is_admin = graphene.Boolean()\n\n @staticmethod\n def is_admin_filter(info, query, value):\n if value:\n return User.username == 'admin'\n else:\n return User.username != 'admin'\n\nEach simple filter has a class variable that passes to GraphQL schema as an input type and function ``_filter`` that makes filtration.\n\nThe filtration function takes the following arguments: \\* ``info`` - ResolveInfo graphene object \\* ``query`` - sqlalchemy query (not used in that filters type) \\* ``value`` - the value of a filter\n\nThe return value can be any type of sqlalchemy clause. This means that you can return ``not_(and_(or_(...), ...))``.\n\nMetaclass is not required if you do not need automatically generated filters.\n\nFilters that require join\n-------------------------\n\nThis type of filter is the same as `simple filters <#simple-filters>`__ but has a different return type.\n\nThe filtration function should return a new sqlalchemy query and clause (like simple filters).\n\n.. code:: python\n\n class UserFilter(FilterSet):\n is_moderator = graphene.Boolean()\n\n @classmethod\n def is_admin_filter(cls, info, query, value):\n membership = cls.aliased(query, Membership, name='is_moderator')\n\n query = query.join(\n membership,\n and_(\n User.id == membership.user_id,\n membership.is_moderator.is_(True),\n ),\n )\n\n if value:\n filter_ = membership.id.isnot(None)\n else:\n filter_ = membership.id.is_(None)\n\n return query, filter_\n\nModel aliases\n~~~~~~~~~~~~~\n\nThe function ``cls.aliased(query, model, name='...')`` returns `sqlalchemy alias `__ from the query. It has one differing parameter - ``query`` (SQLAlchemy Query object). Other arguments are the same as `sqlalchemy.orm.aliased `__.\n\nIdentical joins will be skipped by sqlalchemy.\n\n Changed in version 1.7: The first parameter is now a query.\n\nFeatures\n========\n\nRename GraphQL filter field\n---------------------------\n\n.. code:: python\n\n class CustomField(FilterableConnectionField):\n filter_arg = 'where'\n\n\n class Query(ObjectType):\n all_users = CustomField(UserConnection, where=UserFilter())\n all_groups = FilterableConnectionField(GroupConnection, filters=GroupFilter())\n\n.. code::\n\n {\n allUsers (where: {isActive: true}){\n edges { node { id } }\n }\n allGroups (filters: {nameIn: [\"python\", \"development\"]}){\n edges { node { id } }\n }\n }\n\nRename expression\n-----------------\n\n.. code:: python\n\n class BaseFilter(FilterSet):\n GRAPHQL_EXPRESSION_NAMES = dict(\n FilterSet.GRAPHQL_EXPRESSION_NAMES,\n **{'eq': 'equal', 'not': 'i_never_asked_for_this'}\n )\n\n class Meta:\n abstract = True\n\n\n class UserFilter(BaseFilter):\n class Meta:\n model = User\n fields = {'first_name': ['eq'], 'last_name': ['eq']}\n\n.. code::\n\n {\n allUsers (filters: {iNeverAskedForThis: {firstNameEqual: \"Adam\", lastNameEqual: \"Jensen\"}}){\n edges { node { id } }\n }\n }\n\nCustom shortcut value\n---------------------\n\n.. code:: python\n\n class BaseFilter(FilterSet):\n ALL = '__all__'\n\n class Meta:\n abstract = True\n\n\n class UserFilter(BaseFilter):\n class Meta:\n model = User\n fields = {'username': '__all__'}\n\nLocalization of documentation\n-----------------------------\n\n.. code:: python\n\n class BaseFilter(FilterSet):\n DESCRIPTIONS = {\n 'eq': '\u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442.',\n 'ne': '\u041d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442.',\n 'like': '\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e \u0448\u043b\u0430\u0431\u043e\u043d\u0443.',\n 'ilike': '\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e \u0448\u043b\u0430\u0431\u043e\u043d\u0443.',\n 'regexp': '\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u043c\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e.',\n 'is_null': '\u0420\u0430\u0432\u043d\u043e \u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 `null`. \u041f\u0440\u0438\u043d\u0435\u043c\u0430\u0435\u0442 `true` \u0438\u043b\u0438 `false`.',\n 'in': '\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432 \u0441\u043f\u0438\u0441\u043e\u043a.',\n 'not_in': '\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432 \u0441\u043f\u0438\u0441\u043e\u043a.',\n 'lt': '\u041c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.',\n 'lte': '\u041c\u0435\u043d\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e.',\n 'gt': '\u0411\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.',\n 'gte': '\u0411\u043e\u043b\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e.',\n 'range': '\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.',\n 'and': '\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ``AND``.',\n 'or': '\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ``OR``.',\n 'not': '\u041e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432.',\n }\n\n class Meta:\n abstract = True\n\nCustom expression\n-----------------\n\n.. code:: python\n\n def today_filter(field, value: bool):\n today = func.date(field) == date.today()\n return today if value else not_(today)\n\n\n class BaseFilter(FilterSet):\n # Add expression.\n TODAY = 'today'\n\n EXTRA_EXPRESSIONS = {\n 'today': {\n # Add the name of the expression in GraphQL.\n 'graphql_name': 'today',\n # Update allowed filters (used by shortcut).\n 'for_types': [types.Date, types.DateTime],\n # Add a filtering function (takes the sqlalchemy field and value).\n 'filter': today_filter,\n # Add the GraphQL input type. Column type by default.\n 'input_type': (\n lambda type_, nullable, doc: graphene.Boolean(nullable=False)\n ),\n # Description for the GraphQL schema.\n 'description': 'It is today.',\n }\n }\n\n class Meta:\n abstract = True\n\n\n class PostFilter(BaseFilter):\n class Meta:\n model = Post\n fields = {'created': ['today'], 'updated': [...]}\n\n.. code::\n\n {\n allPosts (filters: {createdToday: false, updatedToday: true}){\n edges { node { id } }\n }\n }\n\nCustom column types\n-------------------\n\n``ALLOWED_FILTERS`` and ``EXTRA_ALLOWED_FILTERS`` only affect shortcut.\n\nIf you do not use the shortcut, you can skip the next steps described in the section.\n\n.. code:: python\n\n class MyString(types.String):\n pass\n\n\n class BaseFilter(FilterSet):\n # You can override all allowed filters\n # ALLOWED_FILTERS = {types.Integer: ['eq']}\n\n # Or add new column type\n EXTRA_ALLOWED_FILTERS = {MyString: ['eq']}\n\n class Meta:\n abstract = True\n\n\n.. |preview| image:: https://github.com/art1415926535/graphene-sqlalchemy-filter/blob/master/preview.gif?raw=true\n.. |circle-ci| image:: https://circleci.com/gh/art1415926535/graphene-sqlalchemy-filter.svg?style=svg\n :target: https://circleci.com/gh/art1415926535/graphene-sqlalchemy-filter\n.. |coveralls| image:: https://coveralls.io/repos/github/art1415926535/graphene-sqlalchemy-filter/badge.svg?branch=master\n :target: https://coveralls.io/github/art1415926535/graphene-sqlalchemy-filter?branch=master\n.. |pypi| image:: https://badge.fury.io/py/graphene-sqlalchemy-filter.svg\n :target: https://badge.fury.io/py/graphene-sqlalchemy-filter\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/art1415926535/graphene-sqlalchemy-filter", "keywords": "api graphql protocol rest relay graphene", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "graphene-sqlalchemy-filter", "package_url": "https://pypi.org/project/graphene-sqlalchemy-filter/", "platform": "", "project_url": "https://pypi.org/project/graphene-sqlalchemy-filter/", "project_urls": { "Homepage": "https://github.com/art1415926535/graphene-sqlalchemy-filter" }, "release_url": "https://pypi.org/project/graphene-sqlalchemy-filter/1.8.0/", "requires_dist": [ "graphene-sqlalchemy (<3,>=2.2.1)", "SQLAlchemy (<2)" ], "requires_python": ">=3.6", "summary": "Filters for Graphene SQLAlchemy integration", "version": "1.8.0" }, "last_serial": 5889889, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "66cbb9724caaa91c8b04ec1065324aba", "sha256": "a8603a536b71acfc4d3cfe4a7344b930056c15c2b43b350bd1cc79008d7ab072" }, "downloads": -1, "filename": "graphene_sqlalchemy_filter-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "66cbb9724caaa91c8b04ec1065324aba", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 7967, "upload_time": "2019-08-07T18:34:50", "url": "https://files.pythonhosted.org/packages/b5/8e/6d4a34a58567aff4da4b6203b51542abb8221c4977218f56cb501b41b6aa/graphene_sqlalchemy_filter-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9cb50d2c312412d6db65f921a485b638", "sha256": "3506cc0860b7003f6ed0eb345f1cf3d578310422831035a71c63ecf9a4713cb2" }, "downloads": -1, "filename": "graphene-sqlalchemy-filter-1.0.0.tar.gz", "has_sig": false, "md5_digest": "9cb50d2c312412d6db65f921a485b638", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 6836, "upload_time": "2019-08-07T18:34:54", "url": "https://files.pythonhosted.org/packages/9c/19/5896aebef586f09107c9b57bc68a45bb583fc44966aad2b191340a8fcccf/graphene-sqlalchemy-filter-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "0fbe3edd3701efc9a319b6d287f6bc1a", "sha256": "eae611e6470a0cc102d526c52e79df60b4aab3add2026c3d45dd8905d77cc32a" }, "downloads": -1, "filename": "graphene_sqlalchemy_filter-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "0fbe3edd3701efc9a319b6d287f6bc1a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 7948, "upload_time": "2019-08-09T12:22:37", "url": "https://files.pythonhosted.org/packages/a7/10/e1fdf95df0539dfa55006c77e4aa61b024717f070c2359897e3b38a51e61/graphene_sqlalchemy_filter-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ae4b4254f3d8a88c02820651b9f1011", "sha256": "216294325a624d7ebe8f561a31963b56d4cb83adede53c6555587171dec0bd84" }, "downloads": -1, "filename": "graphene-sqlalchemy-filter-1.0.1.tar.gz", "has_sig": false, "md5_digest": "8ae4b4254f3d8a88c02820651b9f1011", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 6624, "upload_time": "2019-08-09T12:22:38", "url": "https://files.pythonhosted.org/packages/fd/9d/334c10950b12a7a1c249ed00681a87a1927710e7021cb37eab5885e73556/graphene-sqlalchemy-filter-1.0.1.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "5dd936636835e2ce1cc0646b966f8b08", "sha256": "cacf6b7de9b2dc9f909af2941a2534721142d551b0891f0cf84c45068d48fac9" }, "downloads": -1, "filename": "graphene_sqlalchemy_filter-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5dd936636835e2ce1cc0646b966f8b08", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 10336, "upload_time": "2019-08-09T17:26:38", "url": "https://files.pythonhosted.org/packages/e2/b4/7ba2ae02f6085ba8a0f63ed07d0f5caa1c201cfc98b63cfc7c3b7aed8033/graphene_sqlalchemy_filter-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "03d1b44ab61190d6e56f62e66df620a1", "sha256": "06c9dad16fd8749c0a814174408ed173a73f4af22605bc3be0c6b59a3545af99" }, "downloads": -1, "filename": "graphene-sqlalchemy-filter-1.1.0.tar.gz", "has_sig": false, "md5_digest": "03d1b44ab61190d6e56f62e66df620a1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 11244, "upload_time": "2019-08-09T17:26:39", "url": "https://files.pythonhosted.org/packages/0c/66/34694d5deec2037d2bfeed0a160922ea252dc5731db37869c07640d6c4f1/graphene-sqlalchemy-filter-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "3a21842ebecade2de9a9acab1f785864", "sha256": "48dcfe5f1a8efce64d7a91a5a22d92dc27ced17824bd5af286befd45234e7687" }, "downloads": -1, "filename": "graphene_sqlalchemy_filter-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3a21842ebecade2de9a9acab1f785864", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 10402, "upload_time": "2019-08-09T19:05:45", "url": "https://files.pythonhosted.org/packages/61/28/afa95618c7c0fe1ebc73585dfc8cdfeafd1ea4a1bb841e97465ef2109601/graphene_sqlalchemy_filter-1.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eab3188fbb95014703038bd3e6b922ec", "sha256": "5447fc70f4a27e4bef9ce4eddfc1f547e844427b150b3a5ff9d0f5024f0ac7dc" }, "downloads": -1, "filename": "graphene-sqlalchemy-filter-1.2.0.tar.gz", "has_sig": false, "md5_digest": "eab3188fbb95014703038bd3e6b922ec", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 11567, "upload_time": "2019-08-09T19:05:46", "url": "https://files.pythonhosted.org/packages/6a/ad/9eb6536146c6f74864ae8d3b3b13e81f97e6062bc265cb11a9ba0f45f5fe/graphene-sqlalchemy-filter-1.2.0.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "6ff4d57ca3ea6129cf4a6dd3b4810a8d", "sha256": "e74c0bfd2309cb8ae334d63d737d92a82cefef08d4e670ae9e30cb2ae58f5112" }, "downloads": -1, "filename": "graphene_sqlalchemy_filter-1.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6ff4d57ca3ea6129cf4a6dd3b4810a8d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 10703, "upload_time": "2019-08-10T12:25:33", "url": "https://files.pythonhosted.org/packages/a6/48/6d1337615bea912bdefa361766ae9e3bf0049c76d4e409b6da70284a5771/graphene_sqlalchemy_filter-1.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c61e8c0313b40389c67872834be03b15", "sha256": "fec9d4caeec44aadd570dbd9b76257b4437bc5b4d28d6ee3a00e5bfa4866f908" }, "downloads": -1, "filename": "graphene-sqlalchemy-filter-1.3.0.tar.gz", "has_sig": false, "md5_digest": "c61e8c0313b40389c67872834be03b15", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 12588, "upload_time": "2019-08-10T12:25:35", "url": "https://files.pythonhosted.org/packages/d3/a1/68a49adef5fdae45302d77440a42900715f27f267126d6689fde06ca6585/graphene-sqlalchemy-filter-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "8b3b84e0087a0f98a083387f4f54ff45", "sha256": "e6ccb56af5f45189b47a602b8d916883c36252e72416d1d7e2060aa86306b1dc" }, "downloads": -1, "filename": "graphene_sqlalchemy_filter-1.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8b3b84e0087a0f98a083387f4f54ff45", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 10698, "upload_time": "2019-08-10T13:07:53", "url": "https://files.pythonhosted.org/packages/29/60/50242a23366f4e2e3a85d5e7243fa45592b5c38e8114a6b66835f3a22cea/graphene_sqlalchemy_filter-1.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cacfa6c8726e2846620db8f25c0caba2", "sha256": "ab2ba7e5ec0558450f3ef551e20f83e480842c51d9db1f8894c66b9d7d5a55af" }, "downloads": -1, "filename": "graphene-sqlalchemy-filter-1.3.1.tar.gz", "has_sig": false, "md5_digest": "cacfa6c8726e2846620db8f25c0caba2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 12586, "upload_time": "2019-08-10T13:07:55", "url": "https://files.pythonhosted.org/packages/dc/d6/b2a80e089bfd2291b1f89931bbc5056ab35f365c1a9d253e497cd68b61d7/graphene-sqlalchemy-filter-1.3.1.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "517b00f9580e83df95f7cdcfc06171b3", "sha256": "fde4831a8bc13b719f73c58bb90fc39c8f2d3967427f54ffda142321be5080c7" }, "downloads": -1, "filename": "graphene_sqlalchemy_filter-1.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "517b00f9580e83df95f7cdcfc06171b3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 10746, "upload_time": "2019-08-12T19:18:50", "url": "https://files.pythonhosted.org/packages/27/0f/88f17c7b61a0232b339d39c096e059dd6bc11bf5df3b20ea733801a1ce1c/graphene_sqlalchemy_filter-1.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "49501063cfa7ecb312ad2ed14a6ee778", "sha256": "9479c6085177ba3988ed19037ecbb6b8350a075d67d7722d5f9c7d5c86ccd168" }, "downloads": -1, "filename": "graphene-sqlalchemy-filter-1.4.0.tar.gz", "has_sig": false, "md5_digest": "49501063cfa7ecb312ad2ed14a6ee778", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 12597, "upload_time": "2019-08-12T19:18:52", "url": "https://files.pythonhosted.org/packages/37/a4/ad05f482f13e0d7127ae04433117be28e36db280cc95781c6562665af2f9/graphene-sqlalchemy-filter-1.4.0.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "2d733c3924cf851a17a032cafc83a2e5", "sha256": "52b72e1135013b0d0b4016014fc019b35c5fab520a553333f640fd37369ccff6" }, "downloads": -1, "filename": "graphene_sqlalchemy_filter-1.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2d733c3924cf851a17a032cafc83a2e5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 10988, "upload_time": "2019-08-18T10:17:39", "url": "https://files.pythonhosted.org/packages/e5/28/6c61e4951373dee4945f6b4f8f1bd6d80603babaaa9000df2f9c92af70d8/graphene_sqlalchemy_filter-1.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "908bcdfbdae48e453e102f34b66ab0a1", "sha256": "35d86592f4b9825a72a924d9feb74164b1a03852c9846f0c8b512e503bd801f8" }, "downloads": -1, "filename": "graphene-sqlalchemy-filter-1.5.0.tar.gz", "has_sig": false, "md5_digest": "908bcdfbdae48e453e102f34b66ab0a1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 13049, "upload_time": "2019-08-18T10:17:41", "url": "https://files.pythonhosted.org/packages/f8/8a/bf256c6c8e8c5b94d7b3a093bcf6412cab23ef6e6ed8cd793921c5e162b2/graphene-sqlalchemy-filter-1.5.0.tar.gz" } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "c42249eaf56bfd3907d92f598c2be278", "sha256": "f498bddb4f1ae53734185aa0aa52b4aba4026159f6bf7f0466af002d23cfe129" }, "downloads": -1, "filename": "graphene_sqlalchemy_filter-1.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c42249eaf56bfd3907d92f598c2be278", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 10991, "upload_time": "2019-08-18T10:49:08", "url": "https://files.pythonhosted.org/packages/07/f0/a442684441588c60554ac3a345081369ad73fb1fb240d8e47866f2627a81/graphene_sqlalchemy_filter-1.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fa9f80ee590c0fe641d10edcbde38df5", "sha256": "917f93c580a8eb894d86855dc6f70aca2025fe8dee19d7b90bc52c0014b54aad" }, "downloads": -1, "filename": "graphene-sqlalchemy-filter-1.5.1.tar.gz", "has_sig": false, "md5_digest": "fa9f80ee590c0fe641d10edcbde38df5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 13056, "upload_time": "2019-08-18T10:49:09", "url": "https://files.pythonhosted.org/packages/87/b1/5fb7182c01a2e27c4d08bf57609398cf3a8711f518ed9cade0928a17c5f9/graphene-sqlalchemy-filter-1.5.1.tar.gz" } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "4c8623c00e3be8b76982fd2e5daf8463", "sha256": "e3ababd1e2a24094f70a9cca8907fa432c93f6795bcaf5af424d253db0258d81" }, "downloads": -1, "filename": "graphene_sqlalchemy_filter-1.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "4c8623c00e3be8b76982fd2e5daf8463", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 11115, "upload_time": "2019-08-29T21:02:49", "url": "https://files.pythonhosted.org/packages/64/40/5a789f27aa07712ce3fb0491e719762c98a52342bf954d9607b6caf18a9c/graphene_sqlalchemy_filter-1.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5f93d2852faaefaeed21f461b6320102", "sha256": "6a79c3aa24c66c424533b26e8bf1f6a7c0d9bde59407a1617384691db6faf3f6" }, "downloads": -1, "filename": "graphene-sqlalchemy-filter-1.6.0.tar.gz", "has_sig": false, "md5_digest": "5f93d2852faaefaeed21f461b6320102", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 13222, "upload_time": "2019-08-29T21:02:51", "url": "https://files.pythonhosted.org/packages/36/07/87f9d717d0b8fa3b263086640fc0a74db5049455a3da61112bc34b789bef/graphene-sqlalchemy-filter-1.6.0.tar.gz" } ], "1.7.0": [ { "comment_text": "", "digests": { "md5": "603b972bc2ee6e75dadc62d1d258e169", "sha256": "235654845574978961af089a85693408d96232b0ecefcdcb7e5c4faaadd0b5f3" }, "downloads": -1, "filename": "graphene_sqlalchemy_filter-1.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "603b972bc2ee6e75dadc62d1d258e169", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 11609, "upload_time": "2019-09-07T13:30:33", "url": "https://files.pythonhosted.org/packages/0c/6e/405b5caf8790742497951cda7b48dc7cbb93fab5dd5e1ceb2ad2d64d2551/graphene_sqlalchemy_filter-1.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8410e4dd8485241fddbd736527374659", "sha256": "e6a65291c1f92d2786f315c31bdfbafc8266d5e00e83b1d28b22f0200b3be43a" }, "downloads": -1, "filename": "graphene-sqlalchemy-filter-1.7.0.tar.gz", "has_sig": false, "md5_digest": "8410e4dd8485241fddbd736527374659", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 13758, "upload_time": "2019-09-07T13:30:34", "url": "https://files.pythonhosted.org/packages/57/56/45137e63aadb518e8018064ffc6e7c98950ce85682e44466228a91fcc4b3/graphene-sqlalchemy-filter-1.7.0.tar.gz" } ], "1.8.0": [ { "comment_text": "", "digests": { "md5": "cebd4cc8017b25f05e1392cad95970f8", "sha256": "58a7daa568900af56a84045c5af0722ffc1660497468b36019d7583f536fb4e4" }, "downloads": -1, "filename": "graphene_sqlalchemy_filter-1.8.0-py3-none-any.whl", "has_sig": false, "md5_digest": "cebd4cc8017b25f05e1392cad95970f8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 12173, "upload_time": "2019-09-26T10:11:42", "url": "https://files.pythonhosted.org/packages/c5/de/9aa64309fc1c56502d491b0e499d09552bd4f905149b7f0fa615d3d10c95/graphene_sqlalchemy_filter-1.8.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "056b7c1e09a597bd92f3e4b99f95c631", "sha256": "521b700ed8157e8f9aef525ed082b88c750a1e6caecb9d87f4f52d934e37bace" }, "downloads": -1, "filename": "graphene-sqlalchemy-filter-1.8.0.tar.gz", "has_sig": false, "md5_digest": "056b7c1e09a597bd92f3e4b99f95c631", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 14602, "upload_time": "2019-09-26T10:11:44", "url": "https://files.pythonhosted.org/packages/e8/b2/bfda9dac533b4e54aa6c976af7149432c0c886a68593b59efb1692e4c508/graphene-sqlalchemy-filter-1.8.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "cebd4cc8017b25f05e1392cad95970f8", "sha256": "58a7daa568900af56a84045c5af0722ffc1660497468b36019d7583f536fb4e4" }, "downloads": -1, "filename": "graphene_sqlalchemy_filter-1.8.0-py3-none-any.whl", "has_sig": false, "md5_digest": "cebd4cc8017b25f05e1392cad95970f8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 12173, "upload_time": "2019-09-26T10:11:42", "url": "https://files.pythonhosted.org/packages/c5/de/9aa64309fc1c56502d491b0e499d09552bd4f905149b7f0fa615d3d10c95/graphene_sqlalchemy_filter-1.8.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "056b7c1e09a597bd92f3e4b99f95c631", "sha256": "521b700ed8157e8f9aef525ed082b88c750a1e6caecb9d87f4f52d934e37bace" }, "downloads": -1, "filename": "graphene-sqlalchemy-filter-1.8.0.tar.gz", "has_sig": false, "md5_digest": "056b7c1e09a597bd92f3e4b99f95c631", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 14602, "upload_time": "2019-09-26T10:11:44", "url": "https://files.pythonhosted.org/packages/e8/b2/bfda9dac533b4e54aa6c976af7149432c0c886a68593b59efb1692e4c508/graphene-sqlalchemy-filter-1.8.0.tar.gz" } ] }