|
@@ -1,4 +1,5 @@
|
|
|
import functools
|
|
import functools
|
|
|
|
|
+import re
|
|
|
|
|
|
|
|
__all__ = (
|
|
__all__ = (
|
|
|
'Condition',
|
|
'Condition',
|
|
@@ -32,13 +33,14 @@ class Condition:
|
|
|
LTE = 'lte'
|
|
LTE = 'lte'
|
|
|
IN = 'in'
|
|
IN = 'in'
|
|
|
CONTAINS = 'contains'
|
|
CONTAINS = 'contains'
|
|
|
|
|
+ REGEX = 'regex'
|
|
|
|
|
|
|
|
OPERATORS = (
|
|
OPERATORS = (
|
|
|
- EQ, GT, GTE, LT, LTE, IN, CONTAINS
|
|
|
|
|
|
|
+ EQ, GT, GTE, LT, LTE, IN, CONTAINS, REGEX
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
TYPES = {
|
|
TYPES = {
|
|
|
- str: (EQ, CONTAINS),
|
|
|
|
|
|
|
+ str: (EQ, CONTAINS, REGEX),
|
|
|
bool: (EQ, CONTAINS),
|
|
bool: (EQ, CONTAINS),
|
|
|
int: (EQ, GT, GTE, LT, LTE, CONTAINS),
|
|
int: (EQ, GT, GTE, LT, LTE, CONTAINS),
|
|
|
float: (EQ, GT, GTE, LT, LTE, CONTAINS),
|
|
float: (EQ, GT, GTE, LT, LTE, CONTAINS),
|
|
@@ -99,6 +101,11 @@ class Condition:
|
|
|
def eval_contains(self, value):
|
|
def eval_contains(self, value):
|
|
|
return self.value in value
|
|
return self.value in value
|
|
|
|
|
|
|
|
|
|
+ # Regular expressions
|
|
|
|
|
+
|
|
|
|
|
+ def eval_regex(self, value):
|
|
|
|
|
+ return re.match(self.value, value) is not None
|
|
|
|
|
+
|
|
|
|
|
|
|
|
class ConditionSet:
|
|
class ConditionSet:
|
|
|
"""
|
|
"""
|