From 9d6bdd60c8f66c9c05733df05c5263abd62e395f Mon Sep 17 00:00:00 2001 From: Conrad Date: Mon, 1 Apr 2024 18:37:33 +0200 Subject: [PATCH] Added base model --- creyPY/fastapi/crud.py | 4 +++- creyPY/fastapi/models/base.py | 25 +++++++++++++++++++++++++ setup.py | 2 +- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/creyPY/fastapi/crud.py b/creyPY/fastapi/crud.py index 34a9a01..18ebc52 100644 --- a/creyPY/fastapi/crud.py +++ b/creyPY/fastapi/crud.py @@ -5,7 +5,9 @@ from fastapi import HTTPException from pydantic import BaseModel from sqlalchemy.orm import Session -T = TypeVar("T") # TODO: bound=Base +from .models.base import Base + +T = TypeVar("T", bound=Base) def get_object_or_404(db_class: Type[T], id: UUID | str, db: Session, expunge: bool = False) -> T: diff --git a/creyPY/fastapi/models/base.py b/creyPY/fastapi/models/base.py index e69de29..780cf80 100644 --- a/creyPY/fastapi/models/base.py +++ b/creyPY/fastapi/models/base.py @@ -0,0 +1,25 @@ +import uuid +from datetime import datetime + +from sqlalchemy import Column, DateTime, String +from sqlalchemy.dialects.postgresql import UUID +from sqlalchemy.ext.declarative import declared_attr +from sqlalchemy.orm import as_declarative +from sqlalchemy.sql import func + + +@as_declarative() +class Base: + __abstract__ = True + # Primary key as uuid + id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) + created_at = Column(DateTime(timezone=True), server_default=func.now()) + updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + created_by_id = Column(String) + + __name__: str + + # Generate __tablename__ automatically + @declared_attr + def __tablename__(cls) -> str: + return cls.__name__.lower() diff --git a/setup.py b/setup.py index 30933e0..1bcbaf9 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import find_packages, setup setup( name="creyPY", - version="0.0.7", + version="0.0.8", description="My collection of Python and FastAPI shortcuts etc.", author="Conrad Großer", author_email="conrad@noah.tech",