Source code for pysqa.base.models
from typing import Optional, Union
from pydantic import BaseModel, ConfigDict
[docs]
class QueueModel(BaseModel):
"""
Pydantic model for a single queue configuration.
"""
model_config = ConfigDict(extra="allow")
script: Optional[str] = None
cores_min: Optional[int] = None
cores_max: Optional[int] = None
run_time_max: Optional[int] = None
memory_max: Optional[Union[int, str]] = None
[docs]
class ConfigModel(BaseModel):
"""
Pydantic model for the overall configuration.
"""
model_config = ConfigDict(extra="allow")
queue_type: str
queue_primary: Optional[str] = None
ssh_host: Optional[str] = None
ssh_username: Optional[str] = None
known_hosts: Optional[str] = None
ssh_key: Optional[str] = None
ssh_password: Optional[str] = None
ssh_ask_for_password: Optional[str] = None
ssh_key_passphrase: Optional[str] = None
ssh_two_factor_authentication: bool = False
ssh_authenticator_service: Optional[str] = None
ssh_proxy_host: Optional[str] = None
ssh_remote_config_dir: Optional[str] = None
ssh_remote_path: Optional[str] = None
ssh_local_path: Optional[str] = None
ssh_port: Optional[int] = None
ssh_continous_connection: bool = False
ssh_delete_file_on_remote: bool = True
python_executable: Optional[str] = None
queues: dict[str, QueueModel]
[docs]
def validate_config(config: dict) -> dict:
"""
Validate the configuration dictionary against the ConfigModel.
Args:
config (dict): The configuration dictionary to validate.
Returns:
dict: The validated configuration dictionary.
"""
return ConfigModel(**config).model_dump(exclude_none=True, exclude_defaults=True)