summaryrefslogtreecommitdiffstats
path: root/glucometerutils/common.py
diff options
context:
space:
mode:
Diffstat (limited to 'glucometerutils/common.py')
-rw-r--r--glucometerutils/common.py87
1 files changed, 53 insertions, 34 deletions
diff --git a/glucometerutils/common.py b/glucometerutils/common.py
index e7be7ec..6576ebd 100644
--- a/glucometerutils/common.py
+++ b/glucometerutils/common.py
@@ -10,21 +10,24 @@ from typing import Optional, Sequence
import attr
+
class Unit(enum.Enum):
- MG_DL = 'mg/dL'
- MMOL_L = 'mmol/L'
+ MG_DL = "mg/dL"
+ MMOL_L = "mmol/L"
+
# Constants for meal information
class Meal(enum.Enum):
- NONE = ''
- BEFORE = 'Before Meal'
- AFTER = 'After Meal'
+ NONE = ""
+ BEFORE = "Before Meal"
+ AFTER = "After Meal"
+
# Constants for measure method
class MeasurementMethod(enum.Enum):
- BLOOD_SAMPLE = 'blood sample'
- CGM = 'CGM' # Continuous Glucose Monitoring
- TIME = 'time'
+ BLOOD_SAMPLE = "blood sample"
+ CGM = "CGM" # Continuous Glucose Monitoring
+ TIME = "time"
def convert_glucose_unit(value, from_unit, to_unit):
@@ -50,19 +53,19 @@ def convert_glucose_unit(value, from_unit, to_unit):
return round(value * 18.0, 0)
+
@attr.s
class GlucoseReading:
timestamp = attr.ib(type=datetime.datetime)
value = attr.ib(type=float)
- meal = attr.ib(
- default=Meal.NONE, validator=attr.validators.in_(Meal),
- type=Meal)
- comment = attr.ib(default='', type=str)
+ meal = attr.ib(default=Meal.NONE, validator=attr.validators.in_(Meal), type=Meal)
+ comment = attr.ib(default="", type=str)
measure_method = attr.ib(
default=MeasurementMethod.BLOOD_SAMPLE,
validator=attr.validators.in_(MeasurementMethod),
- type=MeasurementMethod)
+ type=MeasurementMethod,
+ )
extra_data = attr.ib(factory=dict)
def get_value_as(self, to_unit):
@@ -78,15 +81,20 @@ class GlucoseReading:
# type: (Unit) -> str
"""Returns the reading as a formatted comma-separated value string."""
return '"%s","%.2f","%s","%s","%s"' % (
- self.timestamp, self.get_value_as(unit), self.meal.value,
- self.measure_method.value, self.comment)
+ self.timestamp,
+ self.get_value_as(unit),
+ self.meal.value,
+ self.measure_method.value,
+ self.comment,
+ )
+
@attr.s
class KetoneReading:
timestamp = attr.ib(type=datetime.datetime)
value = attr.ib(type=float)
- comment = attr.ib(default='', type=str)
+ comment = attr.ib(default="", type=str)
extra_data = attr.ib(factory=dict)
def as_csv(self, unit):
@@ -94,23 +102,28 @@ class KetoneReading:
del unit # Unused for Ketone readings.
return '"%s","%.2f","%s","%s"' % (
- self.timestamp, self.value, MeasurementMethod.BLOOD_SAMPLE.value,
- self.comment)
+ self.timestamp,
+ self.value,
+ MeasurementMethod.BLOOD_SAMPLE.value,
+ self.comment,
+ )
+
@attr.s
class TimeAdjustment:
timestamp = attr.ib() # type: datetime.datetime
old_timestamp = attr.ib() # type: datetime.datetime
measure_method = attr.ib(
- default=MeasurementMethod.TIME,
- validator=attr.validators.in_(
- MeasurementMethod)) # type: MeasurementMethod
+ default=MeasurementMethod.TIME, validator=attr.validators.in_(MeasurementMethod)
+ ) # type: MeasurementMethod
extra_data = attr.ib(factory=dict)
def as_csv(self, unit):
del unit
return '"%s","","%s","%s"' % (
- self.timestamp, self.measure_method.value, self.old_timestamp
+ self.timestamp,
+ self.measure_method.value,
+ self.old_timestamp,
)
@@ -126,32 +139,38 @@ class MeterInfo:
the device. It can include hardware and software version.
native_unit: One of the Unit values to identify the meter native unit.
"""
+
model = attr.ib(type=str)
- serial_number = attr.ib(default='N/A', type=str)
+ serial_number = attr.ib(default="N/A", type=str)
version_info = attr.ib(default=(), type=Sequence[str])
native_unit = attr.ib(
- default=Unit.MG_DL, validator=attr.validators.in_(Unit),
- type=Unit)
+ default=Unit.MG_DL, validator=attr.validators.in_(Unit), type=Unit
+ )
patient_name = attr.ib(default=None, type=Optional[str])
def __str__(self):
- version_information_string = 'N/A'
+ version_information_string = "N/A"
if self.version_info:
- version_information_string = '\n '.join(
- self.version_info).strip()
+ version_information_string = "\n ".join(self.version_info).strip()
- base_output = textwrap.dedent("""\
+ base_output = textwrap.dedent(
+ """\
{model}
Serial Number: {serial_number}
Version Information:
{version_information_string}
Native Unit: {native_unit}
- """).format(model=self.model, serial_number=self.serial_number,
- version_information_string=version_information_string,
- native_unit=self.native_unit.value)
+ """
+ ).format(
+ model=self.model,
+ serial_number=self.serial_number,
+ version_information_string=version_information_string,
+ native_unit=self.native_unit.value,
+ )
if self.patient_name != None:
- base_output += 'Patient Name: {patient_name}\n'.format(
- patient_name=self.patient_name)
+ base_output += "Patient Name: {patient_name}\n".format(
+ patient_name=self.patient_name
+ )
return base_output