Giter Club home page Giter Club logo

funnel-rules-engine's Introduction

Rules Engine

PyPI PyPI - Python Version PyPI - Status PyPI - License Python package

A simple, generic rules engine. Inspired by Martin Fowler's 2009 blog post.

This package was extracted from Funnel's production code and made open source.

For the story behind its inception, raison d'être, and overall concept, you can watch the talk Rules Rule held by Lennart Fridén at PyCon Sweden 2021.

Installation

Install the package funnel_rules_engine version 1.3+ from PyPi. The recommended requirements.txt line is funnel_rules_engine~=1.3.

Current Functionality

Rule

A combination of a condition and an action, both of which are callables such as functions or lambdas. The callables must have an arity of one. If the conditional returns true given a single object, the action will be called with the same object as its argument.

When creating a rule, it can also be tagged with a list of tags (see RulesEngine.reject and RulesEngine.select).

Otherwise

Special case of Rule where the action always fires. Suitable as a catch-all last rule.

NoAction

Special case of Rule where None is returned if the condition is met. Useful for halting the execution of .run()

RulesEngine

A generic rules engine that accepts a list of Rules and some input to apply the rules to. The rules engine can either apply the first rule that matches (run) or all the rules that matches (run_all). In addition, rules can be evaluated and executed in parallel (run_all_in_parallel). The latter two cases can optionally be lazily executed by returning a generator rather than a list as the result.

For more on rules engines, see Martin Fowler's blog post.

run

Only apply the first rule that matches and return its result. This is comparable to the behaviour of a structured switch statement or an arbitrary conditional statement.

run_all

Apply all rules that match. The result is returned as a list, or as a generator if the optional parameter lazy is passed as True.

run_all_in_parallel

Evaluate and apply all rules in parallel. The result is returned as a list, or as a generator if the optional parameter lazy is passed as True.

select and reject

These methods return a new rules engine containing the rules matching/not matching the given tags.

when and then

These are convenience functions for creating simple conditions and actions. They both accept a single value that in the case of when will be used to check equality with the passed state and in the case of then will be returned, ignoring the passed state.

funnel-rules-engine's People

Contributors

devl avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.