Skip to content

Commit

Permalink
adds response checking and error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
sthulb committed May 17, 2021
1 parent 7106c48 commit 17e4c7e
Showing 1 changed file with 47 additions and 41 deletions.
88 changes: 47 additions & 41 deletions calrules/rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,58 +4,64 @@
import rule_engine

class Response(Enum):
ACCEPT = 1
MAYBE = 2
DECLINE = 3
DELETE = 4
ACCEPT = 1
MAYBE = 2
DECLINE = 3
DELETE = 4
NOOP = 5

class Rule:
def __init__(self, pattern: str, description: str, response: Response = Response.DECLINE, *message: str):
self.pattern = pattern
self.description = description
self.response = response
self.message = message
@staticmethod
def from_str(response):
return Response[response.upper()]

class RuleRuntimeError(Exception):
pass

self.rule = rule_engine.Rule(
pattern,
rule_engine.Context(default_value=None, regex_flags=re.IGNORECASE | re.MULTILINE)
)
class Rule:
def __init__(self, pattern: str, description: str, response: Response = Response.DECLINE, *message: str):
self.pattern = pattern
self.description = description
self.response = response
self.message = message

def matches(self, thing: dict) -> bool:
return self.rule.matches(thing)
self.rule = rule_engine.Rule(
pattern,
rule_engine.Context(default_value=None, regex_flags=re.IGNORECASE | re.MULTILINE)
)

def matches(self, thing: dict) -> bool:
try:
return self.rule.matches(thing)
except TypeError as e:
raise RuleRuntimeError(e)
class Rules:
@classmethod
def load(rules: list[Rule]) -> None:
return Rules(rules)
def __init__(self, rules: list[dict]):
self.load(rules)

def __init__(self, rules: list[Rule]):
self.load(rules)
def __iter__(self):
return iter(self.rules)

def __iter__(self):
return iter(self.rules)
def __next__(self):
return next(self.rules)

def __next__(self):
return next(self.rules)
def __len__(self):
return len(self.rules)

def __len__(self):
return len(self.rules)
def load(self, rules: list[dict]):
_rules = []

def load(self, rules: list[Rule]):
_rules = []
for r in rules:
rule = Rule(
pattern=r['pattern'],
description=r['description']
)

for r in rules:
rule = Rule(
pattern=r['pattern'],
description=r['description']
)
if 'message' in r:
rule.message = r['message']

if 'response' in r:
rule.decline = r['response']

if 'message' in r:
rule.decline = r['message']
if 'response' in r:
rule.response = Response.from_str(r['response'])

_rules.append(rule)
_rules.append(rule)

self.rules = _rules
self.rules = _rules

0 comments on commit 17e4c7e

Please sign in to comment.