Skip to content

Commit

Permalink
feat: add static fit quality data endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
zietzm committed Sep 2, 2024
1 parent 2a6d037 commit 4da476b
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 13 deletions.
3 changes: 2 additions & 1 deletion settings.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
dry_run = true
s3_bucket = "webgwas-ohio"
sqlite_db = "sqlite:///backend.db"
n_workers = 1
n_workers = 2
fit_quality_file = "prod_data/fit_quality.parquet"

[indirect_gwas]
2 changes: 2 additions & 0 deletions src/webgwas_backend/config.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from __future__ import annotations

import json
from pathlib import Path
from typing import Any

from dynaconf import Dynaconf
Expand All @@ -18,6 +19,7 @@ class Settings(BaseSettings):
sqlite_db: str
indirect_gwas: IndirectGWASSettings
n_workers: int
fit_quality_file: Path

@classmethod
def from_json(cls, json_data: dict[str, Any]) -> Settings:
Expand Down
13 changes: 13 additions & 0 deletions src/webgwas_backend/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from functools import lru_cache
from typing import Annotated

import polars as pl
import webgwas.phenotype_definitions
from fastapi import Depends, FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
Expand Down Expand Up @@ -35,12 +36,17 @@
init_db()

worker: Worker | None = None
fit_quality: list[tuple[float, float]] | None = None


@asynccontextmanager
async def lifespan(app: FastAPI): # noqa: ARG001
global worker
worker = Worker(settings)
global fit_quality
fit_quality = pl.read_parquet(settings.fit_quality_file).to_pandas().values.tolist()
assert fit_quality is not None
fit_quality = [(float(f"{x:.3f}"), float(f"{y:.3f}")) for x, y in fit_quality]
yield


Expand Down Expand Up @@ -171,3 +177,10 @@ def get_igwas_results(
request_id: str, worker: Annotated[Worker, Depends(get_worker)]
) -> WebGWASResult:
return worker.get_results(request_id)


@app.get("/api/static/fit_quality")
def get_fit_quality() -> list[tuple[float, float]]:
if fit_quality is None:
raise HTTPException(status_code=500, detail="Fit quality not loaded")
return fit_quality
25 changes: 13 additions & 12 deletions uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 4da476b

Please sign in to comment.