mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-24 17:38:37 -06:00
Add regex condition op
This commit is contained in:
parent
2423e0872f
commit
0d84338e28
@ -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:
|
||||||
"""
|
"""
|
||||||
|
@ -95,6 +95,16 @@ class ConditionTestCase(TestCase):
|
|||||||
self.assertFalse(c.eval({'x': [1, 2, 3]}))
|
self.assertFalse(c.eval({'x': [1, 2, 3]}))
|
||||||
self.assertTrue(c.eval({'x': [2, 3, 4]}))
|
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):
|
class ConditionSetTest(TestCase):
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user