69 lines
1.4 KiB
Python
69 lines
1.4 KiB
Python
from abc import ABC, abstractmethod
|
|
import json
|
|
|
|
|
|
class Converter(ABC):
|
|
@abstractmethod
|
|
def convert_to_form(self, value):
|
|
pass
|
|
|
|
@abstractmethod
|
|
def convert_from_form(self, value):
|
|
pass
|
|
|
|
|
|
class NullConverter(Converter):
|
|
def convert_to_form(self, value):
|
|
return value
|
|
|
|
def convert_from_form(self, value):
|
|
return value
|
|
|
|
|
|
class OptionalConverter(Converter):
|
|
"""
|
|
Maps None to an empty string, and reverse
|
|
useful for optional fields
|
|
"""
|
|
|
|
def convert_to_form(self, value):
|
|
return "" if value is None else value
|
|
|
|
def convert_from_form(self, value):
|
|
return value if value else None
|
|
|
|
|
|
class IntConverter(Converter):
|
|
def convert_to_form(self, value):
|
|
return str(value)
|
|
|
|
def convert_from_form(self, value):
|
|
return int(value)
|
|
|
|
|
|
class FloatConverter(Converter):
|
|
def convert_to_form(self, value):
|
|
return str(value)
|
|
|
|
def convert_from_form(self, value):
|
|
return float(value)
|
|
|
|
|
|
class EnumConverter(Converter):
|
|
def __init__(self, enumCls):
|
|
self.enumCls = enumCls
|
|
|
|
def convert_to_form(self, value):
|
|
return None if value is None else self.enumCls(value).name
|
|
|
|
def convert_from_form(self, value):
|
|
return self.enumCls[value].value
|
|
|
|
|
|
class JsonConverter(Converter):
|
|
def convert_to_form(self, value):
|
|
return json.dumps(value)
|
|
|
|
def convert_from_form(self, value):
|
|
return json.loads(value)
|