Skip to content

Commit 00bdd9c

Browse files
committed
Add presets routes, schema, model helper functions
creates the following: models/presets.py: create_preset, get_user_presets, get_preset routes/presets.py: GET /, GET list/, POST /add schemas/presets.py: PresetSchema Signed-off-by: Vallari Agrawal <[email protected]>
1 parent 68fb9e9 commit 00bdd9c

File tree

4 files changed

+60
-1
lines changed

4 files changed

+60
-1
lines changed

Diff for: src/main.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from fastapi import FastAPI, Request
44
from fastapi.middleware.cors import CORSMiddleware
55
from starlette.middleware.sessions import SessionMiddleware
6-
from routes import suite, kill, login, logout
6+
from routes import suite, kill, login, logout, presets
77
from dotenv import load_dotenv
88

99
load_dotenv()
@@ -37,3 +37,4 @@ def read_root(request: Request):
3737
app.include_router(kill.router)
3838
app.include_router(login.router)
3939
app.include_router(logout.router)
40+
app.include_router(presets.router)

Diff for: src/models/presets.py

+15
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from sqlalchemy import Column, Integer, String, UniqueConstraint
2+
from sqlalchemy.orm import Session
23
from . import Base
4+
from schemas.presets import PresetSchema
35

46
class Presets(Base):
57
__tablename__ = 'presets'
@@ -12,3 +14,16 @@ class Presets(Base):
1214
__table_args__ = (
1315
UniqueConstraint("username", "name"),
1416
)
17+
18+
def create_preset(db: Session, preset: PresetSchema):
19+
new_preset = Presets(**preset.model_dump())
20+
db.add(new_preset)
21+
db.commit()
22+
db.refresh(new_preset)
23+
return new_preset
24+
25+
def get_user_presets(db: Session, username: str):
26+
return db.query(Presets).filter(Presets.username == username).all()
27+
28+
def get_preset(db: Session, username: str, preset_name: str):
29+
return db.query(Presets).filter(Presets.username == username, Presets.name == preset_name).first()

Diff for: src/routes/presets.py

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from fastapi import APIRouter, HTTPException, Depends
2+
from models import get_db
3+
from models.presets import get_preset, get_user_presets, create_preset
4+
from schemas.presets import PresetSchema
5+
from sqlalchemy.orm import Session
6+
import logging
7+
8+
log = logging.getLogger(__name__)
9+
10+
router = APIRouter(
11+
prefix="/presets",
12+
tags=["presets"],
13+
)
14+
15+
@router.get("/", status_code=200)
16+
def read_preset(username: str, name: str, db: Session = Depends(get_db)):
17+
db_preset = get_preset(db, username, name)
18+
return db_preset
19+
20+
@router.get("/list", status_code=200)
21+
def read_preset(username: str, db: Session = Depends(get_db)):
22+
db_presets = get_user_presets(db, username)
23+
return db_presets
24+
25+
@router.post("/add", status_code=200, response_model=PresetSchema)
26+
def add_preset(preset: PresetSchema, db: Session = Depends(get_db)):
27+
db_preset = get_preset(db, username=preset.username, preset_name=preset.name)
28+
if db_preset:
29+
raise HTTPException(status_code=400, detail=f"Preset '{preset.name}' already exists.")
30+
return create_preset(db, preset)

Diff for: src/schemas/presets.py

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from pydantic import BaseModel, Field
2+
from typing import Union
3+
4+
5+
class PresetSchema(BaseModel):
6+
# pylint: disable=too-few-public-methods
7+
"""
8+
Class for Base Args.
9+
"""
10+
username: Union[str, None] = Field(default=None)
11+
name: Union[str, None] = Field(default=None)
12+
suite: Union[str, None] = Field(default=None)
13+
cmd: Union[str, None] = Field(default=None)

0 commit comments

Comments
 (0)