Skip to main content

A business rules engine

Project description

retrack

A business rules engine

Package version Code style: black Semantic Versions License

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 the inputs and outputs properties.
  • 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 the inputs property.
  • output: The output name of the connection that is connected to the current node. This is only used in the outputs property.

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.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

retrack-3.6.0a3.tar.gz (27.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

retrack-3.6.0a3-py3-none-any.whl (43.1 kB view details)

Uploaded Python 3

File details

Details for the file retrack-3.6.0a3.tar.gz.

File metadata

  • Download URL: retrack-3.6.0a3.tar.gz
  • Upload date:
  • Size: 27.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.2 CPython/3.12.13 Linux/6.17.0-1015-azure

File hashes

Hashes for retrack-3.6.0a3.tar.gz
Algorithm Hash digest
SHA256 b8ec5191869699521d37f6b28da541c52cf86760a161678ef30eab25c6b0e16e
MD5 f9491d652043dcc7835ab71be8c56720
BLAKE2b-256 7d5bee536e47cddf6149dfc08c750fb85a270281329d815376df128d8816a03e

See more details on using hashes here.

File details

Details for the file retrack-3.6.0a3-py3-none-any.whl.

File metadata

  • Download URL: retrack-3.6.0a3-py3-none-any.whl
  • Upload date:
  • Size: 43.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.2 CPython/3.12.13 Linux/6.17.0-1015-azure

File hashes

Hashes for retrack-3.6.0a3-py3-none-any.whl
Algorithm Hash digest
SHA256 bddb3c69e1e1badd79cae95b0bea9925dba0e3c0b050c6ed67d9d5bb9bdfd2ff
MD5 5e7a278d16555e52a2263e675e2d276f
BLAKE2b-256 5caa46ec467c7699a370dbdd2226b9525ba9741b7a5f00af6925e4364ce1e434

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page