|
"""Helper methods for validating cli entries.""" |
|
|
|
from enum import Enum |
|
from pathlib import Path |
|
|
|
import typer |
|
|
|
from folding_studio.utils.path_helpers import extract_files |
|
|
|
|
|
class SupportedCustomTemplateFile(str, Enum): |
|
"""Supported custom template file extensions.""" |
|
|
|
CIF = ".cif" |
|
|
|
|
|
class SupportedCustomMSAFile(str, Enum): |
|
"""Supported custom msa file extensions.""" |
|
|
|
STO = ".sto" |
|
A3M = ".a3m" |
|
|
|
|
|
class SupportedTemplateMaskFile(str, Enum): |
|
"""Supported custom template file extensions.""" |
|
|
|
JSON = ".json" |
|
|
|
|
|
def extract_and_validate_custom_templates( |
|
paths: list[Path], |
|
) -> list[Path]: |
|
"""Extract and validate a list of path to use as custom templates. |
|
|
|
Before checking the files, if a directory path is in the list, its files are extracted. |
|
|
|
Args: |
|
paths (list[Path]): List of paths. |
|
|
|
Raises: |
|
typer.BadParameter: If a file is not supported. |
|
|
|
Returns: |
|
list[Path]: Extracted and validated custom template files path. |
|
""" |
|
extracted_paths = extract_files(paths) |
|
supported_files = [item.value for item in SupportedCustomTemplateFile] |
|
for path in extracted_paths: |
|
if path.suffix not in supported_files: |
|
raise typer.BadParameter( |
|
f"The file '{path}' is not supported. " |
|
f"Only {supported_files} are supported for custom templates." |
|
) |
|
return extracted_paths |
|
|
|
|
|
def extract_and_validate_custom_msas(paths: list[Path]) -> list[Path]: |
|
"""Extract and validate a list of path to use as custom msas. |
|
|
|
Before checking the files, if a directory path is in the list, its files are extracted. |
|
|
|
Args: |
|
paths (list[Path]): List of paths. |
|
|
|
Raises: |
|
typer.BadParameter: If a file is not supported. |
|
|
|
Returns: |
|
list[Path]: Extracted and validated custom msas files path. |
|
""" |
|
extracted_paths = extract_files(paths) |
|
supported_files = [item.value for item in SupportedCustomMSAFile] |
|
for path in extracted_paths: |
|
if path.suffix not in supported_files: |
|
raise typer.BadParameter( |
|
f"The file '{path}' is not supported. " |
|
f"Only {supported_files} are supported for custom msas." |
|
) |
|
return extracted_paths |
|
|
|
|
|
def validate_initial_guess( |
|
initial_guess_file: Path | None, |
|
) -> Path: |
|
"""Extract and validate the file used for initial guess. |
|
|
|
Args: |
|
path (Path | None): Initial guess file parameter. |
|
|
|
Raises: |
|
typer.BadParameter: If a file is not supported. |
|
|
|
Returns: |
|
Path | None: Validated initial guess file path or None. |
|
""" |
|
if not initial_guess_file: |
|
return None |
|
supported_files = [ |
|
item.value for item in SupportedCustomTemplateFile |
|
] |
|
if initial_guess_file.suffix not in supported_files: |
|
raise typer.BadParameter( |
|
f"The file '{initial_guess_file}' is not supported. " |
|
f"Only {supported_files} are supported for initial guess." |
|
) |
|
return initial_guess_file |
|
|
|
|
|
def validate_template_mask( |
|
template_mask_file: Path | None, |
|
) -> Path: |
|
"""Extract and validate the file used for template masks.g. |
|
|
|
Args: |
|
path (Path | None): template masks.g file parameter. |
|
|
|
Raises: |
|
typer.BadParameter: If a file is not supported. |
|
|
|
Returns: |
|
Path | None: Validated template masks.g file path or None. |
|
""" |
|
if not template_mask_file: |
|
return None |
|
supported_files = [ |
|
item.value for item in SupportedTemplateMaskFile |
|
] |
|
if template_mask_file.suffix not in supported_files: |
|
raise typer.BadParameter( |
|
f"The file '{template_mask_file}' is not supported. " |
|
f"Only {supported_files} are supported for template masks.g." |
|
) |
|
return template_mask_file |
|
|
|
|
|
def validate_list_initial_guess(ig_files: list[Path]) -> list[Path]: |
|
"""Extract and validate a list of initial guess files. |
|
|
|
Args: |
|
ig_files (list[Path]): List of initial guess files path. |
|
|
|
Returns: |
|
list[Path]: Extracted and validated initial guess files path. |
|
|
|
""" |
|
extracted_paths = extract_files(ig_files) |
|
initial_guess_files = [] |
|
for path in extracted_paths: |
|
validated_ig_path = validate_initial_guess(initial_guess_file=path) |
|
if validated_ig_path: |
|
initial_guess_files.append(validated_ig_path) |
|
|
|
return initial_guess_files |
|
|
|
|
|
def validate_list_template_mask(tm_files: list[Path]) -> list[Path]: |
|
"""Extract and validate a list of template mask |
|
|
|
Args: |
|
tm_files (list[Path]): List of template mask files path. |
|
|
|
Returns: |
|
list[Path]: Extracted and validated template mask files path. |
|
|
|
""" |
|
extracted_paths = extract_files(tm_files) |
|
template_mask_files = [] |
|
for path in extracted_paths: |
|
validated_tm_path = validate_template_mask(template_mask_file=path) |
|
if validated_tm_path: |
|
template_mask_files.append(validated_tm_path) |
|
|
|
return template_mask_files |
|
|