mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-23 04:22:01 -06:00
Add regex condition op
This commit is contained in:
parent
2423e0872f
commit
0d84338e28
@ -1,4 +1,5 @@
|
||||
import functools
|
||||
import re
|
||||
|
||||
__all__ = (
|
||||
'Condition',
|
||||
@ -32,13 +33,14 @@ class Condition:
|
||||
LTE = 'lte'
|
||||
IN = 'in'
|
||||
CONTAINS = 'contains'
|
||||
REGEX = 'regex'
|
||||
|
||||
OPERATORS = (
|
||||
EQ, GT, GTE, LT, LTE, IN, CONTAINS
|
||||
EQ, GT, GTE, LT, LTE, IN, CONTAINS, REGEX
|
||||
)
|
||||
|
||||
TYPES = {
|
||||
str: (EQ, CONTAINS),
|
||||
str: (EQ, CONTAINS, REGEX),
|
||||
bool: (EQ, CONTAINS),
|
||||
int: (EQ, GT, GTE, LT, LTE, CONTAINS),
|
||||
float: (EQ, GT, GTE, LT, LTE, CONTAINS),
|
||||
@ -99,6 +101,11 @@ class Condition:
|
||||
def eval_contains(self, value):
|
||||
return self.value in value
|
||||
|
||||
# Regular expressions
|
||||
|
||||
def eval_regex(self, value):
|
||||
return re.match(self.value, value) is not None
|
||||
|
||||
|
||||
class ConditionSet:
|
||||
"""
|
||||
|
@ -95,6 +95,16 @@ class ConditionTestCase(TestCase):
|
||||
self.assertFalse(c.eval({'x': [1, 2, 3]}))
|
||||
self.assertTrue(c.eval({'x': [2, 3, 4]}))
|
||||
|
||||
def test_regex(self):
|
||||
c = Condition('x', '[a-z]+', 'regex')
|
||||
self.assertTrue(c.eval({'x': 'abc'}))
|
||||
self.assertFalse(c.eval({'x': '123'}))
|
||||
|
||||
def test_regex_negated(self):
|
||||
c = Condition('x', '[a-z]+', 'regex', negate=True)
|
||||
self.assertFalse(c.eval({'x': 'abc'}))
|
||||
self.assertTrue(c.eval({'x': '123'}))
|
||||
|
||||
|
||||
class ConditionSetTest(TestCase):
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user