71 lines
2.1 KiB
Python
71 lines
2.1 KiB
Python
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)
|