A simple, generic rules engine.
Project description
Rules Engine
A simple, generic rules engine. Inspired by Martin Fowler's 2009 blog post.
This package was extracted from Funnel's production code and made open source.
For the story behind its inception, raison d'être, and overall concept, you can watch the talk Rules Rule held by Lennart Fridén at PyCon Sweden 2021.
Installation
Install the package funnel_rules_engine
version 1.3+
from PyPi.
The recommended requirements.txt
line is funnel_rules_engine~=1.3
.
Current Functionality
Rule
A combination of a condition and an action, both of which are callables such as functions or lambdas. The callables must have an arity of one. If the conditional returns true given a single object, the action will be called with the same object as its argument.
When creating a rule, it can also be tagged with a list of tags (see RulesEngine.reject
and RulesEngine.select
).
Otherwise
Special case of Rule where the action always fires. Suitable as a catch-all last rule.
NoAction
Special case of Rule where None
is returned if the condition is met. Useful for halting the execution of .run()
RulesEngine
A generic rules engine that accepts a list of Rule
s and some input to apply the rules to. The rules engine can either apply the first rule that matches (run
) or all the rules that matches (run_all
). In addition, rules can be evaluated and executed in parallel (run_all_in_parallel
). The latter two cases can optionally be lazily executed by returning a generator rather than a list as the result.
For more on rules engines, see Martin Fowler's blog post.
run
Only apply the first rule that matches and return its result. This is comparable to the behaviour of a structured switch statement or an arbitrary conditional statement.
run_all
Apply all rules that match. The result is returned as a list, or as a generator if the optional parameter lazy
is passed as True
.
run_all_in_parallel
Evaluate and apply all rules in parallel. The result is returned as a list, or as a generator if the optional parameter lazy
is passed as True
.
select
and reject
These methods return a new rules engine containing the rules matching/not matching the given tags.
when
and then
These are convenience functions for creating simple conditions and actions. They both accept a single value that in the case of when
will be used to check equality with the passed state and in the case of then
will be returned, ignoring the passed state.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file funnel_rules_engine-1.3.1.tar.gz
.
File metadata
- Download URL: funnel_rules_engine-1.3.1.tar.gz
- Upload date:
- Size: 4.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.9.18
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e5e8a9c601103de0e4494fdc5cf8ab191f4ce27ad67cc4b4de003ae6d19fbfd8 |
|
MD5 | 910611c8e1f57dcd25538f63327e5c42 |
|
BLAKE2b-256 | 029867a6b67bbecbfeec5d683d9e54e1fae5af66a2853eb3a553b528e201c686 |
File details
Details for the file funnel_rules_engine-1.3.1-py3-none-any.whl
.
File metadata
- Download URL: funnel_rules_engine-1.3.1-py3-none-any.whl
- Upload date:
- Size: 5.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.9.18
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 738992873bbcbb7fe640f6c360e2e5d780bda631b3f2a6bea6a05debe05e433a |
|
MD5 | dc51cf551ed88165f32938db49399539 |
|
BLAKE2b-256 | 6dff5db870669864dc407dd56095297576498fb35d8ca8875ab6414064a1e23a |