{ "info": { "author": "Churin Andrey", "author_email": "aachurin@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3 :: Only", "Topic :: Internet :: WWW/HTTP" ], "description": "

\n Generic peewee filters.\n

\n\n---\n\n# Quickstart\n\nInstall peewee filters:\n\n```bash\n$ pip3 install peewee_generic_filters\n```\n\n\n```python\nimport peewee\nimport peewee_filters as filters\n\n\nclass Product(peewee.Model):\n title = peewee.CharField()\n description = peewee.CharField(null=True)\n price = peewee.IntegerField()\n\n\nclass Filter(filters.FilterSet):\n title = filters.Filter(operator=\"startswith\")\n has_description = filters.MethodFilter(\"filter_description\")\n price_min = filters.Filter(operator=\"ge\")\n\n def filter_description(self, query, value: bool, **kwargs): \n return query.where(\n Product.description.is_null(not value) | (\n (Product.description != \"\") if value else (Product.description == \"\")\n )\n )\n\n class Meta:\n model = Product\n\n\nFilter({\"title\": \"foo\", \"has_description\": True}).apply(Product)\n```\n\nalso it's possible to create `FilterSet` without binding concrete model. \n\n```python\nclass Filter(filters.FilterSet):\n title = filters.CharFilter(operator=\"startswith\")\n has_description = filters.MethodFilter(\"filter_description\")\n price_min = filters.NumberFilter(operator=\"ge\")\n\n def filter_description(self, query, value: bool, **kwargs): \n return query.where(\n Product.description.is_null(not value) | (\n (Product.description != \"\") if value else (Product.description == \"\")\n )\n )\n```\n\nIn this case it's possible to use a FilterSet for multiple similar models.\nBut it is much slower than using a FilterSet with an explicit model. \n\n# Filters\n\n### CharFilter\nThis filter does simple character matches, used with `CharField` and `TextField`.\n\n### NumberFilter\nFilters based on a numerical value, used with `IntegerField`, `FloatField`, and `DecimalField`.\n\n### DateTimeFilter\nMatches on a date and time. Used with `DateTimeField`.\n\n### TimeFilter\nMatches on a time. Used with `TimeField`.\n\n### DateFilter\nMatches on a date. Used with `DateField` by default.\n\n### BooleanFilter\nThis filter matches a boolean, either `True` or `False`, used with `BooleanField`.\n\n### UUIDFilter\nThis filter matches an UUID, used with `BinaryUUIDField`.\n\nThe following are the arguments that apply to all filters:\n\n###### field_name\nThe name of the model field that is filtered against. \nIf this argument is not provided, it defaults the filter\u2019s attribute name on the `FilterSet` class.\nField names can traverse relationships by joining the related parts with separator (.). e.g., a product\u2019s manufacturer.name.\n\n###### description \nFilter description. Defaults to empty string.\n\n###### operator\nThe field lookup that should be performed in the filter call.\nShould be one of the following values: `eq`, `lt`, `gt`, `le`, `ge`, `ne`, `like`, `ilike`, `is_null`, `in`, `not_in`, `contains`, `startswith`, `endswith`, `regexp`, `iregexp`. \nDefaults to `eq`.\n\n###### method\nFor `MethodFilter` only.\nAn argument that tells the filter how to handle the queryset.\nIt can accept either a callable or the name of a method on the `FilterSet`. \nThe callable receives a `query`, the `field_name` of the model field to filter on, the `value` to filter with, and `context`.\nIt should return a filtered query. The parameter `value` of a callable should have annotation.\n\n# Special filters\n### SearchingFilter\nIs used for searching in multiple fields. It accepts one additional argument:\n\n######\n fields\nThe list of fields for searching.\n\n### OffsetFilter\nSpecify value for OFFSET clause. \n\n### LimitFilter\nSpecify value for LIMIT clause.\n\nIt accepts two additional arguments:\n\n###### default\nDefault value for LIMIT clause.\nDefaults to `100`.\n\n###### maximum\nMaximum value for LIMIT clause.\nDefaults to `None`.\n\n### OrderingFilter\nEnable queryset ordering. It accepts two additional arguments that are used to build the ordering choices:\n\n###### fields\nIs a mapping of {parameter name: model field name}. `fields` may also just be a list of strings. In this case, the field names simply double as the exposed parameter names.\n\n###### default\nDefault ordering.\n\n### SearchingFilter\nEnable queryset searching. It accepts one additional argument:\n\n###### fields\nIs a mapping of {model field name: operator}. `fields` may also just be a list of strings.\nIn this case, the operator is `contains`. \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/aachurin/peewee_filters", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "peewee-generic-filters", "package_url": "https://pypi.org/project/peewee-generic-filters/", "platform": "", "project_url": "https://pypi.org/project/peewee-generic-filters/", "project_urls": { "Homepage": "https://github.com/aachurin/peewee_filters" }, "release_url": "https://pypi.org/project/peewee-generic-filters/0.2.3/", "requires_dist": [ "peewee" ], "requires_python": "", "summary": "Generic filters for peewee", "version": "0.2.3" }, "last_serial": 5791646, "releases": { "0.1.2": [ { "comment_text": "", "digests": { "md5": "a83951119645714a89046408b49c837e", "sha256": "1258cb5577d41eaa7484d73e22646903a90eb13de23e35c71b30b8c1fc817206" }, "downloads": -1, "filename": "peewee_generic_filters-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a83951119645714a89046408b49c837e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8766, "upload_time": "2019-07-27T20:25:33", "url": "https://files.pythonhosted.org/packages/d4/0d/aca42c89bda9a2c7cd74ce94f21c1718d415bfd2e7c0632bdaf19efd4b3f/peewee_generic_filters-0.1.2-py3-none-any.whl" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "768377537eb3a62398ae3c0c1f302c2e", "sha256": "24011c2900c6dca5886de9c0e7420da112a20fd109470d96f5f8cd021b77cf9c" }, "downloads": -1, "filename": "peewee_generic_filters-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "768377537eb3a62398ae3c0c1f302c2e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8816, "upload_time": "2019-07-28T17:15:23", "url": "https://files.pythonhosted.org/packages/14/39/aef01e10650ab07ed0796a4278826370b6af808279a7817db3350918872d/peewee_generic_filters-0.1.4-py3-none-any.whl" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "2256ce1715d14ca8ca70a69d76f61f4c", "sha256": "9a13d7590c69b7c3073b8156db77e015d2c4b0b66af35fdaf00bb66ab4223c2e" }, "downloads": -1, "filename": "peewee_generic_filters-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "2256ce1715d14ca8ca70a69d76f61f4c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8819, "upload_time": "2019-07-28T17:46:58", "url": "https://files.pythonhosted.org/packages/cf/f1/acdb9a6e0c0b4c4185bc3c37757b34c3399216c878dcf5f7df2512d57b5e/peewee_generic_filters-0.1.5-py3-none-any.whl" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "42d9ebff531a3e5dba6cbdfc127a13c1", "sha256": "0544c08e8e903ef6c48ba59f0cd3da73ba45b532d2512a4fbfe933902e737514" }, "downloads": -1, "filename": "peewee_generic_filters-0.1.6-py3-none-any.whl", "has_sig": false, "md5_digest": "42d9ebff531a3e5dba6cbdfc127a13c1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8876, "upload_time": "2019-07-29T11:59:56", "url": "https://files.pythonhosted.org/packages/63/db/eb19a1420351e2815ceaa687fad8fdc6f27e1f8d32990b1047561ec76829/peewee_generic_filters-0.1.6-py3-none-any.whl" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "e8cb98ca52bf8c8a92f21963ff152c10", "sha256": "55de2b7271d663a825fec8bb3c10f7663dae4b7332ced85a707f7b88003b8f9c" }, "downloads": -1, "filename": "peewee_generic_filters-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e8cb98ca52bf8c8a92f21963ff152c10", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8394, "upload_time": "2019-08-02T19:56:59", "url": "https://files.pythonhosted.org/packages/c4/e9/5a18af80d4281f7dcd2965c213947a470415aa78ac38b4d1ac3957170b39/peewee_generic_filters-0.2.0-py3-none-any.whl" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "5f4480b241356dae10382c0dd45e4966", "sha256": "ae77630fecdca7de810e45ed952e032e3bcdd95326be1ea179887f3094d2baff" }, "downloads": -1, "filename": "peewee_generic_filters-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "5f4480b241356dae10382c0dd45e4966", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8424, "upload_time": "2019-08-07T05:30:58", "url": "https://files.pythonhosted.org/packages/b4/7a/e7cc05a1d6065d73f8d8b60e00648bb8ab7d3aaa883a77e0a096370b2387/peewee_generic_filters-0.2.1-py3-none-any.whl" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "3bcceec1f1086256882e7cf0fa44737d", "sha256": "102011fd4fd5a368f0c6b69707b4a1cb90cee55b91e5f2c091ec374550e4331f" }, "downloads": -1, "filename": "peewee_generic_filters-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "3bcceec1f1086256882e7cf0fa44737d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8422, "upload_time": "2019-09-06T10:41:24", "url": "https://files.pythonhosted.org/packages/1c/7a/fd85c003a0b42c7e172cce85dec1b7d6e5467fa3aa9dfe883eec9ddba929/peewee_generic_filters-0.2.2-py3-none-any.whl" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "e560f5d9ef5e6890fa2dd29b20804141", "sha256": "df9f637a9ed0d1a06ecb339eb5076d2017e6684e944283b5db3aa2d0aed01af0" }, "downloads": -1, "filename": "peewee_generic_filters-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "e560f5d9ef5e6890fa2dd29b20804141", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8428, "upload_time": "2019-09-06T11:13:56", "url": "https://files.pythonhosted.org/packages/b9/9a/151e33e10013de2c97401c8defffeac717f7dca8ea8ee3a28f2a46fc4dd6/peewee_generic_filters-0.2.3-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e560f5d9ef5e6890fa2dd29b20804141", "sha256": "df9f637a9ed0d1a06ecb339eb5076d2017e6684e944283b5db3aa2d0aed01af0" }, "downloads": -1, "filename": "peewee_generic_filters-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "e560f5d9ef5e6890fa2dd29b20804141", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8428, "upload_time": "2019-09-06T11:13:56", "url": "https://files.pythonhosted.org/packages/b9/9a/151e33e10013de2c97401c8defffeac717f7dca8ea8ee3a28f2a46fc4dd6/peewee_generic_filters-0.2.3-py3-none-any.whl" } ] }