From 3266d2ab61659f539c8dfe9606e2e352b2d5663b Mon Sep 17 00:00:00 2001 From: Markus Zolliker Date: Thu, 16 Jan 2025 10:46:18 +0100 Subject: [PATCH] allow regexp patterns in query --- influx.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/influx.py b/influx.py index aa97fca..9f49a93 100644 --- a/influx.py +++ b/influx.py @@ -43,11 +43,17 @@ def negnull2none(v): return None if v == 0 and copysign(1, v) == -1 else v +class RegExp(str): + pass + + def wildcard_filter(key, names): patterns = [] - for name in names: - patterns.append('[^.]*'.join(re.escape(v) for v in name.split('*'))) - pattern = '|'.join(patterns) + for pattern in names: + if isinstance(pattern, RegExp): + patterns.append(pattern) + else: + patterns.append('[^.]*'.join(re.escape(v) for v in pattern.split('*'))) return f'|> filter(fn:(r) => r.{key} =~ /^({pattern})$/)' @@ -236,7 +242,7 @@ class InfluxDBWrapper: columns[key] = crit continue if isinstance(crit, str): - if '*' in crit: + if isinstance(crit, RegExp) or '*' in crit: keynames.append(key) msg.append(wildcard_filter(key, [crit])) continue