__init__.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. from enum import Enum
  2. from sqlalchemy import CHAR, TypeDecorator
  3. from sqlalchemy.dialects.postgresql import UUID
  4. class CreatedByRole(Enum):
  5. """
  6. Enum class for createdByRole
  7. """
  8. ACCOUNT = "account"
  9. END_USER = "end_user"
  10. @classmethod
  11. def value_of(cls, value: str) -> 'CreatedByRole':
  12. """
  13. Get value of given mode.
  14. :param value: mode value
  15. :return: mode
  16. """
  17. for role in cls:
  18. if role.value == value:
  19. return role
  20. raise ValueError(f'invalid createdByRole value {value}')
  21. class CreatedFrom(Enum):
  22. """
  23. Enum class for createdFrom
  24. """
  25. SERVICE_API = "service-api"
  26. WEB_APP = "web-app"
  27. EXPLORE = "explore"
  28. @classmethod
  29. def value_of(cls, value: str) -> 'CreatedFrom':
  30. """
  31. Get value of given mode.
  32. :param value: mode value
  33. :return: mode
  34. """
  35. for role in cls:
  36. if role.value == value:
  37. return role
  38. raise ValueError(f'invalid createdFrom value {value}')
  39. class StringUUID(TypeDecorator):
  40. impl = CHAR
  41. cache_ok = True
  42. def process_bind_param(self, value, dialect):
  43. if value is None:
  44. return value
  45. elif dialect.name == 'postgresql':
  46. return str(value)
  47. else:
  48. return value.hex
  49. def load_dialect_impl(self, dialect):
  50. if dialect.name == 'postgresql':
  51. return dialect.type_descriptor(UUID())
  52. else:
  53. return dialect.type_descriptor(CHAR(36))
  54. def process_result_value(self, value, dialect):
  55. if value is None:
  56. return value
  57. return str(value)