56 lines
2.0 KiB
Python
56 lines
2.0 KiB
Python
from constants import Constants
|
|
|
|
|
|
class ACFValue:
|
|
"""Handle complex/multiple ACF values."""
|
|
|
|
def __init__(self, value):
|
|
"""Given a string describing an acf value, build an object with the
|
|
following attrributes:
|
|
- is_numeric: whether the value is a number or a string;
|
|
- numeric_value: the numeric value (if any, zero otherwise);
|
|
- unknown: whether the value is unknown."""
|
|
if value == Constants.UNKNOWN:
|
|
self._value = value
|
|
self._description = ""
|
|
self._string = self._value
|
|
self.is_numeric = False
|
|
self.unknown = True
|
|
self.numeric_value = 0.0
|
|
else:
|
|
self.unknown = False
|
|
if Constants.ACF_SEPARATOR in value:
|
|
description, acf_value = value.split(Constants.ACF_SEPARATOR)
|
|
self._description = description
|
|
self._value = acf_value
|
|
self._string = f"{self._description}: {self._value}"
|
|
else:
|
|
self._description = ""
|
|
self._value = value
|
|
self._string = self._value
|
|
if self._value.isdigit():
|
|
self.numeric_value = float(self._value)
|
|
self.is_numeric = True
|
|
self._string += " ms"
|
|
else:
|
|
self.is_numeric = False
|
|
self.numeric_value = 0.0
|
|
|
|
@classmethod
|
|
def list_from_series(cls, series):
|
|
"""Parse all acf values from the database.
|
|
|
|
Accept an iterable of ACFValues.
|
|
Return a list of lists of ACFValues."""
|
|
entries = []
|
|
for entry in series:
|
|
entries.append([
|
|
cls(value.rstrip('ms').strip()) for value in entry.split(Constants.FIELD_SEPARATOR)
|
|
])
|
|
return entries
|
|
|
|
@staticmethod
|
|
def concat_strings(acf_list_values):
|
|
"""Concatenate a list of ACFValues to be displayed."""
|
|
return '\n'.join(s._string for s in acf_list_values)
|