From 2ab8eead07544686a243da3fe31b48c78524057e Mon Sep 17 00:00:00 2001 From: Maria Ropat <35531751+Mropat@users.noreply.github.com> Date: Tue, 22 Mar 2022 18:01:58 +0100 Subject: [PATCH] Cache fix(#50)(patch) ### Fixed * Workaround for SAWarcning in SQLModel (discussed here: https://github.com/tiangolo/sqlmodel/issues/189) * Handle missing status detail when analysis is not paired --- genotype_api/api/endpoints/analyses.py | 4 ++++ genotype_api/api/endpoints/plates.py | 4 ++++ genotype_api/api/endpoints/samples.py | 8 ++++++-- genotype_api/api/endpoints/snps.py | 4 ++++ genotype_api/api/endpoints/users.py | 5 +++++ genotype_api/crud/analyses.py | 4 ++++ genotype_api/crud/plates.py | 9 ++++----- genotype_api/crud/samples.py | 5 ++++- genotype_api/crud/users.py | 4 ++++ 9 files changed, 39 insertions(+), 8 deletions(-) diff --git a/genotype_api/api/endpoints/analyses.py b/genotype_api/api/endpoints/analyses.py index 877ce41..aa9b5bd 100644 --- a/genotype_api/api/endpoints/analyses.py +++ b/genotype_api/api/endpoints/analyses.py @@ -14,6 +14,10 @@ from genotype_api.security import get_active_user from genotype_api.file_parsing.vcf import SequenceAnalysis +from sqlmodel.sql.expression import Select, SelectOfScalar + +SelectOfScalar.inherit_cache = True +Select.inherit_cache = True router = APIRouter() diff --git a/genotype_api/api/endpoints/plates.py b/genotype_api/api/endpoints/plates.py index 296644c..291c013 100644 --- a/genotype_api/api/endpoints/plates.py +++ b/genotype_api/api/endpoints/plates.py @@ -27,6 +27,10 @@ PlateRead, ) from genotype_api.security import get_active_user +from sqlmodel.sql.expression import Select, SelectOfScalar + +SelectOfScalar.inherit_cache = True +Select.inherit_cache = True router = APIRouter() diff --git a/genotype_api/api/endpoints/samples.py b/genotype_api/api/endpoints/samples.py index fb45c76..0975338 100644 --- a/genotype_api/api/endpoints/samples.py +++ b/genotype_api/api/endpoints/samples.py @@ -28,10 +28,12 @@ refresh_sample_status, ) from sqlmodel import Session, select -from sqlmodel.sql.expression import SelectOfScalar - +from sqlmodel.sql.expression import Select, SelectOfScalar from genotype_api.security import get_active_user +SelectOfScalar.inherit_cache = True +Select.inherit_cache = True + router = APIRouter() @@ -182,6 +184,8 @@ def get_status_detail( current_user: User = Depends(get_active_user), ): sample: Sample = get_sample(session=session, sample_id=sample_id) + if len(sample.analyses) != 2: + return StatusDetail() return check_sample(sample=sample) diff --git a/genotype_api/api/endpoints/snps.py b/genotype_api/api/endpoints/snps.py index 3c0f2ab..ba1971e 100644 --- a/genotype_api/api/endpoints/snps.py +++ b/genotype_api/api/endpoints/snps.py @@ -7,6 +7,10 @@ from sqlmodel import Session, delete, select from genotype_api.security import get_active_user +from sqlmodel.sql.expression import Select, SelectOfScalar + +SelectOfScalar.inherit_cache = True +Select.inherit_cache = True router = APIRouter() diff --git a/genotype_api/api/endpoints/users.py b/genotype_api/api/endpoints/users.py index 49b2e1c..52deb78 100644 --- a/genotype_api/api/endpoints/users.py +++ b/genotype_api/api/endpoints/users.py @@ -13,6 +13,11 @@ from sqlmodel import Session, select from genotype_api.security import get_active_user +from sqlmodel.sql.expression import Select, SelectOfScalar + +SelectOfScalar.inherit_cache = True +Select.inherit_cache = True + router = APIRouter() diff --git a/genotype_api/crud/analyses.py b/genotype_api/crud/analyses.py index 8b5d9a3..a7753e3 100644 --- a/genotype_api/crud/analyses.py +++ b/genotype_api/crud/analyses.py @@ -5,6 +5,10 @@ from genotype_api.constants import TYPES from genotype_api.models import Analysis from sqlmodel import Session, select +from sqlmodel.sql.expression import Select, SelectOfScalar + +SelectOfScalar.inherit_cache = True +Select.inherit_cache = True def get_analyses_from_plate(plate_id: int, session: Session) -> List[Analysis]: diff --git a/genotype_api/crud/plates.py b/genotype_api/crud/plates.py index ffca6bc..a0ee42d 100644 --- a/genotype_api/crud/plates.py +++ b/genotype_api/crud/plates.py @@ -2,6 +2,10 @@ from typing import Optional from genotype_api.models import Plate, PlateCreate from sqlmodel import Session, select +from sqlmodel.sql.expression import Select, SelectOfScalar + +SelectOfScalar.inherit_cache = True +Select.inherit_cache = True LOG = logging.getLogger(__name__) @@ -13,11 +17,6 @@ def get_plate(session: Session, plate_id: int) -> Plate: return session.exec(statement).one() -def get_plate_by_plate_id(session: Session, plate_id: str) -> Optional[Plate]: - statement = select(Plate).where(Plate.plate_id == plate_id) - return session.exec(statement).first() - - def create_plate(session: Session, plate: PlateCreate) -> Plate: db_plate = Plate.from_orm(plate) db_plate.analyses = plate.analyses # not sure why from_orm wont pick up the analyses diff --git a/genotype_api/crud/samples.py b/genotype_api/crud/samples.py index ca4b258..9a374f9 100644 --- a/genotype_api/crud/samples.py +++ b/genotype_api/crud/samples.py @@ -3,8 +3,11 @@ from genotype_api.match import check_sample from genotype_api.models import Sample, Analysis from sqlmodel import Session, func, select -from sqlmodel.sql.expression import SelectOfScalar from fastapi import HTTPException +from sqlmodel.sql.expression import Select, SelectOfScalar + +SelectOfScalar.inherit_cache = True +Select.inherit_cache = True def get_sample(session: Session, sample_id: str) -> Sample: diff --git a/genotype_api/crud/users.py b/genotype_api/crud/users.py index cd44ab6..a7256b1 100644 --- a/genotype_api/crud/users.py +++ b/genotype_api/crud/users.py @@ -2,6 +2,10 @@ from genotype_api.models import User, UserCreate from sqlmodel import select, Session +from sqlmodel.sql.expression import Select, SelectOfScalar + +SelectOfScalar.inherit_cache = True +Select.inherit_cache = True def get_user(session: Session, user_id: int):