from .base import AttributeGetter from utils import timezone class FixedValue(AttributeGetter): mandatory = ['value'] def __init__(self, value=None, *args, **kwargs): self.value = value super().__init__(*args, **kwargs) class NullValue(AttributeGetter): pass class ThisModelValue(AttributeGetter): mandatory = ['db_column'] def __init__(self, db_column=None, db_alias=None, *args, **kwargs): self.db_column = db_column self.db_alias = db_column if not db_alias else db_alias super().__init__(*args, **kwargs) def get_column(self): if self.db_column != self.db_alias: return f'{self.db_column} AS {self.db_alias}' return self.db_column class ThisModelDateTimeValue(ThisModelValue): def get_value_serialized(self): return timezone.make_aware(self.value).isoformat() class ThisModelDecimalValue(ThisModelValue): mandatory = ['db_column', 'decimal_places'] def __init__(self, db_column=None, decimal_places=None, *args, **kwargs): self.db_column = db_column self.decimal_places = decimal_places super().__init__(db_column=db_column, *args, **kwargs) def get_value_serialized(self): return round(float(self.value or 0), self.decimal_places) class ThisModelValueCustomSerializer(ThisModelValue): mandatory = ['db_column', 'value_serialized'] def __init__(self, db_column=None, value_serialized=None, *args, **kwargs): self.db_column = db_column self.value_serialized = value_serialized super().__init__(db_column=db_column, *args, **kwargs) def get_value_serialized(self): return self.value_serialized(self.value) class ThisModelRawResultCustomSerializer(ThisModelValue): mandatory = ['db_column', 'value_serialized'] def __init__(self, db_column=None, value_serialized=None, *args, **kwargs): self.raw_result = None self.db_column = db_column self.value_serialized = value_serialized super().__init__(db_column=db_column, *args, **kwargs) def get_value_serialized(self): return self.value_serialized(self.raw_result)