https://github.com/maif/arta
A Python Rules Engine - Make rule handling simple
https://github.com/maif/arta
maif package python rule-engine rules rules-engine
Last synced: 12 months ago
JSON representation
A Python Rules Engine - Make rule handling simple
- Host: GitHub
- URL: https://github.com/maif/arta
- Owner: MAIF
- License: apache-2.0
- Created: 2024-03-20T09:48:10.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2025-03-11T11:43:14.000Z (about 1 year ago)
- Last Synced: 2025-03-31T11:02:51.359Z (about 1 year ago)
- Topics: maif, package, python, rule-engine, rules, rules-engine
- Language: Python
- Homepage: https://maif.github.io/arta/home
- Size: 242 KB
- Stars: 40
- Watchers: 4
- Forks: 6
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
Make rule handling simple
---
**Documentation:** [https://maif.github.io/arta/home/](https://maif.github.io/arta/home/)
**Repository:** [https://github.com/MAIF/arta](https://github.com/MAIF/arta)
---
## Overview
**Arta** is an *open source* python rules engine designed for and by python developers.
### Goal
There is one main reason for using **Arta** and it was the main goal behind its development at *MAIF*: increase business rules maintainability.
In other words, facilitate rules handling in our python apps.
### Origins
The need of a python *rules engine* emerged when we were working on a new major release of our internal use of [Melusine](https://github.com/maif/melusine) (i.e., email qualification pipeline with ML capabilities).
We were looking for a python library to *centralize, manage and standardize* all the implemented **business rules** we had but didn't find the perfect fit.
Therefore, we decided to create this package and by extension of the MAIF's values, we planned to share it to the community.
### Features
* Standardize the definition of a rule. All rules are defined the same way in a unique place.
* Rules are released from the code base, which is less error prone and increases clearness.
* Use **Arta** whatever your field is.
* Great combination with Machine Learning: groups all the deterministic rules of your ML projects.
### A Simple Example
Create the three following files and run the `main.py` script (`python main.py` or `python3 main.py`).
`rules.yaml` :
```yaml
---
rules:
default_rule_set:
admission:
ADMITTED:
simple_condition: input.power=="strength" or input.power=="fly"
action: set_admission
action_parameters:
value: true
NOT_ADMITTED:
simple_condition: null
action: set_admission
action_parameters:
value: false
actions_source_modules:
- actions
```
`actions.py` :
```python
from typing import Any
def set_admission(value: bool) -> dict[str, bool]:
"""Return a dictionary containing the admission result."""
return {"is_admitted": value}
```
`main.py` :
```python
from arta import RulesEngine
eng = RulesEngine(config_path=".")
data = {
"id": 1,
"name": "Superman",
"civilian_name": "Clark Kent",
"age": None,
"city": "Metropolis",
"language": "english",
"power": "fly",
"favorite_meal": "Spinach",
"secret_weakness": "Kryptonite",
}
result = eng.apply_rules(input_data=data)
print(result)
```
You should get: `{"admission": {"is_admitted": True}}`
Check the [A Simple Example](https://maif.github.io/arta/a_simple_example/) section for more details.
## Installation
Install using `pip install -U`:
```shell
pip install -U arta
```
See the [Install](https://maif.github.io/arta/installation/) section in the documentation for more details.
## What's New
Want to see last updates, check the [Release Notes](https://github.com/MAIF/arta/releases) or the [Changelog](./CHANGELOG.md).
## Community
You can discuss and ask *Arta* related questions:
- Issue tracker: [](https://github.com/MAIF/arta/issues)
- Pull request: [](https://github.com/MAIF/arta/pulls)
## Contributing
Contributions are *very* welcome!
If you see an issue that you'd like to see fixed, the best way to make it happen is to help out by submitting a pull request implementing it.
Refer to the [CONTRIBUTING.md](./CONTRIBUTING.md) file for more details about the workflow,
and general hints on how to prepare your pull request. You can also ask for clarifications or guidance in GitHub issues directly.
## License
This project is Open Source and available under the Apache 2 License.
[](https://www.maif.fr/)