do always sort

This commit is contained in:
l_samenv
2025-02-11 15:59:27 +01:00
parent ce205f47a2
commit 1712415f20
2 changed files with 13 additions and 14 deletions

View File

@ -292,7 +292,7 @@ class InfluxDBWrapper:
print(msg)
reader = self._client.query_api().query_csv(msg)
sort = False
print('CSV')
converters = None
group = None
column_names = None
@ -303,6 +303,7 @@ class InfluxDBWrapper:
for row in reader:
if not row:
continue
print(row)
if row[0]:
if row[0] == '#datatype':
converters = {i: CONVERTER.get(d) for i, d in enumerate(row) if i > 2}
@ -311,6 +312,7 @@ class InfluxDBWrapper:
group = row
continue
if column_names is None:
print('COL', row)
column_names = row
keys = {}
for col, (name, grp) in enumerate(zip(column_names, group)):
@ -319,8 +321,6 @@ class InfluxDBWrapper:
# if name in keynames or (columns is None and name not in dropcols):
if name in keynames or columns is None:
keys[col] = converters.pop(col)
else:
sort = True
valuecls = NamedTuple([row[i] for i in converters])
keycls = NamedTuple([row[i] for i in keys])
continue
@ -328,23 +328,22 @@ class InfluxDBWrapper:
# new table, new key
table = row[2]
key = keycls(f(row[i]) for i, f in keys.items())
print('new table', table, key)
if result.get(key) is None:
result[key] = []
elif not sort:
# this should not happen
sort = True
result[key].append(valuecls(f(row[i]) for i, f in converters.items()))
if last:
print('LAST')
for key, table in result.items():
result[key], = table
elif sort:
else:
for table in result.values():
table.sort()
return result
def curves(self, start=None, stop=None, measurement=None, field='float', interval=None,
add_prev=3600, add_end=False, **tags):
def curves(self, start=None, stop=None, measurement=('*.value', '*.target'), field='float',
interval=None, add_prev=3600, add_end=True, **tags):
"""get curves
:param start: start time (default: one month ago)
@ -359,14 +358,15 @@ class InfluxDBWrapper:
where <tuple of keys> and <row> are NamedTuple
<row> is (<timestamp>, <value>)
when field='float' (the default), the returned values are either a floats or None
when _field='float' (the default), the returned values are either a floats or None
"""
for key, val in zip(('_measurement', '_field'), (measurement, field)):
tags.setdefault(key, val)
tags.setdefault('_measurement', measurement)
tags.setdefault('_field', field)
start, stop = abs_range(start, stop)
rstart, rstop = round_range(start, stop, interval)
if rstart < rstop:
result = self.query(rstart, rstop, interval, columns=[], **tags)
result = self.query(rstart, rstop, interval, columns=None, **tags)
# result = self.query(rstart, rstop, interval, columns=['stream', 'device'], **tags)
else:
result = {}
if add_prev:

1
t.py
View File

@ -1,6 +1,5 @@
import time
import numpy as np
import pandas as pd
from influx import InfluxDBWrapper, NamedTuple, RegExp
DAY = 24 * 3600