jfaustin's picture
add dockerfile and folding studio cli
44459bb
raw
history blame
1.58 kB
"""API simple MSA search call wrappers."""
from contextlib import ExitStack
from pathlib import Path
import requests
import typer
from rich import print # pylint:disable=redefined-builtin
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