diff --git a/pkgs/clan-cli/clan_cli/webui/api_outputs.py b/pkgs/clan-cli/clan_cli/webui/api_outputs.py index 3082b2a..f0f2632 100644 --- a/pkgs/clan-cli/clan_cli/webui/api_outputs.py +++ b/pkgs/clan-cli/clan_cli/webui/api_outputs.py @@ -1,6 +1,6 @@ from enum import Enum -from pydantic import BaseModel +from pydantic import BaseModel, Field class Status(Enum): @@ -12,3 +12,43 @@ class Status(Enum): class Machine(BaseModel): name: str status: Status + + +class RepositoryBase(BaseModel): + title: str + description: str | None = None + + +class RepositoryCreate(RepositoryBase): + pass + + +class Repository(RepositoryBase): + id: int + prod_id: str + + class Config: + orm_mode = True + + +class ProducerBase(BaseModel): + id: int + + +class ProducerCreate(ProducerBase): + jsonblob: int = Field( + 42, + title="The Json", + description="this is the value of json", + gt=30, + lt=50, + list=[1, 2, "3"], + ) + + +class Producer(ProducerBase): + id: int + repos: list[Repository] = [] + + class Config: + orm_mode = True diff --git a/pkgs/clan-cli/clan_cli/webui/app.py b/pkgs/clan-cli/clan_cli/webui/app.py index 5a32a31..de13526 100644 --- a/pkgs/clan-cli/clan_cli/webui/app.py +++ b/pkgs/clan-cli/clan_cli/webui/app.py @@ -2,7 +2,7 @@ import logging from contextlib import asynccontextmanager from typing import Any -#import for sql +# import for sql from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.routing import APIRoute @@ -44,7 +44,7 @@ def setup_app() -> FastAPI: ) app.include_router(health.router) - #sql methodes + # sql methodes app.include_router(sql_connect.router) app.include_router(socket_manager2.router) diff --git a/pkgs/clan-cli/clan_cli/webui/routers/health.py b/pkgs/clan-cli/clan_cli/webui/routers/health.py index 8332b5b..b74b71b 100644 --- a/pkgs/clan-cli/clan_cli/webui/routers/health.py +++ b/pkgs/clan-cli/clan_cli/webui/routers/health.py @@ -6,6 +6,8 @@ router = APIRouter() @router.get("/health", include_in_schema=True) -async def health() -> Machine: #str: - return Machine(name="test", status=Status.ONLINE) +async def health() -> Machine: # str: + return Machine(name="test", status=Status.ONLINE) + + # return "OK" diff --git a/pkgs/clan-cli/clan_cli/webui/routers/sql_connect.py b/pkgs/clan-cli/clan_cli/webui/routers/sql_connect.py index eee564f..72307de 100644 --- a/pkgs/clan-cli/clan_cli/webui/routers/sql_connect.py +++ b/pkgs/clan-cli/clan_cli/webui/routers/sql_connect.py @@ -1,16 +1,25 @@ +from typing import List + from fastapi import APIRouter, Depends from sqlalchemy.orm import Session -from .. import sql_crud, sql_db, sql_schemas +from .. import sql_crud, sql_db, sql_models +from ..api_outputs import Producer, ProducerCreate router = APIRouter() -@router.get("/get_producers", response_model=list[sql_schemas.Producer]) -def get_producers(skip: int = 0, limit: int = 100, db: Session = Depends(sql_db.get_db)): + +@router.get("/get_producers", response_model=List[Producer]) +def get_producers( + skip: int = 0, limit: int = 100, db: Session = Depends(sql_db.get_db) +) -> List[sql_models.Producer]: producers = sql_crud.get_producers(db, skip=skip, limit=limit) return producers -@router.post("/create_producers", response_model=sql_schemas.Producer) -def create_producers(producer: sql_schemas.ProducerCreate, db: Session = Depends(sql_db.get_db)): - #todo checken ob schon da ... - return sql_crud.create_producer(db=db, producer=producer) \ No newline at end of file + +@router.post("/create_producers", response_model=Producer) +def create_producers( + producer: ProducerCreate, db: Session = Depends(sql_db.get_db) +) -> Producer: + # todo checken ob schon da ... + return sql_crud.create_producer(db=db, producer=producer) diff --git a/pkgs/clan-cli/clan_cli/webui/sql_crud.py b/pkgs/clan-cli/clan_cli/webui/sql_crud.py index 8371b8f..0c66d52 100644 --- a/pkgs/clan-cli/clan_cli/webui/sql_crud.py +++ b/pkgs/clan-cli/clan_cli/webui/sql_crud.py @@ -1,13 +1,20 @@ +from typing import List + from sqlalchemy.orm import Session -from . import sql_models, sql_schemas +from . import api_outputs, sql_models -def get_producers(db: Session, skip: int = 0, limit: int = 100): +def get_producers( + db: Session, skip: int = 0, limit: int = 100 +) -> List[sql_models.Producer]: return db.query(sql_models.Producer).offset(skip).limit(limit).all() -def create_producer(db: Session, producer: sql_schemas.ProducerCreate): - jsonblob_init = {"test_repo":"jsonblob_create"} + +def create_producer( + db: Session, producer: api_outputs.ProducerCreate +) -> sql_models.Producer: + jsonblob_init = {"test_repo": "jsonblob_create"} db_producer = sql_models.Producer(jsonblob=jsonblob_init) db.add(db_producer) db.commit() @@ -15,12 +22,17 @@ def create_producer(db: Session, producer: sql_schemas.ProducerCreate): return db_producer -def get_repositories(db: Session, skip: int = 0, limit: int = 100): +def get_repositories( + db: Session, skip: int = 0, limit: int = 100 +) -> List[sql_models.Repository]: return db.query(sql_models.Repository).offset(skip).limit(limit).all() -def create_repository(db: Session, repository: sql_schemas.RepositoryCreate, producers_id: int): + +def create_repository( + db: Session, repository: api_outputs.RepositoryCreate, producers_id: int +) -> sql_models.Repository: db_repository = sql_models.Repository(**repository.dict(), prod_id=producers_id) db.add(db_repository) db.commit() db.refresh(db_repository) - return db_repository \ No newline at end of file + return db_repository diff --git a/pkgs/clan-cli/clan_cli/webui/sql_db.py b/pkgs/clan-cli/clan_cli/webui/sql_db.py index 1c8d62b..eb3f767 100644 --- a/pkgs/clan-cli/clan_cli/webui/sql_db.py +++ b/pkgs/clan-cli/clan_cli/webui/sql_db.py @@ -1,18 +1,19 @@ +from typing import Generator + from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import sessionmaker +from sqlalchemy.orm import Session, sessionmaker URL = "sqlite:///./sql_app.db" -engine = create_engine( - URL, connect_args={"check_same_thread":False} -) +engine = create_engine(URL, connect_args={"check_same_thread": False}) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base() + # Dependency to start a clean thread of the db -def get_db(): +def get_db() -> Generator[Session, None, None]: db = SessionLocal() try: yield db diff --git a/pkgs/clan-cli/clan_cli/webui/sql_models.py b/pkgs/clan-cli/clan_cli/webui/sql_models.py index 0cdb873..f357238 100644 --- a/pkgs/clan-cli/clan_cli/webui/sql_models.py +++ b/pkgs/clan-cli/clan_cli/webui/sql_models.py @@ -1,7 +1,9 @@ -from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, JSON +from sqlalchemy import JSON, Column, ForeignKey, Integer from sqlalchemy.orm import relationship + from .sql_db import Base + class Producer(Base): __tablename__ = "producers" @@ -10,6 +12,7 @@ class Producer(Base): repos = relationship("Repository", back_populates="producer") + class Repository(Base): __tablename__ = "repositories" diff --git a/pkgs/clan-cli/clan_cli/webui/sql_schemas.py b/pkgs/clan-cli/clan_cli/webui/sql_schemas.py deleted file mode 100644 index 25ba889..0000000 --- a/pkgs/clan-cli/clan_cli/webui/sql_schemas.py +++ /dev/null @@ -1,35 +0,0 @@ -from pydantic import BaseModel, Field - - -class RepositoryBase(BaseModel): - title: str - description: str | None = None - -class RepositoryCreate(RepositoryBase): - pass - -class Repository(RepositoryBase): - id: int - prod_id: str - class Config: - orm_mode = True - - -class ProducerBase(BaseModel): - id: int - -class ProducerCreate(ProducerBase): - jsonblob: int = Field( - 42, - title='The Json', - description='this is the value of json', - gt=30, - lt=50, - list=[1,2,"3"], - ) - -class Producer(ProducerBase): - id: int - repos: list[Repository] = [] - class Config: - orm_mode = True