allow regexp patterns in query

This commit is contained in:
2025-01-16 10:46:18 +01:00
parent 9208ff993d
commit 3266d2ab61

View File

@ -43,11 +43,17 @@ def negnull2none(v):
return None if v == 0 and copysign(1, v) == -1 else v return None if v == 0 and copysign(1, v) == -1 else v
class RegExp(str):
pass
def wildcard_filter(key, names): def wildcard_filter(key, names):
patterns = [] patterns = []
for name in names: for pattern in names:
patterns.append('[^.]*'.join(re.escape(v) for v in name.split('*'))) if isinstance(pattern, RegExp):
pattern = '|'.join(patterns) patterns.append(pattern)
else:
patterns.append('[^.]*'.join(re.escape(v) for v in pattern.split('*')))
return f'|> filter(fn:(r) => r.{key} =~ /^({pattern})$/)' return f'|> filter(fn:(r) => r.{key} =~ /^({pattern})$/)'
@ -236,7 +242,7 @@ class InfluxDBWrapper:
columns[key] = crit columns[key] = crit
continue continue
if isinstance(crit, str): if isinstance(crit, str):
if '*' in crit: if isinstance(crit, RegExp) or '*' in crit:
keynames.append(key) keynames.append(key)
msg.append(wildcard_filter(key, [crit])) msg.append(wildcard_filter(key, [crit]))
continue continue