38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
__author__ = 'RemiZOffAlex'
|
|
__email__ = 'remizoffalex@mail.ru'
|
|
|
|
import logging
|
|
|
|
from .dsl.common import And, Equal, Or, Regex
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
class Compiler:
|
|
def __call__(self, rule):
|
|
if isinstance(rule, list):
|
|
val = []
|
|
for item in rule:
|
|
val.append(self(item))
|
|
return val
|
|
elif isinstance(rule, dict):
|
|
assert 'operator' in rule, \
|
|
'Not operator in rule: {rule}'.format(rule=rule)
|
|
if rule['operator'] == 'and':
|
|
val = self(rule['rules'])
|
|
result = And(val)
|
|
return result
|
|
elif rule['operator'] == 'or':
|
|
val = self(rule['rules'])
|
|
return Or(val)
|
|
elif rule['operator'] == 'equal':
|
|
return Equal(
|
|
key=rule['key'],
|
|
value=rule['value']
|
|
)
|
|
elif rule['operator'] == 'regex':
|
|
return Regex(
|
|
key=rule['key'],
|
|
value=rule['value']
|
|
)
|