|
"""API simple MSA search call wrappers.""" |
|
|
|
from contextlib import ExitStack |
|
from pathlib import Path |
|
|
|
import requests |
|
import typer |
|
from rich import print |
|
|
|
from folding_studio.config import API_URL, REQUEST_TIMEOUT |
|
from folding_studio.utils.data_model import MSARequestParams |
|
from folding_studio.utils.headers import get_auth_headers |
|
from folding_studio.utils.project_validation import define_project_code_or_raise |
|
|
|
|
|
def simple_msa( |
|
file: Path, |
|
params: MSARequestParams, |
|
project_code: str | None = None, |
|
) -> dict: |
|
"""Make a simple MSA calculation from a file. |
|
|
|
Args: |
|
file (Path): Data source file path. |
|
params (MSARequestParams): API request parameters. |
|
project_code (str|None): Project code under which the jobs are billed. |
|
|
|
Raises: |
|
typer.Exit: If an error occurs during the API call. |
|
""" |
|
project_code = define_project_code_or_raise(project_code=project_code) |
|
url = API_URL + "searchMSA" |
|
|
|
with ExitStack() as stack: |
|
fasta_file = [("fasta_file", stack.enter_context(file.open("rb")))] |
|
files = fasta_file |
|
response = requests.post( |
|
url, |
|
data=params.model_dump(mode="json"), |
|
headers=get_auth_headers(), |
|
files=files, |
|
timeout=REQUEST_TIMEOUT, |
|
params={"project_code": project_code}, |
|
) |
|
|
|
if not response.ok: |
|
print(f"An error occurred: {response.content.decode()}") |
|
raise typer.Exit(code=1) |
|
|
|
response_json = response.json() |
|
return response_json |
|
|