Files
router/router/compiler.py
2024-02-04 03:53:39 +03:00

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']
)