Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bedhost/_version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "0.12.1"
__version__ = "0.12.2"
5 changes: 5 additions & 0 deletions bedhost/data_models.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from enum import Enum
from typing import Dict

from fastapi import Path
from pydantic import BaseModel
Expand Down Expand Up @@ -81,3 +82,7 @@ class BaseListResponse(BaseModel):

class CreateBEDsetRequest(BaseModel):
registry_path: str


class ChromLengthUploadModel(BaseModel):
bed_file: Dict[str, int]
14 changes: 12 additions & 2 deletions bedhost/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
MissingObjectError,
MissingThumbnailError,
)
from bedboss.refgenome_validator.main import ReferenceValidator

from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import HTMLResponse, RedirectResponse
Expand Down Expand Up @@ -142,6 +144,11 @@ def main():

global bbagent
bbagent = configure(bbconf_file_path)

_LOGGER.info("Initializing reference genome validator...")
global ref_validator
ref_validator = ReferenceValidator()

attach_routers(app)
uvicorn.run(
app,
Expand All @@ -158,12 +165,15 @@ def main():
_LOGGER.info(f"Running {PKG_NAME} app...")
bbconf_file_path = os.environ.get("BEDBASE_CONFIG") or None
global bbagent

global usage_data
usage_data = init_model_usage()
global ref_validator

bbagent = configure(
bbconf_file_path
) # configure before attaching routers to avoid circular imports
usage_data = init_model_usage()

ref_validator = ReferenceValidator()

scheduler = BackgroundScheduler()

Expand Down
58 changes: 56 additions & 2 deletions bedhost/routers/bed_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,21 @@
TokenizedPathResponse,
QdrantSearchResult,
RefGenValidReturnModel,
RefGenValidModel,
)
from fastapi import APIRouter, File, HTTPException, Query, UploadFile, Request
from fastapi.responses import PlainTextResponse
from gtars.models import RegionSet

from .. import _LOGGER
from ..const import EXAMPLE_BED, MAX_FILE_SIZE, MAX_REGION_NUMBER, MIN_REGION_WIDTH
from ..data_models import CROM_NUMBERS, BaseListResponse, BedDigest
from ..main import bbagent, usage_data
from ..data_models import (
CROM_NUMBERS,
BaseListResponse,
BedDigest,
ChromLengthUploadModel,
)
from ..main import bbagent, usage_data, ref_validator
from ..helpers import count_requests, test_query_parameter

router = APIRouter(prefix="/v1/bed", tags=["bed"])
Expand Down Expand Up @@ -291,6 +297,54 @@ async def embed_bed_file(
return embedding.tolist()[0]


@router.post(
"/analyze-genome",
summary="Analyze reference genome for bed file",
response_model=RefGenValidReturnModel,
)
async def analyze_reference_genome(
chrom_lengths: ChromLengthUploadModel,
):
"""
Provide length of the chromosomes for a reference genome, and
return reference genome validation results for a bed file
"""

try:
genome_aliases = bbagent.get_reference_genomes()
result = ref_validator.determine_compatibility(
chrom_lengths.bed_file, concise=True
)

compared_genomes: List[RefGenValidModel] = []
for genome, value in result.items():
if value.tier_ranking < 4:
compared_genomes.append(
RefGenValidModel(
provided_genome="Not Provided",
compared_genome=genome_aliases.get(genome, "Unknown genome"),
genome_digest=genome,
xs=value.xs,
oobr=value.oobr,
sequence_fit=value.sequence_fit,
assigned_points=value.assigned_points,
tier_ranking=value.tier_ranking,
)
)
return RefGenValidReturnModel(
id="No ID",
provided_genome="Not Provided",
compared_genome=compared_genomes,
)

except BedBaseConfError as e:
_LOGGER.error(e)
raise HTTPException(
status_code=400,
detail=f"Unable to process request. Check loggs",
)


@router.get(
"/missing_plots",
summary="Get missing plots for a bed file.",
Expand Down
4 changes: 2 additions & 2 deletions requirements/requirements-all.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# bbconf @ git+https://github.com/databio/bbconf.git@dev#egg=bbconf
bbconf>=0.14.1
bbconf>=0.14.2
fastapi>=0.103.0
logmuse>=0.2.7
markdown
Expand All @@ -12,4 +12,4 @@ psycopg[binary,pool]
python-multipart>=0.0.9
APScheduler>=3.11.0
cachetools>=4.2.4

bedboss>=0.8.5
4 changes: 2 additions & 2 deletions test.Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
FROM bedhost

COPY config.yaml /bedbase.yaml
ENV BEDBASE_CONFIG=/bedbase.yaml
COPY config.yaml /config.yaml
ENV BEDBASE_CONFIG=/config.yaml

RUN mkdir -p /data/outputs/bedstat_output
RUN mkdir -p /data/outputs/bedbuncher_output
Expand Down
2 changes: 1 addition & 1 deletion ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"generate-types-local": "npx openapi-typescript http://localhost:8000/openapi.json -o bedbase-types.d.ts"
},
"dependencies": {
"@databio/gtars": "^0.5.2",
"@databio/gtars": "^0.5.3",
"@tanstack/react-query": "^5.28.0",
"@tanstack/react-query-devtools": "^5.28.0",
"@tanstack/react-table": "^8.15.3",
Expand Down
Loading