Source code for modalysis.server.dmr
"""FastAPI routes for DMR operations."""
import logging
from fastapi import APIRouter
from modalysis.core import dmr as core_dmr
from modalysis.server.models import (
DmrAnnotateRequest,
DmrCommonGenesRequest,
DmrFormatRequest,
DmrGeneCountsRequest,
)
logger = logging.getLogger(__name__)
router = APIRouter(prefix="/dmr")
[docs]
@router.post("/annotate")
def dmr_annotate(request: DmrAnnotateRequest) -> dict[str, str]:
"""Handle POST `/dmr/annotate` and run core DMR interval annotation."""
logger.info("Server received dmr annotate request: %s", request)
core_dmr.annotate(
dmr_path=request.dmr_path,
gff_path=request.gff_path,
output_path=request.output_path,
output_name=request.output_name,
)
return {"status": "success"}
[docs]
@router.post("/gene-counts")
def dmr_gene_counts(request: DmrGeneCountsRequest) -> dict[str, str]:
"""Handle POST `/dmr/gene-counts` and run gene-count aggregation."""
logger.info("Server received dmr gene-counts request: %s", request)
core_dmr.gene_counts(
annotated_dmr_paths=request.annotated_dmr_paths,
manifestations=request.manifestations,
modifications=request.modifications,
manifestation_labels=request.manifestation_labels,
expression_labels=request.expression_labels,
annotated_gff_path=request.annotated_gff_path,
output_path=request.output_path,
output_name=request.output_name,
output_excel=request.output_excel,
)
return {"status": "success"}
[docs]
@router.post("/common-genes")
def dmr_common_genes(request: DmrCommonGenesRequest) -> dict[str, str]:
"""Handle POST `/dmr/common-genes` and run overlap aggregation."""
logger.info("Server received dmr common-genes request: %s", request)
core_dmr.common_genes(
annotated_dmr_paths=request.annotated_dmr_paths,
manifestations=request.manifestations,
modifications=request.modifications,
manifestation_labels=request.manifestation_labels,
expression_labels=request.expression_labels,
modification_a=request.modification_a,
modification_b=request.modification_b,
annotated_gff_path=request.annotated_gff_path,
output_path=request.output_path,
output_name=request.output_name,
)
return {"status": "success"}