Coverage for /usr/lib/python3.10/site-packages/hyd/backend/util/models.py: 95%
22 statements
« prev ^ index » next coverage.py v7.0.3, created at 2023-01-05 16:38 +0000
« prev ^ index » next coverage.py v7.0.3, created at 2023-01-05 16:38 +0000
1import datetime as dt
3from fastapi import status
4from pydantic.types import conint, constr
5from sqlalchemy import Column, DateTime, event
6from sqlalchemy.orm import Mapped
8from hyd.backend.util.const import MAX_LENGTH_STR_ID
10####################################################################################################
11#### pydantic types
12####################################################################################################
15PrimaryKey = conint(gt=0, lt=2147483647)
16NameStr = constr(
17 regex=r"^(?!\s*$).+",
18 strip_whitespace=True,
19 min_length=3,
20 max_length=MAX_LENGTH_STR_ID,
21)
22CommentStr = constr(
23 strip_whitespace=True,
24 min_length=0,
25 max_length=MAX_LENGTH_STR_ID,
26)
28####################################################################################################
29#### SQLAlchemy table mixins
30####################################################################################################
33class TimeStampMixin(object):
34 """Timestamping mixin"""
36 created_at: Mapped[dt.datetime] = Column(DateTime, default=dt.datetime.utcnow)
37 updated_at: Mapped[dt.datetime | None] = Column(DateTime, default=None)
38 # NOTE maybe this a better solution https://stackoverflow.com/questions/3923910/sqlalchemy-move-mixin-columns-to-end
39 created_at._creation_order = 9998
40 updated_at._creation_order = 9998
42 @staticmethod
43 def _updated_at(mapper, connection, target):
44 target.updated_at = dt.datetime.utcnow()
46 @classmethod
47 def __declare_last__(cls):
48 event.listen(cls, "before_update", cls._updated_at)
51####################################################################################################
52#### OpenAPI definitions
53####################################################################################################
56DETAIL_STR = {"content": {"application/json": {"example": {"detail": "string"}}}}
58BASE_API_RESPONSE_SCHEMA = {
59 status.HTTP_500_INTERNAL_SERVER_ERROR: {
60 "content": {"application/json": {"example": "Internal Server Error"}},
61 },
62 status.HTTP_401_UNAUTHORIZED: DETAIL_STR,
63}