Skip to content
Snippets Groups Projects
algorithms.py 1.43 KiB
Newer Older
from os import name
from fastapi import APIRouter, Depends, HTTPException
from starlette.responses import Response

from ... import TimeseriesFactory
from ...algorithm import DbDtAlgorithm
from ...residual import (
    calculate,
    Reading,
)
from .DataApiQuery import DataApiQuery
from .data import format_timeseries, get_data_factory, get_data_query, get_timeseries


router = APIRouter()


@router.get(
    "/algorithms/dbdt/",
    description="First order derivative at requested interval",
    name="Dbdt Algorithm",
)
def get_dbdt(
    query: DataApiQuery = Depends(get_data_query),
) -> Response:
    dbdt = DbDtAlgorithm(period=query.sampling_period)
    data_factory = get_data_factory(query=query)
    # read data
    raw = get_timeseries(data_factory, query)
    # run dbdt
    timeseries = dbdt.process(raw)
    elements = [f"{element}_DT" for element in query.elements]
    # output response
    return format_timeseries(
        timeseries=timeseries, format=query.format, elements=elements
    )
@router.post(
    "/algorithms/residual",
    description="Caclulates new absolutes and baselines from reading\n\n"
    + "Returns posted reading object with updated values",
    response_model=Reading,
)
def calculate_residual(reading: Reading, adjust_reference: bool = True):
    try:
        return calculate(reading=reading, adjust_reference=adjust_reference)
    except ValueError as e:
        raise HTTPException(status_code=400, detail=str(e))