1+ from typing import Any , List , Optional
2+
3+ from fastapi import APIRouter , Depends
4+ from fastapi .exceptions import HTTPException
5+ from sqlalchemy .orm import Session
6+ from sqlalchemy .exc import MultipleResultsFound
7+
8+ from mavedb import deps
9+
10+ from mavedb .models .mapped_variant import MappedVariant
11+ from mavedb .models .variant import Variant
12+ from mavedb .view_models import mapped_variant
13+
14+ async def fetch_mapped_variant_by_variant_urn (db , urn : str ) -> Optional [MappedVariant ]:
15+ """
16+ We may combine this function back to show_mapped_variant if none of any new function call it.
17+ Fetch one mapped variant by variant URN.
18+
19+ :param db: An active database session.
20+ :param urn: The variant URN.
21+ :return: The mapped variant, or None if the URL was not found or refers to a private score set not owned by the specified
22+ user.
23+ """
24+ try :
25+ item = db .query (MappedVariant ).filter (Variant .urn == urn ).filter (MappedVariant .variant_id == Variant .id ).one_or_none ()
26+ except MultipleResultsFound :
27+ raise HTTPException (status_code = 500 , detail = f"Multiple variants with URN { urn } were found." )
28+ if not item :
29+ raise HTTPException (status_code = 404 , detail = f"Mapped variant with URN { urn } not found" )
30+ return item
31+
32+ router = APIRouter (prefix = "/api/v1/mapped-variants" , tags = ["mapped variants" ], responses = {404 : {"description" : "Not found" }})
33+
34+ @router .get ("/{urn}" , status_code = 200 , response_model = mapped_variant .MappedVariant , responses = {404 : {}, 500 : {}})
35+ async def show_mapped_variant (
36+ * , urn : str , db : Session = Depends (deps .get_db )
37+ ) -> Any :
38+ """
39+ Fetch a mapped variant by URN.
40+ """
41+
42+ return await fetch_mapped_variant_by_variant_urn (db , urn )
0 commit comments