common.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import math
  2. from dataclasses import fields
  3. from structures.common import BaseMeasurement
  4. from structures.measurement import Measurement24v, Measurement480v
  5. from structures.plant import S7State, CompactLogixState
  6. from structures.correlated import CorrelatedMeasurements
  7. class MatchSeries:
  8. def __init__(self, series) -> None:
  9. self._series = series
  10. def get_series(self, measurement: BaseMeasurement):
  11. if measurement.series == self._series:
  12. return measurement
  13. else:
  14. # find the series in the data
  15. for key, value in measurement.__dict__.items():
  16. if isinstance(value, BaseMeasurement) and value.series == self._series:
  17. return value
  18. def set_series(self, measurement: BaseMeasurement, series: BaseMeasurement):
  19. if measurement.series == self._series:
  20. return series
  21. else:
  22. # find the series in the data
  23. for key, value in measurement.__dict__.items():
  24. if isinstance(value, BaseMeasurement) and value.series == self._series:
  25. return type(measurement)(**{**measurement.__dict__, key: series})
  26. ALLOWED_GLOBALS = {
  27. 'sum': sum,
  28. 'min': min,
  29. 'max': max,
  30. 'avg': lambda x: sum(x) / len(x),
  31. 'count': len,
  32. 'last': lambda x: x[-1],
  33. }
  34. ALLOWED_NAMES = \
  35. [x.name for x in fields(Measurement24v)] + \
  36. [x.name for x in fields(Measurement480v)] + \
  37. [x.name for x in fields(CompactLogixState)] + \
  38. [x.name for x in fields(S7State)] + \
  39. [x.name for x in fields(CorrelatedMeasurements)] + \
  40. list(ALLOWED_GLOBALS.keys())
  41. ALLOWED_NAMES = set([name for name in ALLOWED_NAMES if not name.startswith('_')])