Syntax Sugar / DSL

Rulez provide several syntax sugar to help with constructing comparison operations.

Pythonic Operation

You can easily create a comparison operation using rulez.field. Eg:

FieldGetter.__call__(key)
>>> import rulez

>>> rulez.field('field1')
{ 'operator': 'get', 'value': 'field1' }

>>> rulez.field('field1') == 'myvalue'
{ 'field': 'field1', 'operator': '==', 'value': 'myvalue' }

>>> rulez.field('field1') == rulez.field('field2')
{ 'field': 'field1', 'operator': '==',
  'value': {
        'operator': 'get',
        'value': 'field2' }}

>>> rulez.field('field1') & rulez.field('field2')
{'operator': 'and',
 'value': [
     {'operator': 'get', 'value': 'field1'},
     {'operator': 'get', 'value': 'field2'}]}

>>> rulez.field('field1') | rulez.field('field2')
{'operator': 'or',
 'value': [
     {'operator': 'get', 'value': 'field1'},
     {'operator': 'get', 'value': 'field2'}]}
FieldGetter.__getitem__(key)
>>> import rulez

>>> rulez.field['field1']
{ 'operator': 'get', 'value': 'field1' }

>>> rulez.field['field1'] == 'myvalue'
{ 'field': 'field1', 'operator': '==', 'value': 'myvalue' }

>>> rulez.field['field1'] == rulez.field['field2']
{ 'field': 'field1', 'operator': '==',
  'value': {
        'operator': 'get',
        'value': 'field2' }}

>>> rulez.field['field1'] & rulez.field['field2']
{'operator': 'and',
 'value': [
     {'operator': 'get', 'value': 'field1'},
     {'operator': 'get', 'value': 'field2'}]}

>>> rulez.field['field1'] | rulez.field['field2']
{'operator': 'or',
 'value': [
     {'operator': 'get', 'value': 'field1'},
     {'operator': 'get', 'value': 'field2'}]}

Note

rulez.field[key] is deprecated at version 0.1.4 in favor of rulez.field(key).

Boolean DSL Statement

Comparison operation can also be created from string using rulez.parse_dsl

rulez.parse_dsl(s, allowed_operators: Optional[List[str]] = None) → rulez.dsl.Operation

Parse string and output comparison operation.

Parameters:
  • s – query string
  • allowed_operators (typing.Optional[typing.List[str]]) – List of allowed operators
>>> import rulez
>>> rulez.parse_dsl("field1 == field2")
{'field': 'field1', 'operator': '==',
 'value': {'operator': 'get',
           'value': 'field2'}}

>>> rulez.parse_dsl("field1 == 'hello world'")
{'field': 'field1', 'operator': '==',
 'value': 'hello world'}

>>> rulez.parse_dsl("(field1 == field2) or (field3 == 'value1')")
{'operator': 'or',
 'value': [{'field': 'field1', 'operator': '==',
            'value': {'operator': 'get', 'value': 'field2'}},
           {'field': 'field3', 'operator': '==',
             'value': 'value1'}]}

>>> rulez.parse_dsl('field1 in ["a","b","c"]')
{'field': 'field1', 'operator': 'in', 'value': ['a', 'b', 'c']}

>>> rulez.parse_dsl('field1 in in [1.0,2.0,3.0]')
{'field': 'field1', 'operator': 'in', 'value': [1.0, 2.0, 3.0]}