From 9bde6c2ecf90807d42bb70d88eb40a4844d24dd8 Mon Sep 17 00:00:00 2001 From: Inohara Date: Mon, 28 Oct 2024 13:30:02 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BF=D0=BE=20=D0=BE=D0=BF=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B5=D0=BD=D0=BD=D1=8B=D0=BC=20=D0=BF=D0=B0=D1=80?= =?UTF-8?q?=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=B0=D0=BC=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=BD=D0=B5=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D1=85=20?= =?UTF-8?q?=D1=81=D1=83=D1=89=D0=BD=D0=BE=D1=81=D1=82=D0=B5=D0=B9=20(?= =?UTF-8?q?=D0=BF=D0=BE=D0=BA=D0=B0=20=D0=B1=D0=B5=D0=B7=20=D0=BF=D0=B0?= =?UTF-8?q?=D0=B3=D0=B8=D0=BD=D0=B0=D1=86=D0=B8=D0=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/models/experiment_category.py | 2 +- db/repositories/experiment_category_repos.py | 5 +- db/repositories/experiment_data_repos.py | 42 ++--------- .../experiment_parameters_repos.py | 41 +++-------- db/repositories/load_parameters_repos.py | 70 +++++++++---------- db/repositories/recycling_parameters_repos.py | 5 +- main.py | 2 +- network/routes/experiment_data_router.py | 14 ++++ .../routes/experiment_parameters_router.py | 27 +++++++ 9 files changed, 102 insertions(+), 106 deletions(-) diff --git a/db/models/experiment_category.py b/db/models/experiment_category.py index a28f75c..76ab254 100644 --- a/db/models/experiment_category.py +++ b/db/models/experiment_category.py @@ -9,7 +9,7 @@ from db.models.base import Base class ExperimentCategory(Base): __tablename__ = 'experiment_category' - id: Mapped[int] = mapped_column(Identity(start=21, cycle=True), + id: Mapped[int] = mapped_column(Identity(start=1, cycle=True), primary_key=True) name: Mapped[str] diff --git a/db/repositories/experiment_category_repos.py b/db/repositories/experiment_category_repos.py index 24c99d8..d274258 100644 --- a/db/repositories/experiment_category_repos.py +++ b/db/repositories/experiment_category_repos.py @@ -3,10 +3,13 @@ from typing import Sequence from sqlalchemy import update, delete from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.future import select - +from typing_extensions import deprecated from db.models import ExperimentCategory +@deprecated( + "теперь есть параметризованный круд, а уже свои специфичные методы у каждой сущности в своем репозитории" +) class ExperimentCategoryRepository: def __init__(self, session: AsyncSession): self.session = session diff --git a/db/repositories/experiment_data_repos.py b/db/repositories/experiment_data_repos.py index 15559b3..bd787d2 100644 --- a/db/repositories/experiment_data_repos.py +++ b/db/repositories/experiment_data_repos.py @@ -1,42 +1,14 @@ -from typing import Sequence, Optional +from typing import Sequence -from sqlalchemy import update, delete -from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.future import select from db.models.experiment_data_model import ExperimentData +from db.postgres_db_connection import async_session_postgres - - - -class ExperimentDataRepository: - def __init__(self, session: AsyncSession): - self.session = session - - async def get_all(self) -> Sequence[ExperimentData]: - result = await self.session.execute(select(ExperimentData)) - return result.scalars().all() - - async def get_by_id(self, id: int) -> ExperimentData: - result = await self.session.execute(select(ExperimentData).where(ExperimentData.id == id)) - return result.scalar_one_or_none() - - async def create(self, new_data: ExperimentData): - self.session.add(new_data) - await self.session.commit() - - async def update(self, id: int, updated_data: dict): - stmt = ( - update(ExperimentData). - where(ExperimentData.id == id). - values(**updated_data) +async def get_exp_data_by_file_id(file_id: str) -> Sequence[ExperimentData]: + async with async_session_postgres() as session: + result = await session.execute( + select(ExperimentData).where(ExperimentData.file_id == file_id) ) - await self.session.execute(stmt) - await self.session.commit() - - async def delete(self, id: int): - stmt = delete(ExperimentData).where(ExperimentData.id == id) - await self.session.execute(stmt) - await self.session.commit() - + return result.scalars().all() diff --git a/db/repositories/experiment_parameters_repos.py b/db/repositories/experiment_parameters_repos.py index 5851c50..0e671d4 100644 --- a/db/repositories/experiment_parameters_repos.py +++ b/db/repositories/experiment_parameters_repos.py @@ -1,44 +1,21 @@ from typing import Sequence -from sqlalchemy import update, delete -from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.future import select from db.models.experiment_parameters_model import ExperimentParameters +from db.postgres_db_connection import async_session_postgres -class ExperimentParametersRepository: - def __init__(self, session: AsyncSession): - self.session = session - - async def get_all(self) -> Sequence[ExperimentParameters]: - result = await self.session.execute(select(ExperimentParameters)) - return result.scalars().all() - - async def get_by_id(self, id: int) -> ExperimentParameters: - result = await self.session.execute(select(ExperimentParameters).where(ExperimentParameters.id == id)) - return result.scalar_one_or_none() - - async def get_experiment_parameters_by_category(self, session: AsyncSession, category_id: int) -> Sequence[ExperimentParameters]: - result = await self.session.execute( +async def get_exp_parameters_by_category(category_id: int) -> Sequence[ExperimentParameters]: + async with async_session_postgres() as session: + result = await session.execute( select(ExperimentParameters).where(ExperimentParameters.experiment_category_id == category_id) ) return result.scalars().all() - async def create(self, new_data: ExperimentParameters): - self.session.add(new_data) - await self.session.commit() - - async def update(self, id: int, updated_data: dict): - stmt = ( - update(ExperimentParameters). - where(ExperimentParameters.id == id). - values(**updated_data) +async def get_exp_parameters_by_exp_hash(exp_hash: str) -> Sequence[ExperimentParameters]: + async with async_session_postgres() as session: + result = await session.execute( + select(ExperimentParameters).where(ExperimentParameters.experiment_hash == exp_hash) ) - await self.session.execute(stmt) - await self.session.commit() - - async def delete(self, id: int): - stmt = delete(ExperimentParameters).where(ExperimentParameters.id == id) - await self.session.execute(stmt) - await self.session.commit() + return result.scalars().all() \ No newline at end of file diff --git a/db/repositories/load_parameters_repos.py b/db/repositories/load_parameters_repos.py index f63c6eb..50fa265 100644 --- a/db/repositories/load_parameters_repos.py +++ b/db/repositories/load_parameters_repos.py @@ -8,41 +8,41 @@ from db.models.load_parameters_model import LoadParameters from db.postgres_db_connection import async_session_postgres -async def get_all() -> Sequence[LoadParameters]: - async with async_session_postgres() as session: - result = await session.execute(select(LoadParameters)) - return result.scalars().all() - - -async def get_by_id(id: int) -> LoadParameters: - async with async_session_postgres() as session: - result = await session.execute(select(LoadParameters).where(LoadParameters.id == id)) - return result.scalar_one_or_none() - - -async def create(new_data: LoadParameters): - async with async_session_postgres() as session: - session.add(new_data) - await session.commit() - - -async def update(id: int, updated_data: dict): - async with async_session_postgres() as session: - stmt = ( - update_(LoadParameters). - where(LoadParameters.id == id). - values(**updated_data) - ) - await session.execute(stmt) - await session.commit() - - -async def delete(id: int) -> bool: - async with async_session_postgres() as session: - stmt = delete_(LoadParameters).where(LoadParameters.id == id) - result = await session.execute(stmt) - await session.commit() - return result.rowcount > 0 +# async def get_all() -> Sequence[LoadParameters]: +# async with async_session_postgres() as session: +# result = await session.execute(select(LoadParameters)) +# return result.scalars().all() +# +# +# async def get_by_id(id: int) -> LoadParameters: +# async with async_session_postgres() as session: +# result = await session.execute(select(LoadParameters).where(LoadParameters.id == id)) +# return result.scalar_one_or_none() +# +# +# async def create(new_data: LoadParameters): +# async with async_session_postgres() as session: +# session.add(new_data) +# await session.commit() +# +# +# async def update(id: int, updated_data: dict): +# async with async_session_postgres() as session: +# stmt = ( +# update_(LoadParameters). +# where(LoadParameters.id == id). +# values(**updated_data) +# ) +# await session.execute(stmt) +# await session.commit() +# +# +# async def delete(id: int) -> bool: +# async with async_session_postgres() as session: +# stmt = delete_(LoadParameters).where(LoadParameters.id == id) +# result = await session.execute(stmt) +# await session.commit() +# return result.rowcount > 0 # class LoadParametersRepository: diff --git a/db/repositories/recycling_parameters_repos.py b/db/repositories/recycling_parameters_repos.py index 77294c2..273a46f 100644 --- a/db/repositories/recycling_parameters_repos.py +++ b/db/repositories/recycling_parameters_repos.py @@ -1,4 +1,5 @@ from typing import Sequence +from typing_extensions import deprecated from sqlalchemy import select from sqlalchemy import update, delete @@ -6,7 +7,9 @@ from sqlalchemy.ext.asyncio import AsyncSession from db.models.recycling_parameters_model import RecyclingParameters - +@deprecated( + "теперь есть параметризованный круд, а уже свои специфичные методы у каждой сущности в своем репозитории" +) class RecyclingParametersRepository: def __init__(self, session: AsyncSession): self.session = session diff --git a/main.py b/main.py index 8b38291..87885ad 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,5 @@ -import asyncio from fastapi import FastAPI, HTTPException, BackgroundTasks + from db.csv_to_db import csv_to_db from network.routes import (ch_experimentdb_experiment_data_router, experiment_data_router, experiment_parameters_router, experiment_category_router) diff --git a/network/routes/experiment_data_router.py b/network/routes/experiment_data_router.py index 7300dbc..b18b20a 100644 --- a/network/routes/experiment_data_router.py +++ b/network/routes/experiment_data_router.py @@ -2,6 +2,7 @@ from fastapi import APIRouter, HTTPException from db.crud import * from db.models import ExperimentData +from db.repositories import get_exp_data_by_file_id from network.schemas import ExperimentDataBody router = APIRouter() @@ -50,6 +51,19 @@ async def get_by_id_experiment_data(id: int): raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}") +@router.get('/{file_id}') +async def get_experiment_data_by_file_id(file_id: str): + try: + result = await get_exp_data_by_file_id(file_id) + + if result is not None: + return result + else: + return {"message": f' с file_id = {id} - не найдены'} + except Exception as e: + raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}") + + @router.delete('/{id}/delete') async def delete_experiment_data(id: int): try: diff --git a/network/routes/experiment_parameters_router.py b/network/routes/experiment_parameters_router.py index 095113d..c7c08e4 100644 --- a/network/routes/experiment_parameters_router.py +++ b/network/routes/experiment_parameters_router.py @@ -2,6 +2,7 @@ from fastapi import APIRouter, HTTPException from db.crud import * from db.models import LoadParameters +from db.repositories import get_exp_parameters_by_category, get_exp_parameters_by_exp_hash from network.schemas import ExperimentParametersBody router = APIRouter() @@ -51,6 +52,32 @@ async def get_by_id_experiment_parameters(id: int): raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}") +@router.get('/by_category/{id}') +async def get_experiment_parameters_by_exp_category(id: int): + try: + result = await get_exp_parameters_by_category(id) + + if result is not None: + return result + else: + return {"message": f' с идентификатором категории - {id} - не найдены'} + except Exception as e: + raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}") + + +@router.get('/by_exp_hash/{hash}') +async def get_experiment_parameters_by_exp_category(hash: str): + try: + result = await get_exp_parameters_by_exp_hash(hash) + + if result is not None: + return result + else: + return {"message": f' с experiment_hash = {id} - не найдены'} + except Exception as e: + raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}") + + @router.delete('/{id}/delete') async def delete_experiment_parameters(id: int): try: