Skip to main content

business-rule-engine

CodeFactor Github version PyPI version Supported Python versions PyPI downloads GitHub

As a software system grows in complexity and usage, it can become burdensome if every change to the logic/behavior of the system also requires you to write and deploy new code. The goal of this business rules engine is to provide a simple interface allowing anyone to capture new rules and logic defining the behavior of a system, and a way to then process those rules on the backend.

You might, for example, find this is a useful way for analysts to define marketing logic around when certain customers or items are eligible for a discount or to automate emails after users enter a certain state or go through a particular sequence of events.

Usage

1. Define Your set of variables

Variables represent values in your system, usually the value of some particular object. You create rules by setting threshold conditions such that when a variable is computed that triggers the condition some action is taken.

params = {
    'products_in_stock': 10
}

2. Define custom functions

def order_more(items_to_order, urgent = false):
    print("you ordered {} new items".format(items_to_order))
    return items_to_order

3. Write the rules

rules = """
rule "order new items"
when
    products_in_stock < 20
then
    order_more(50)
end
"""

3. Create the parser and parse the rule

from business_rule_engine import RuleParser

parser = RuleParser()
parser.register_function(order_more)
parser.parsestr(rules)
parser.execute(params)

Supported functions

Business rule engine uses Excel like functions (thanks to formulas. So it is possible to use most of them in rules.

Multiple conditions and multiple actions

You can make multiple checks on the same params, and call multiple actions as needed:

rules = """
rule "order new items"
when
    AND(products_in_stock < 20,
    products_in_stock >= 5)
then
    order_more(50)
end

rule "order new items urgent"
when
    products_in_stock < 5,
then
    AND(order_more(10, true),
    order_more(50))
end
"""

Custom functions

You can also write your own functions to validate conditions and use other libraries functions as actions:

from business_rule_engine import RuleParser

def is_even(num):
   if (num % 2) == 0:
      return True
   return False

params = {
    'number': 10
}

rules = """
rule "check even number"
when
    is_even(number) = True
then
    print("is even")
end
"""

parser = RuleParser()
parser.register_function(is_even)
parser.register_function(print)
parser.parsestr(rules)
parser.execute(params)

Error Handling

Most of the errors are caused by missing parameters, you can handle the errors and interpret the results handling ValueError:

from business_rule_engine import RuleParser

# proposital typo 
params = {
    'produtcs_in_stock': 30
}

rules = """
rule "order new items"
when
    products_in_stock < 20
then
    order_more(50)
end
"""

parser = RuleParser()
parser.register_function(order_more)
parser.parsestr(rules)
try:
    ret = parser.execute(params)
    if ret is False:
        print("No conditions matched")
except ValueError as e:
    print(e)

Debug

To debug the rules processing, use the logging lib.

You can insert in your Python script to log to stdout:

import logging
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)

Download files

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

Source Distribution

business-rule-engine-0.0.4.tar.gz (4.6 kB view details)

Uploaded Source

Built Distribution

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

business_rule_engine-0.0.4-py3-none-any.whl (16.6 kB view details)

Uploaded Python 3

File details

Details for the file business-rule-engine-0.0.4.tar.gz.

File metadata

  • Download URL: business-rule-engine-0.0.4.tar.gz
  • Upload date:
  • Size: 4.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for business-rule-engine-0.0.4.tar.gz
Algorithm Hash digest
SHA256 d3f6be54cd070d6b7d4e76b7cc4645d1f6dd10d4f823e268d424a200fe483ca2
MD5 74cac9feb6bad2defc4eb26259c6f8e8
BLAKE2b-256 5d35561848b5a7f98ce8002063cdc7edcfac8a76c06032582aca314dd3c1f25e

See more details on using hashes here.

File details

Details for the file business_rule_engine-0.0.4-py3-none-any.whl.

File metadata

  • Download URL: business_rule_engine-0.0.4-py3-none-any.whl
  • Upload date:
  • Size: 16.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for business_rule_engine-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 df093c56df2a7053f2e1bcfe12d78e1da010ce8af91c22365e00a36837fa7450
MD5 4eedc481b8e6e7fc073ec6dc2d598b86
BLAKE2b-256 b2ec48aa530080ad486420f890390f3137a5080527d6c16e14a6e7055bbdd74d

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 Sentry Error logging StatusPage Status page