a little flow-based process engine implementation
Project description
Flow-based process just got Pythonic
dtree is a library for processing flow-based logical system with complicated chain of if-else blocks just like handling a flowchart.
Example
Here is a quick example to get a feeling of dtree. Given information of a student like
student = {
'age': 15,
'interest': 'reading',
'gender': 'female',
}
figure out what gift to give with the following logics:
+++root:
| +++age < 12:
| | +++interest = sports:
| | | ---gender = female --> give note
| | | ---ELSE --> give football
| | ---ELSE --> give book
| +++age >= 15:
| | ---interest = writing --> give note
| | ---ELSE --> give book
| +++ELSE:
| | ---gender = male --> give football
| | ---ELSE --> give book
from dtree import *
student = {
'age': 15,
'interest': 'reading',
'gender': 'female',
}
age = ValueAccessor("age", lambda student: student['age'])
interest = ValueAccessor("interest", lambda student: student['interest'])
gender = ValueAccessor("gender", lambda student: student['gender'])
is_male = gender.eq("male")
is_female = gender.eq("female")
def give(item):
print("give %s" % item)
give_book = ToAction(lambda student: give("book"), "give book")
give_football = ToAction(lambda student: give("football"), "give football")
give_note = ToAction(lambda student: give("note"), "give note")
rule = DTree(Node(
(age.lt(12), Node(
(interest.eq("sports"), Node(
(is_female, give_note),
(else_, give_football),
)),
(else_, give_book),
)),
(age.ge(15), Node(
(interest.eq("writing"), give_note),
(else_, give_book),
)),
(else_, Node(
(is_male, give_football),
(else_, give_book),
)),
))
rule.run(student) # give book
Installation
Use pip <http://pip-installer.org>_ or easy_install::
pip install dtree-python
Alternatively, you can just drop dtree.py file into your project—it is
self-contained.
- dtree is tested with Python 2.6, 2.7, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7 and PyPy.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dtree-python-1.0.5.tar.gz.
File metadata
- Download URL: dtree-python-1.0.5.tar.gz
- Upload date:
- Size: 5.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.7.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
95b3ab756b5fd8d1d18d48145943c82975898e2b4d39056ed45425c49b6c5760
|
|
| MD5 |
fd5b9b3586f9b8bda12c71420c3dc232
|
|
| BLAKE2b-256 |
1edd0ce9ca38a1c371a01d619ba7fba25133c73ef48817f5f6d49d95521f0839
|
File details
Details for the file dtree_python-1.0.5-py3-none-any.whl.
File metadata
- Download URL: dtree_python-1.0.5-py3-none-any.whl
- Upload date:
- Size: 6.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.7.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e0bf05eae925c64ac71038d86e3befb085e731850c5c7f17978dc780ba66a267
|
|
| MD5 |
96e47e35ccaf5f267e4e1a3fd7e3f08b
|
|
| BLAKE2b-256 |
a30cd55ba101112a5801d8657d9a09b1cc1224c6ecad14ecffafc9651b218b38
|