This release is a pre-release and may not be stable for production use.
A business rules engine
Installation
pip install retrack
Usage
import retrack
rule = retrack.from_json("rule.json")
result = await rule.execute(your_data_df)
Creating a rule/model
A rule is a set of conditions and actions that are executed when the conditions are met. The conditions are evaluated using the data passed to the runner. The actions are executed when the conditions are met.
Each rule is composed of many nodes. To see each node type, check the nodes folder.
To create a rule, you need to create a JSON file with the following structure:
{
"nodes": {
"node id": {
"id": "node id",
"data": {},
"inputs": {},
"outputs": {},
"name": "node name",
},
// ... more nodes
}
}
The nodes key is a dictionary of nodes. Each node has the following properties:
id: The node id. This is used to reference the node in theinputsandoutputsproperties.data: The node data. This is used as a metadata for the node.inputs: The node inputs. This is used to reference the node inputs.outputs: The node outputs. This is used to reference the node outputs.name: The node name. This is used to define the node type.
The inputs and outputs properties are dictionaries of node connections. Each connection has the following properties:
node: The node id that is connected to the current node.input: The input name of the connection that is connected to the current node. This is only used in theinputsproperty.output: The output name of the connection that is connected to the current node. This is only used in theoutputsproperty.
To see some examples, check the examples folder.
Creating a custom node
To create a custom node, you need to create a class that inherits from the BaseNode class. Each node is a pydantic model, so you can use pydantic features to create your custom node. To see the available features, check the pydantic documentation.
To create a custom node you need to define the inputs and outputs of the node. To do this, you need to define the inputs and outputs class attributes. Let's see an example of a custom node that has two inputs, sum them and return the result:
import retrack
import pydantic
import pandas as pd
import typing
class SumInputsModel(pydantic.BaseModel):
input_value_0: retrack.InputConnectionModel
input_value_1: retrack.InputConnectionModel
class SumOutputsModel(pydantic.BaseModel):
output_value: retrack.OutputConnectionModel
class SumNode(retrack.BaseNode):
inputs: SumInputsModel
outputs: SumOutputsModel
async def run(self, input_value_0: pd.Series,
input_value_1: pd.Series,
) -> typing.Dict[str, pd.Series]:
output_value = input_value_0.astype(float) + input_value_1.astype(float)
return {
"output_value": output_value,
}
After creating the custom node, you need to register it in the nodes registry and pass the registry to the parser. Let's see an example:
import retrack
# Register the custom node
custom_registry = retrack.nodes_registry()
custom_registry.register("sum", SumNode)
rule = retrack.from_json("rule.json", nodes_registry=custom_registry)
Contributing
Contributions are welcome! Please read the contributing guidelines first.
Metadata
Release files for retrack 3.9.0a2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| retrack-3.9.0a2.tar.gz | 30.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| retrack-3.9.0a2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 78.2 kB
Release files / retrack-3.9.0a2.tar.gz
| Download URL | retrack-3.9.0a2.tar.gz |
|---|---|
| Size | 30.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
742c082121c0111209446e559150feeddeaa5b2b0f5d11d2a2b9ceb1150a8c00
|
|
BLAKE2b-256 checksum How to use checksums |
b5ac11ead338b8eff217065205369a2fcaf35e309c8ca3c4882ae697fbafcebc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.4.2 CPython/3.12.14 Linux/6.17.0-1022-azure
|
Release files / retrack-3.9.0a2-py3-none-any.whl
| Download URL | retrack-3.9.0a2-py3-none-any.whl |
|---|---|
| Size | 47.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
afa29c01737a1823e27676fd4bc1292fbac8acfcad7da8e58a05859b182b6ec5
|
|
BLAKE2b-256 checksum How to use checksums |
aa83c67f24ca4de2bc608e6af1fea1e112b10265218adb16480d99fdd79c6acc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.4.2 CPython/3.12.14 Linux/6.17.0-1022-azure
|
Security for retrack 3.9.0a2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.