Coverage for dj/api/engines.py: 100%
26 statements
« prev ^ index » next coverage.py v7.2.3, created at 2023-04-17 20:05 -0700
« prev ^ index » next coverage.py v7.2.3, created at 2023-04-17 20:05 -0700
1"""
2Engine related APIs.
3"""
5from http import HTTPStatus
6from typing import List
8from fastapi import APIRouter, Depends, HTTPException
9from sqlmodel import Session, select
11from dj.api.helpers import get_engine
12from dj.models.engine import Engine, EngineInfo
13from dj.utils import get_session
15router = APIRouter()
18@router.get("/engines/", response_model=List[EngineInfo])
19def list_engines(*, session: Session = Depends(get_session)) -> List[EngineInfo]:
20 """
21 List all available engines
22 """
23 return list(session.exec(select(Engine)))
26@router.get("/engines/{name}/{version}/", response_model=EngineInfo)
27def get_an_engine(
28 name: str, version: str, *, session: Session = Depends(get_session)
29) -> EngineInfo:
30 """
31 Return an engine by name and version
32 """
33 return get_engine(session, name, version)
36@router.post("/engines/", response_model=EngineInfo, status_code=201)
37def add_an_engine(
38 data: EngineInfo,
39 *,
40 session: Session = Depends(get_session),
41) -> EngineInfo:
42 """
43 Add an Engine
44 """
45 try:
46 get_engine(session, data.name, data.version)
47 except HTTPException:
48 pass
49 else:
50 raise HTTPException(
51 status_code=HTTPStatus.CONFLICT,
52 detail=f"Engine already exists: `{data.name}` version `{data.version}`",
53 )
55 engine = Engine.from_orm(data)
56 session.add(engine)
57 session.commit()
58 session.refresh(engine)
60 return engine