Skip to content
Draft
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
61 changes: 35 additions & 26 deletions src/anyvlm/cli.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
"""CLI for interacting with AnyVLM instance"""

import logging
from http import HTTPStatus
from pathlib import Path
from timeit import default_timer as timer

import click
import requests
from anyvar.mapping.liftover import ReferenceAssembly

import anyvlm
from anyvlm.anyvar.base_client import BaseAnyVarClient
from anyvlm.config import Settings, get_config
from anyvlm.functions.ingest_vcf import ingest_vcf
from anyvlm.main import create_anyvar_client, create_anyvlm_storage
from anyvlm.storage import Storage

_logger = logging.getLogger(__name__)

Expand All @@ -23,6 +25,7 @@ def _cli() -> None:


@_cli.command()
@click.command(name="ingest-vcf")
@click.option(
"--file",
"vcf_path",
Expand All @@ -39,7 +42,7 @@ def _cli() -> None:
callback=lambda _, __, value: ReferenceAssembly(value),
help="Reference genome assembly",
)
def ingest_vcf(vcf_path: Path, assembly: ReferenceAssembly) -> None:
def ingest_vcf_cli(vcf_path: Path, assembly: ReferenceAssembly) -> None:
"""Deposit variants and allele frequencies from VCF into AnyVLM instance

$ anyvlm ingest-vcf --file path/to/file.vcf.gz --assembly grch38
Expand All @@ -53,29 +56,35 @@ def ingest_vcf(vcf_path: Path, assembly: ReferenceAssembly) -> None:
)

config: Settings = get_config()
endpoint: str = f"{config.service_uri}/ingest_vcf"

params = {"assembly": assembly.value}

with vcf_path.open("rb") as fh:
files = {"file": (vcf_path.name, fh, "application/gzip")}

try:
response: requests.Response = requests.post(
endpoint,
files=files,
params=params,
timeout=3600, # 1 hour
)
except requests.RequestException as e:
_logger.exception("HTTP POST request to AnyVLM '/ingest_vcf' failed")
raise click.ClickException(str(e)) from e

if response.status_code != HTTPStatus.OK:
_logger.error("Request failed with status code %s", response.status_code)
raise click.ClickException(
f"Request failed with status code: {response.status_code}"
)

anyvar_client: BaseAnyVarClient = create_anyvar_client(
connection_string=config.anyvar_uri
)
anyvlm_storage: Storage = create_anyvlm_storage(uri=config.storage_uri)

ingest_vcf(vcf_path, anyvar_client, anyvlm_storage, assembly)

# params = {"assembly": assembly.value}

# with vcf_path.open("rb") as fh:
# files = {"file": (vcf_path.name, fh, "application/gzip")}

# try:
# response: requests.Response = requests.post(
# endpoint,
# files=files,
# params=params,
# timeout=3600, # 1 hour
# )
# except requests.RequestException as e:
# _logger.exception("HTTP POST request to AnyVLM '/ingest_vcf' failed")
# raise click.ClickException(str(e)) from e

# if response.status_code != HTTPStatus.OK:
# _logger.error("Request failed with status code %s", response.status_code)
# raise click.ClickException(
# f"Request failed with status code: {response.status_code}"
# )

end: float = timer()
duration: float = end - start
Expand Down
Loading