Metadata-Version: 2.1
Name: boolrule
Version: 0.3.3
Summary: Simple boolean expression evaluation engine
Home-page: https://github.com/tailsdotcom/boolrule
Author: Steve Webster
Author-email: spjwebster@gmail.com
License: MIT license
Keywords: boolrule boolean expression
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Topic :: Text Processing :: General
License-File: LICENSE
License-File: AUTHORS.rst

========
boolrule
========

.. image:: https://img.shields.io/pypi/v/boolrule.svg
        :target: https://pypi.python.org/pypi/boolrule

.. image:: https://github.com/tailsdotcom/boolrule/actions/workflows/ci.yml/badge.svg
        :target: https://github.com/tailsdotcom/boolrule/actions/workflows/ci.yml

.. image:: https://readthedocs.org/projects/boolrule/badge/?version=latest
        :target: https://boolrule.readthedocs.io/en/latest/?badge=latest

Simple boolean expression evaluation engine.

* Free software: MIT license
* Documentation: https://boolrule.readthedocs.io.


Features
========

Compare simple boolean statements::

 >>> rule = BoolRule('5 > 3')
 >>> rule.test()
 True
 >>> rule = BoolRule('5 < 3')
 >>> rule.test()
 False


Evaluate boolean statements against a context dict::

 >>> can_buy_beer = BoolRule('user.age_years >= 18')
 >>> can_buy_beer.test({'user':{'age_years': 12}})
 False
 >>> can_buy_beer.test({'user':{'age_years': 20}})
 True

Combine conditions with and and or operators to produce complex expressions::

 >>> is_hipster = BoolRule('address.postcode.outcode in ("E1","E2") or user.has_beard = true')
 >>> address = {
 >>>   'postcode': {
 >>>      'outcode': 'E1'
 >>>   }
 >>> }
 >>> is_hipster.test({'has_beard': False, 'address': address})
 True


Credits
=======

Made possible by the excellent pyparsing_ library.

This package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.

.. _pyparsing: http://pyparsing.wikispaces.com/
.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage



=======
History
=======

0.3.3 (2021-07-15)

* Upgrade dependencies.


0.3.2 (2020-09-23)
==================

* Add Type hinting.


0.3.1 (2020-09-09)
==================

* Raise an exception when the whole expression cannot be parsed. Previous behaviour would discard the segment
  that didn't match the expression grammar.


0.3.0 (2018-01-15)
==================

* Add None type and is/isnot operators (contributed by ocurero)


0.2.0 (2016-10-27)
==================

* Fixed error caused by refactor from internal codebase that was preventing deep context level values from being
  referenced in a substitution value


0.1.2 (2016-09-30)
==================

* Improved documentation


0.1.1 (2016-09-30)
==================

* Made ``context`` optional
* Improved documentation


0.1.0 (2016-09-30)
==================

* First release on PyPI.


