from enum import Enum from sqlalchemy import CHAR, TypeDecorator from sqlalchemy.dialects.postgresql import UUID class CreatedByRole(Enum): """ Enum class for createdByRole """ ACCOUNT = "account" END_USER = "end_user" @classmethod def value_of(cls, value: str) -> 'CreatedByRole': """ Get value of given mode. :param value: mode value :return: mode """ for role in cls: if role.value == value: return role raise ValueError(f'invalid createdByRole value {value}') class CreatedFrom(Enum): """ Enum class for createdFrom """ SERVICE_API = "service-api" WEB_APP = "web-app" EXPLORE = "explore" @classmethod def value_of(cls, value: str) -> 'CreatedFrom': """ Get value of given mode. :param value: mode value :return: mode """ for role in cls: if role.value == value: return role raise ValueError(f'invalid createdFrom value {value}') class StringUUID(TypeDecorator): impl = CHAR cache_ok = True def process_bind_param(self, value, dialect): if value is None: return value elif dialect.name == 'postgresql': return str(value) else: return value.hex def load_dialect_impl(self, dialect): if dialect.name == 'postgresql': return dialect.type_descriptor(UUID()) else: return dialect.type_descriptor(CHAR(36)) def process_result_value(self, value, dialect): if value is None: return value return str(value)