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