Skip to content

Commit

Permalink
update driver code example
Browse files Browse the repository at this point in the history
  • Loading branch information
saurabh0719 committed Dec 14, 2023
1 parent 8a71505 commit 46ce6ea
Show file tree
Hide file tree
Showing 3 changed files with 115 additions and 194 deletions.
167 changes: 34 additions & 133 deletions examples/driver.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from py_rules.components import Condition, Result, Rule
from py_rules.engine import RuleEngine
from py_rules.storages import JSONRuleStorage, PickledRuleStorage, YAMLRuleStorage

# Define conditions
Expand Down Expand Up @@ -27,141 +28,41 @@
PickledRuleStorage('rule.pkl').store(complex_rule)

# Load the complex rule from each format
json_rule_loaded = JSONRuleStorage('rule.json').load()
yaml_rule_loaded = YAMLRuleStorage('rule.yaml').load()
pickle_rule_loaded = PickledRuleStorage('rule.pkl').load()
json_rule = JSONRuleStorage('rule.json').load()
yaml_rule = YAMLRuleStorage('rule.yaml').load()
pickle_rule = PickledRuleStorage('rule.pkl').load()

# Assert that the loaded rules are equal to the original rule
assert complex_rule.to_dict() == json_rule_loaded.to_dict() == yaml_rule_loaded.to_dict() == pickle_rule_loaded.to_dict(
)
# assert complex_rule == json_rule #== yaml_rule == pickle_rule

# Print the dictionary representation of each rule
print("\nOriginal rule:", complex_rule.to_dict())
print("\nJSON loaded rule:", json_rule_loaded.to_dict())
print("\nYAML loaded rule:", yaml_rule_loaded.to_dict())
print("\nPickle loaded rule:", pickle_rule_loaded.to_dict())
assert complex_rule.to_dict() == {
"metadata": {
"version": "0.1.0",
"type": "Rule",
"id": "cfb77a2b-a05d-4f9d-be9d-ce442c51b624",
"created": "2023-12-14 21:27:01.828293",
"required_context_parameters": [],
"name": "Complex rule",
"parent_id": None,
},
"if": {
"and": [
{
"condition": {
"metadata": {
"version": "0.1.0",
"type": "Condition",
"id": "3173872f-404d-467b-aef3-507d28a5f53d",
"created": "2023-12-14 21:27:01.828222",
"required_context_parameters": ["number"],
},
"variable": "number",
"operator": "in",
"value": {
"type":
"list",
"value": [
{
"type": "int",
"value": 1
},
{
"type": "int",
"value": 2
},
{
"type": "int",
"value": 3
},
],
},
}
},
{
"condition": {
"metadata": {
"version": "0.1.0",
"type": "Condition",
"id": "b31483ed-e103-474f-b04e-70b2aad71beb",
"created": "2023-12-14 21:27:01.828252",
"required_context_parameters": ["number"],
},
"variable": "number",
"operator": "=",
"value": {
"type": "int",
"value": 1
},
}
},
]
},
"then": {
"result": {
"xyz": {
"type": "str",
"value": "Condition met"
},
"result": {
"type": "variable",
"value": "xyz"
},
}
},
"else": {
"metadata": {
"version": "0.1.0",
"type": "Rule",
"id": "00757c4b-cae1-4b9c-8480-927a48bcc4a8",
"created": "2023-12-14 21:27:01.828282",
"required_context_parameters": [],
"name": "Nested rule",
"parent_id": None,
},
"if": {
"condition": {
"metadata": {
"version": "0.1.0",
"type": "Condition",
"id": "3173872f-404d-467b-aef3-507d28a5f53d",
"created": "2023-12-14 21:27:01.828222",
"required_context_parameters": ["number"],
},
"variable": "number",
"operator": "in",
"value": {
"type": "list",
"value": [
{
"type": "int",
"value": 1
},
{
"type": "int",
"value": 2
},
{
"type": "int",
"value": 3
},
],
},
}
},
"then": {
"result": {
"xyz": {
"type": "str",
"value": "Condition met"
}
}
},
"else": None,
},
}
print("\nJSON loaded rule:", json_rule.to_dict())
assert complex_rule == json_rule #== yaml_rule == pickle_rule
print("\nYAML loaded rule:", yaml_rule.to_dict())
print("\nPickle loaded rule:", pickle_rule.to_dict())

# Hide metadata in the dictionary representation of the rule
complex_rule.kwargs['hide_metadata'] = True
complex_rule.load_metadata()
print("\nComplex rule - ", complex_rule.to_dict())
print("\nJSON rule - ", json_rule.to_dict())
assert complex_rule != json_rule

complex_rule.kwargs['hide_metadata'] = False
complex_rule.load_metadata()
print("\nComplex rule - ", complex_rule.to_dict())
print("\nJSON rule - ", json_rule.to_dict())
assert complex_rule == json_rule

# Create a RuleEngine and add the complex rule
context = {'number': 1, 'xyz': 5} # Define a context
engine = RuleEngine(context)

# Evaluate the rules against the contexts
print("\nEvaluation of context1:", engine.evaluate(complex_rule))
print("\nEvaluation of context1 with JSON rule:", engine.evaluate(json_rule))

context = {'number': 4, 'xyz': 5} # Update the context
engine = RuleEngine(context) # Create a new RuleEngine with the updated context
print("\nEvaluation of context2:", engine.evaluate(complex_rule))
32 changes: 18 additions & 14 deletions examples/rule.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@
"metadata": {
"version": "0.1.0",
"type": "Rule",
"id": "cfb77a2b-a05d-4f9d-be9d-ce442c51b624",
"created": "2023-12-14 21:27:01.828293",
"required_context_parameters": [],
"id": "9ddb7f6e-a730-413e-92aa-975325c701d1",
"created": "2023-12-15 04:28:40.252054",
"required_context_parameters": [
"number",
"xyz"
],
"name": "Complex rule",
"parent_id": null
},
Expand All @@ -15,8 +18,8 @@
"metadata": {
"version": "0.1.0",
"type": "Condition",
"id": "3173872f-404d-467b-aef3-507d28a5f53d",
"created": "2023-12-14 21:27:01.828222",
"id": "78f77078-44eb-42c2-9dbb-21fa2248647d",
"created": "2023-12-15 04:28:40.251929",
"required_context_parameters": [
"number"
]
Expand Down Expand Up @@ -47,8 +50,8 @@
"metadata": {
"version": "0.1.0",
"type": "Condition",
"id": "b31483ed-e103-474f-b04e-70b2aad71beb",
"created": "2023-12-14 21:27:01.828252",
"id": "c8de2c87-eb3d-4f1f-b0ec-5bf5d77ce424",
"created": "2023-12-15 04:28:40.251982",
"required_context_parameters": [
"number"
]
Expand Down Expand Up @@ -79,9 +82,11 @@
"metadata": {
"version": "0.1.0",
"type": "Rule",
"id": "00757c4b-cae1-4b9c-8480-927a48bcc4a8",
"created": "2023-12-14 21:27:01.828282",
"required_context_parameters": [],
"id": "b3e968cc-ff1d-4fe2-a720-aa3b0ebf0548",
"created": "2023-12-15 04:28:40.252036",
"required_context_parameters": [
"number"
],
"name": "Nested rule",
"parent_id": null
},
Expand All @@ -90,8 +95,8 @@
"metadata": {
"version": "0.1.0",
"type": "Condition",
"id": "3173872f-404d-467b-aef3-507d28a5f53d",
"created": "2023-12-14 21:27:01.828222",
"id": "78f77078-44eb-42c2-9dbb-21fa2248647d",
"created": "2023-12-15 04:28:40.251929",
"required_context_parameters": [
"number"
]
Expand Down Expand Up @@ -124,7 +129,6 @@
"value": "Condition met"
}
}
},
"else": null
}
}
}
110 changes: 63 additions & 47 deletions examples/rule.yaml
Original file line number Diff line number Diff line change
@@ -1,16 +1,26 @@
else:
else: null
if:
condition:
metadata: &id001
created: '2023-12-14 21:27:01.828222'
id: 3173872f-404d-467b-aef3-507d28a5f53d
metadata:
version: 0.1.0
type: Rule
id: 9ddb7f6e-a730-413e-92aa-975325c701d1
created: '2023-12-15 04:28:40.252054'
required_context_parameters:
- number
- xyz
name: Complex rule
parent_id: null
if:
and:
- condition:
metadata:
version: 0.1.0
type: Condition
id: 78f77078-44eb-42c2-9dbb-21fa2248647d
created: '2023-12-15 04:28:40.251929'
required_context_parameters:
- number
type: Condition
version: 0.1.0
variable: number
operator: in
value: &id002
value:
type: list
value:
- type: int
Expand All @@ -19,53 +29,59 @@ else:
value: 2
- type: int
value: 3
variable: number
metadata:
created: '2023-12-14 21:27:01.828282'
id: 00757c4b-cae1-4b9c-8480-927a48bcc4a8
name: Nested rule
parent_id: null
required_context_parameters: []
type: Rule
version: 0.1.0
then:
result:
xyz:
type: str
value: Condition met
if:
and:
- condition:
metadata: *id001
operator: in
value: *id002
variable: number
- condition:
metadata:
created: '2023-12-14 21:27:01.828252'
id: b31483ed-e103-474f-b04e-70b2aad71beb
version: 0.1.0
type: Condition
id: c8de2c87-eb3d-4f1f-b0ec-5bf5d77ce424
created: '2023-12-15 04:28:40.251982'
required_context_parameters:
- number
type: Condition
version: 0.1.0
variable: number
operator: '='
value:
type: int
value: 1
variable: number
metadata:
created: '2023-12-14 21:27:01.828293'
id: cfb77a2b-a05d-4f9d-be9d-ce442c51b624
name: Complex rule
parent_id: null
required_context_parameters: []
type: Rule
version: 0.1.0
then:
result:
result:
type: variable
value: xyz
xyz:
type: str
value: Condition met
result:
type: variable
value: xyz
else:
metadata:
version: 0.1.0
type: Rule
id: b3e968cc-ff1d-4fe2-a720-aa3b0ebf0548
created: '2023-12-15 04:28:40.252036'
required_context_parameters:
- number
name: Nested rule
parent_id: null
if:
condition:
metadata:
version: 0.1.0
type: Condition
id: 78f77078-44eb-42c2-9dbb-21fa2248647d
created: '2023-12-15 04:28:40.251929'
required_context_parameters:
- number
variable: number
operator: in
value:
type: list
value:
- type: int
value: 1
- type: int
value: 2
- type: int
value: 3
then:
result:
xyz:
type: str
value: Condition met

0 comments on commit 46ce6ea

Please sign in to comment.