44 lines
941 B
Python
44 lines
941 B
Python
|
"""
|
||
|
Pydantic representation of database contents.
|
||
|
"""
|
||
|
|
||
|
from __future__ import annotations
|
||
|
|
||
|
from enum import Enum
|
||
|
|
||
|
from .. import models
|
||
|
|
||
|
|
||
|
class UserCapability(Enum):
|
||
|
admin = "admin"
|
||
|
login = "login"
|
||
|
issue = "issue"
|
||
|
renew = "renew"
|
||
|
|
||
|
def __repr__(self) -> str:
|
||
|
return self.value
|
||
|
|
||
|
@classmethod
|
||
|
def from_value(cls, value) -> UserCapability:
|
||
|
"""
|
||
|
Create UserCapability from various formats
|
||
|
"""
|
||
|
|
||
|
if isinstance(value, cls):
|
||
|
# value is already a UserCapability, use that
|
||
|
return value
|
||
|
|
||
|
elif isinstance(value, models.UserCapability):
|
||
|
# create from db format
|
||
|
return cls(value.capability)
|
||
|
|
||
|
else:
|
||
|
# create from string representation
|
||
|
return cls(str(value))
|
||
|
|
||
|
@property
|
||
|
def model(self) -> models.UserCapability:
|
||
|
return models.UserCapability(
|
||
|
capability=self.value,
|
||
|
)
|