<a name="readme-top"></a>
# 🤏🏻 Criteria Pattern
<p align="center">
<a href="https://github.com/adriamontoto/criteria-pattern/actions/workflows/ci.yaml?event=push&branch=master" target="_blank">
<img src="https://github.com/adriamontoto/criteria-pattern/actions/workflows/ci.yaml/badge.svg?event=push&branch=master" alt="CI Pipeline">
</a>
<a href="https://coverage-badge.samuelcolvin.workers.dev/redirect/adriamontoto/criteria-pattern" target="_blank">
<img src="https://coverage-badge.samuelcolvin.workers.dev/adriamontoto/criteria-pattern.svg" alt="Coverage Pipeline">
</a>
<a href="https://pypi.org/project/criteria-pattern" target="_blank">
<img src="https://img.shields.io/pypi/v/criteria-pattern?color=%2334D058&label=pypi%20package" alt="Package Version">
</a>
<a href="https://pypi.org/project/criteria-pattern/" target="_blank">
<img src="https://img.shields.io/pypi/pyversions/criteria-pattern.svg?color=%2334D058" alt="Supported Python Versions">
</a>
<a href="https://pepy.tech/projects/criteria-pattern" target="_blank">
<img src="https://static.pepy.tech/badge/criteria-pattern/month" alt="Package Downloads">
</a>
</p>
The **Criteria Pattern** is a Python 🐍 package that simplifies and standardizes criteria based filtering 🤏🏻, validation and selection. This package provides a set of prebuilt 👷🏻 objects and utilities that you can drop into your existing projects and not have to implement yourself.
These utilities 🛠️ are useful when you need complex filtering logic. It also enforces 👮🏻 best practices so all your filtering processes follow a uniform standard.
Easy to install and integrate, this is a must have for any Python developer looking to simplify their workflow, enforce design patterns and use the full power of modern ORMs and SQL 🗄️ in their projects 🚀.
<br><br>
## Table of Contents
- [📥 Installation](#installation)
- [💻 Utilization](#utilization)
- [🤝 Contributing](#contributing)
- [🔑 License](#license)
<p align="right">
<a href="#readme-top">🔼 Back to top</a>
</p><br><br>
<a name="installation"></a>
## 📥 Installation
You can install **Criteria Pattern** using `pip`:
```bash
pip install criteria-pattern
```
<p align="right">
<a href="#readme-top">🔼 Back to top</a>
</p><br><br>
<a name="utilization"></a>
## 💻 Utilization
```python
from criteria_pattern import Criteria, Filter, Operator
from criteria_pattern.converter import SqlConverter
is_adult = Criteria(filters=[Filter(field='age', operator=Operator.GREATER_OR_EQUAL, value=18)])
email_is_gmail = Criteria(filters=[Filter(field='email', operator=Operator.ENDS_WITH, value='@gmail.com')])
email_is_yahoo = Criteria(filters=[Filter(field='email', operator=Operator.ENDS_WITH, value='@yahoo.com')])
query, parameters = SqlConverter.convert(criteria=is_adult & (email_is_gmail | email_is_yahoo), table='user')
print(query)
print(parameters)
# >>> SELECT * FROM user WHERE (age >= %(parameter_0)s AND (email LIKE '%%' || %(parameter_1)s OR email LIKE '%%' || %(parameter_2)s));
# >>> {'parameter_0': 18, 'parameter_1': '@gmail.com', 'parameter_2': '@yahoo.com'}
```
<p align="right">
<a href="#readme-top">🔼 Back to top</a>
</p><br><br>
<a name="contributing"></a>
## 🤝 Contributing
We love community help! Before you open an issue or pull request, please read:
- [`🤝 How to Contribute`](https://github.com/adriamontoto/criteria-pattern/blob/master/.github/CONTRIBUTING.md)
- [`🧭 Code of Conduct`](https://github.com/adriamontoto/criteria-pattern/blob/master/.github/CODE_OF_CONDUCT.md)
- [`🔐 Security Policy`](https://github.com/adriamontoto/criteria-pattern/blob/master/.github/SECURITY.md)
_Thank you for helping make **🤏🏻 Criteria Pattern** package awesome! 🌟_
<p align="right">
<a href="#readme-top">🔼 Back to top</a>
</p><br><br>
<a name="license"></a>
## 🔑 License
This project is licensed under the terms of the [`MIT license`](https://github.com/adriamontoto/criteria-pattern/blob/master/LICENSE.md).
<p align="right">
<a href="#readme-top">🔼 Back to top</a>
</p>
Raw data
{
"_id": null,
"home_page": null,
"name": "criteria-pattern",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": "criteria, development, filtering, pattern, python, selection, tools, utilities, validation",
"author": "Adria Montoto",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/fc/44/e02c937ebd45b0570a21d22bfe9e3e90ef6964cf08270ddc89828e113e33/criteria_pattern-1.0.0.tar.gz",
"platform": null,
"description": "<a name=\"readme-top\"></a>\n\n# \ud83e\udd0f\ud83c\udffb Criteria Pattern\n\n<p align=\"center\">\n <a href=\"https://github.com/adriamontoto/criteria-pattern/actions/workflows/ci.yaml?event=push&branch=master\" target=\"_blank\">\n <img src=\"https://github.com/adriamontoto/criteria-pattern/actions/workflows/ci.yaml/badge.svg?event=push&branch=master\" alt=\"CI Pipeline\">\n </a>\n <a href=\"https://coverage-badge.samuelcolvin.workers.dev/redirect/adriamontoto/criteria-pattern\" target=\"_blank\">\n <img src=\"https://coverage-badge.samuelcolvin.workers.dev/adriamontoto/criteria-pattern.svg\" alt=\"Coverage Pipeline\">\n </a>\n <a href=\"https://pypi.org/project/criteria-pattern\" target=\"_blank\">\n <img src=\"https://img.shields.io/pypi/v/criteria-pattern?color=%2334D058&label=pypi%20package\" alt=\"Package Version\">\n </a>\n <a href=\"https://pypi.org/project/criteria-pattern/\" target=\"_blank\">\n <img src=\"https://img.shields.io/pypi/pyversions/criteria-pattern.svg?color=%2334D058\" alt=\"Supported Python Versions\">\n </a>\n <a href=\"https://pepy.tech/projects/criteria-pattern\" target=\"_blank\">\n <img src=\"https://static.pepy.tech/badge/criteria-pattern/month\" alt=\"Package Downloads\">\n </a>\n</p>\n\nThe **Criteria Pattern** is a Python \ud83d\udc0d package that simplifies and standardizes criteria based filtering \ud83e\udd0f\ud83c\udffb, validation and selection. This package provides a set of prebuilt \ud83d\udc77\ud83c\udffb objects and utilities that you can drop into your existing projects and not have to implement yourself.\n\nThese utilities \ud83d\udee0\ufe0f are useful when you need complex filtering logic. It also enforces \ud83d\udc6e\ud83c\udffb best practices so all your filtering processes follow a uniform standard.\n\nEasy to install and integrate, this is a must have for any Python developer looking to simplify their workflow, enforce design patterns and use the full power of modern ORMs and SQL \ud83d\uddc4\ufe0f in their projects \ud83d\ude80.\n<br><br>\n\n## Table of Contents\n\n- [\ud83d\udce5 Installation](#installation)\n- [\ud83d\udcbb Utilization](#utilization)\n- [\ud83e\udd1d Contributing](#contributing)\n- [\ud83d\udd11 License](#license)\n\n<p align=\"right\">\n <a href=\"#readme-top\">\ud83d\udd3c Back to top</a>\n</p><br><br>\n\n<a name=\"installation\"></a>\n\n## \ud83d\udce5 Installation\n\nYou can install **Criteria Pattern** using `pip`:\n\n```bash\npip install criteria-pattern\n```\n\n<p align=\"right\">\n <a href=\"#readme-top\">\ud83d\udd3c Back to top</a>\n</p><br><br>\n\n<a name=\"utilization\"></a>\n\n## \ud83d\udcbb Utilization\n\n```python\nfrom criteria_pattern import Criteria, Filter, Operator\nfrom criteria_pattern.converter import SqlConverter\n\nis_adult = Criteria(filters=[Filter(field='age', operator=Operator.GREATER_OR_EQUAL, value=18)])\nemail_is_gmail = Criteria(filters=[Filter(field='email', operator=Operator.ENDS_WITH, value='@gmail.com')])\nemail_is_yahoo = Criteria(filters=[Filter(field='email', operator=Operator.ENDS_WITH, value='@yahoo.com')])\n\nquery, parameters = SqlConverter.convert(criteria=is_adult & (email_is_gmail | email_is_yahoo), table='user')\nprint(query)\nprint(parameters)\n# >>> SELECT * FROM user WHERE (age >= %(parameter_0)s AND (email LIKE '%%' || %(parameter_1)s OR email LIKE '%%' || %(parameter_2)s));\n# >>> {'parameter_0': 18, 'parameter_1': '@gmail.com', 'parameter_2': '@yahoo.com'}\n```\n\n<p align=\"right\">\n <a href=\"#readme-top\">\ud83d\udd3c Back to top</a>\n</p><br><br>\n\n<a name=\"contributing\"></a>\n\n## \ud83e\udd1d Contributing\n\nWe love community help! Before you open an issue or pull request, please read:\n\n- [`\ud83e\udd1d How to Contribute`](https://github.com/adriamontoto/criteria-pattern/blob/master/.github/CONTRIBUTING.md)\n- [`\ud83e\udded Code of Conduct`](https://github.com/adriamontoto/criteria-pattern/blob/master/.github/CODE_OF_CONDUCT.md)\n- [`\ud83d\udd10 Security Policy`](https://github.com/adriamontoto/criteria-pattern/blob/master/.github/SECURITY.md)\n\n_Thank you for helping make **\ud83e\udd0f\ud83c\udffb Criteria Pattern** package awesome! \ud83c\udf1f_\n\n<p align=\"right\">\n <a href=\"#readme-top\">\ud83d\udd3c Back to top</a>\n</p><br><br>\n\n<a name=\"license\"></a>\n\n## \ud83d\udd11 License\n\nThis project is licensed under the terms of the [`MIT license`](https://github.com/adriamontoto/criteria-pattern/blob/master/LICENSE.md).\n\n<p align=\"right\">\n <a href=\"#readme-top\">\ud83d\udd3c Back to top</a>\n</p>\n",
"bugtrack_url": null,
"license": null,
"summary": "The Criteria Pattern is a Python package that simplifies and standardizes criteria based filtering, validation and selection.",
"version": "1.0.0",
"project_urls": {
"Homepage": "https://github.com/adriamontoto/criteria-pattern",
"Issues": "https://github.com/adriamontoto/criteria-pattern/issues",
"Repository": "https://github.com/adriamontoto/criteria-pattern"
},
"split_keywords": [
"criteria",
" development",
" filtering",
" pattern",
" python",
" selection",
" tools",
" utilities",
" validation"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "b6bb45a08cbdcffd29e4cc9d6433faf852083e592036690c42554aea1946e229",
"md5": "4fa3357af3bc4bc3c2f6dc955dd68a39",
"sha256": "4ff67871e7e954df25024c3726ab1b7c4c2ece465936d128899580bf062998f4"
},
"downloads": -1,
"filename": "criteria_pattern-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4fa3357af3bc4bc3c2f6dc955dd68a39",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 30280,
"upload_time": "2025-07-20T10:28:48",
"upload_time_iso_8601": "2025-07-20T10:28:48.314287Z",
"url": "https://files.pythonhosted.org/packages/b6/bb/45a08cbdcffd29e4cc9d6433faf852083e592036690c42554aea1946e229/criteria_pattern-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fc44e02c937ebd45b0570a21d22bfe9e3e90ef6964cf08270ddc89828e113e33",
"md5": "c99dfb671ba426339c4fe4432f47a353",
"sha256": "8dcd1b3a24718eac3284fba61340e40fda9c83b93a8d2134d789e82c00463491"
},
"downloads": -1,
"filename": "criteria_pattern-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "c99dfb671ba426339c4fe4432f47a353",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 15186,
"upload_time": "2025-07-20T10:28:49",
"upload_time_iso_8601": "2025-07-20T10:28:49.684793Z",
"url": "https://files.pythonhosted.org/packages/fc/44/e02c937ebd45b0570a21d22bfe9e3e90ef6964cf08270ddc89828e113e33/criteria_pattern-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-20 10:28:49",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "adriamontoto",
"github_project": "criteria-pattern",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "criteria-pattern"
}