Security News
PyPI’s New Archival Feature Closes a Major Security Gap
PyPI now allows maintainers to archive projects, improving security and helping users make informed decisions about their dependencies.
A business rules engine
pip install retrack
import retrack
rule = retrack.from_json("rule.json")
result = rule.execute(your_data_df)
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.
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
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)
Contributions are welcome! Please read the contributing guidelines first.
FAQs
A business rules engine
We found that retrack demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PyPI now allows maintainers to archive projects, improving security and helping users make informed decisions about their dependencies.
Research
Security News
Malicious npm package postcss-optimizer delivers BeaverTail malware, targeting developer systems; similarities to past campaigns suggest a North Korean connection.
Security News
CISA's KEV data is now on GitHub, offering easier access, API integration, commit history tracking, and automated updates for security teams and researchers.