SYMBOL INDEX (3013 symbols across 292 files) FILE: build_stream/api/auth/jwt_handler.py class JWTHandlerError (line 42) | class JWTHandlerError(Exception): class JWTCreationError (line 46) | class JWTCreationError(JWTHandlerError): class JWTValidationError (line 50) | class JWTValidationError(JWTHandlerError): class JWTExpiredError (line 54) | class JWTExpiredError(JWTValidationError): class JWTInvalidSignatureError (line 58) | class JWTInvalidSignatureError(JWTValidationError): class JWTConfig (line 63) | class JWTConfig: method from_env (line 75) | def from_env(cls) -> "JWTConfig": class TokenData (line 95) | class TokenData: class JWTHandler (line 106) | class JWTHandler: method __init__ (line 109) | def __init__(self, config: Optional[JWTConfig] = None): method _load_private_key (line 119) | def _load_private_key(self) -> str: method _load_public_key (line 142) | def _load_public_key(self) -> str: method create_access_token (line 165) | def create_access_token( method validate_token (line 221) | def validate_token(self, token: str) -> TokenData: FILE: build_stream/api/auth/password_handler.py function hash_password (line 45) | def hash_password(password: str) -> str: function verify_password (line 57) | def verify_password(password: str, hashed: str) -> bool: function check_needs_rehash (line 74) | def check_needs_rehash(hashed: str) -> bool: function generate_client_id (line 89) | def generate_client_id() -> str: function generate_client_secret (line 98) | def generate_client_secret() -> str: function generate_credentials (line 107) | def generate_credentials() -> Tuple[str, str, str]: FILE: build_stream/api/auth/routes.py function get_auth_service (line 48) | def get_auth_service() -> AuthService: function _verify_basic_auth (line 53) | def _verify_basic_auth( function register_client (line 148) | async def register_client( function request_token (line 274) | async def request_token( FILE: build_stream/api/auth/schemas.py class ClientRegistrationRequest (line 26) | class ClientRegistrationRequest(BaseModel): # pylint: disable=too-few-p... method validate_client_name (line 47) | def validate_client_name(cls, v: str) -> str: method validate_scopes (line 58) | def validate_scopes(cls, v: Optional[List[str]]) -> Optional[List[str]]: class ClientRegistrationResponse (line 68) | class ClientRegistrationResponse(BaseModel): # pylint: disable=too-few-... class AuthErrorResponse (line 112) | class AuthErrorResponse(BaseModel): # pylint: disable=too-few-public-me... class GrantType (line 140) | class GrantType(str, Enum): class TokenRequest (line 146) | class TokenRequest: # pylint: disable=too-few-public-methods method __init__ (line 149) | def __init__( method _validate_client_id (line 163) | def _validate_client_id(v: Optional[str]) -> Optional[str]: method _validate_client_secret (line 177) | def _validate_client_secret(v: Optional[str]) -> Optional[str]: class TokenResponse (line 191) | class TokenResponse(BaseModel): # pylint: disable=too-few-public-methods FILE: build_stream/api/auth/service.py class AuthenticationError (line 36) | class AuthenticationError(Exception): class ClientExistsError (line 40) | class ClientExistsError(Exception): class MaxClientsReachedError (line 44) | class MaxClientsReachedError(Exception): class RegistrationDisabledError (line 48) | class RegistrationDisabledError(Exception): class RegisteredClient (line 53) | class RegisteredClient: class TokenResult (line 65) | class TokenResult: class AuthService (line 74) | class AuthService: method __init__ (line 77) | def __init__( method verify_registration_credentials (line 92) | def verify_registration_credentials(self, username: str, password: str... method register_client (line 134) | def register_client( method verify_client_credentials (line 189) | def verify_client_credentials( method generate_token (line 232) | def generate_token( FILE: build_stream/api/build_image/dependencies.py function _get_container (line 34) | def _get_container(): function get_create_build_image_use_case (line 40) | def get_create_build_image_use_case( function get_build_image_correlation_id (line 58) | def get_build_image_correlation_id( FILE: build_stream/api/build_image/routes.py function _build_error_response (line 54) | def _build_error_response( function create_build_image (line 82) | def create_build_image( FILE: build_stream/api/build_image/schemas.py class CreateBuildImageRequest (line 21) | class CreateBuildImageRequest(BaseModel): class CreateBuildImageResponse (line 43) | class CreateBuildImageResponse(BaseModel): class BuildImageErrorResponse (line 56) | class BuildImageErrorResponse(BaseModel): FILE: build_stream/api/catalog_roles/dependencies.py function get_catalog_roles_service (line 37) | def get_catalog_roles_service( FILE: build_stream/api/catalog_roles/routes.py function get_catalog_roles (line 74) | async def get_catalog_roles( FILE: build_stream/api/catalog_roles/schemas.py class GetRolesResponse (line 22) | class GetRolesResponse(BaseModel): # pylint: disable=too-few-public-met... class ErrorResponse (line 50) | class ErrorResponse(BaseModel): # pylint: disable=too-few-public-methods FILE: build_stream/api/catalog_roles/service.py class RolesNotFoundError (line 35) | class RolesNotFoundError(Exception): class CatalogRolesService (line 39) | class CatalogRolesService: method __init__ (line 42) | def __init__( method get_roles (line 54) | def get_roles(self, job_id: JobId) -> Dict[str, any]: method _extract_roles_from_archive (line 145) | def _extract_roles_from_archive( method _validate_parse_catalog_completed (line 224) | def _validate_parse_catalog_completed(self, job_id: JobId) -> None: method _extract_catalog_metadata (line 259) | def _extract_catalog_metadata(self, job_id: JobId) -> Dict[str, any]: FILE: build_stream/api/dependencies.py function _get_container (line 47) | def _get_container(): function get_jwt_handler (line 56) | def get_jwt_handler() -> JWTHandler: function verify_token (line 65) | def verify_token( function require_scope (line 137) | def require_scope(required_scope: str): function get_db_session (line 193) | def get_db_session() -> Generator[Session, None, None]: function _create_sql_job_repo (line 219) | def _create_sql_job_repo(session: Session): function _create_sql_stage_repo (line 225) | def _create_sql_stage_repo(session: Session): function _create_sql_idempotency_repo (line 231) | def _create_sql_idempotency_repo(session: Session): function _create_sql_audit_repo (line 237) | def _create_sql_audit_repo(session: Session): function mark_stage_as_failed (line 246) | def mark_stage_as_failed( function get_job_repo (line 338) | def get_job_repo(db_session: Session = Depends(get_db_session)): function get_stage_repo (line 345) | def get_stage_repo(db_session: Session = Depends(get_db_session)): function get_audit_repo (line 351) | def get_audit_repo(db_session: Session = Depends(get_db_session)): function get_id_generator (line 366) | def get_id_generator() -> JobUUIDGenerator: function get_client_id (line 371) | def get_client_id(token_data: dict) -> ClientId: function get_correlation_id (line 386) | def get_correlation_id( function get_idempotency_key (line 405) | def get_idempotency_key( function get_create_job_use_case (line 429) | def get_create_job_use_case( FILE: build_stream/api/generate_input_files/dependencies.py function get_generate_input_files_use_case (line 38) | def get_generate_input_files_use_case( FILE: build_stream/api/generate_input_files/routes.py function generate_input_files (line 66) | async def generate_input_files( FILE: build_stream/api/generate_input_files/schemas.py class GenerateInputFilesRequest (line 22) | class GenerateInputFilesRequest(BaseModel): class ArtifactRefResponse (line 32) | class ArtifactRefResponse(BaseModel): class GenerateInputFilesResponse (line 41) | class GenerateInputFilesResponse(BaseModel): class ErrorResponse (line 49) | class ErrorResponse(BaseModel): FILE: build_stream/api/jobs/routes.py function _map_job_state_to_api_state (line 63) | def _map_job_state_to_api_state(internal_state: JobState) -> str: function _build_error_response (line 75) | def _build_error_response( function create_job (line 102) | async def create_job( function get_job (line 256) | async def get_job( function delete_job (line 464) | async def delete_job( FILE: build_stream/api/jobs/schemas.py class CreateJobRequest (line 23) | class CreateJobRequest(BaseModel): method validate_client_id (line 51) | def validate_client_id(cls, v: str) -> str: method validate_client_name (line 59) | def validate_client_name(cls, v: Optional[str]) -> Optional[str]: class CreateStageResponse (line 68) | class CreateStageResponse(BaseModel): class GetStageResponse (line 78) | class GetStageResponse(BaseModel): class CreateJobResponse (line 89) | class CreateJobResponse(BaseModel): class GetJobResponse (line 98) | class GetJobResponse(BaseModel): class ErrorResponse (line 153) | class ErrorResponse(BaseModel): method create (line 161) | def create(cls, error: str, message: str, correlation_id: str) -> "Err... FILE: build_stream/api/local_repo/dependencies.py function _get_container (line 35) | def _get_container(): function get_create_local_repo_use_case (line 41) | def get_create_local_repo_use_case( function get_local_repo_correlation_id (line 58) | def get_local_repo_correlation_id( FILE: build_stream/api/local_repo/routes.py function _build_error_response (line 48) | def _build_error_response( function create_local_repository (line 77) | def create_local_repository( FILE: build_stream/api/local_repo/schemas.py class CreateLocalRepoResponse (line 20) | class CreateLocalRepoResponse(BaseModel): class LocalRepoErrorResponse (line 30) | class LocalRepoErrorResponse(BaseModel): FILE: build_stream/api/logging_utils.py function _sanitize_message (line 58) | def _sanitize_message(message: str) -> str: function create_job_log_file (line 68) | def create_job_log_file(job_id: str) -> Optional[Path]: function remove_job_logger (line 91) | def remove_job_logger(job_id: str) -> None: function _get_job_log_file (line 105) | def _get_job_log_file(job_id: str) -> Optional[Path]: function _get_or_create_job_logger (line 113) | def _get_or_create_job_logger( function _get_or_create_auth_logger (line 145) | def _get_or_create_auth_logger() -> Optional[logging.Logger]: function log_auth_info (line 176) | def log_auth_info( function log_secure_info (line 214) | def log_secure_info( FILE: build_stream/api/parse_catalog/dependencies.py function get_parse_catalog_use_case (line 38) | def get_parse_catalog_use_case( FILE: build_stream/api/parse_catalog/routes.py function parse_catalog (line 76) | async def parse_catalog( FILE: build_stream/api/parse_catalog/schemas.py class ParseCatalogStatus (line 23) | class ParseCatalogStatus(str, Enum): class ParseCatalogResponse (line 30) | class ParseCatalogResponse(BaseModel): # pylint: disable=too-few-public... class ErrorResponse (line 58) | class ErrorResponse(BaseModel): # pylint: disable=too-few-public-methods FILE: build_stream/api/parse_catalog/service.py class CatalogParseError (line 34) | class CatalogParseError(Exception): class InvalidFileFormatError (line 38) | class InvalidFileFormatError(CatalogParseError): class InvalidJSONError (line 42) | class InvalidJSONError(CatalogParseError): class ParseResult (line 47) | class ParseResult: class ParseCatalogService (line 54) | class ParseCatalogService: # pylint: disable=too-few-public-methods method __init__ (line 57) | def __init__(self, parse_catalog_use_case=None, output_root: Optional[... method parse_catalog (line 79) | async def parse_catalog( method _process_catalog_via_orchestrator (line 109) | async def _process_catalog_via_orchestrator(self, json_data: dict, job... method _validate_file_format (line 140) | def _validate_file_format(self, filename: str) -> None: method _parse_json_content (line 148) | def _parse_json_content(self, contents: bytes) -> dict: method _validate_json_structure (line 159) | def _validate_json_structure(self, json_data: object) -> None: method _process_catalog (line 167) | async def _process_catalog(self, json_data: dict) -> ParseResult: method _write_temp_file (line 206) | def _write_temp_file(self, json_data: dict) -> str: FILE: build_stream/api/validate/dependencies.py function _get_container (line 34) | def _get_container(): function get_validate_image_on_test_use_case (line 40) | def get_validate_image_on_test_use_case( function get_validate_correlation_id (line 56) | def get_validate_correlation_id( FILE: build_stream/api/validate/routes.py function _build_error_response (line 52) | def _build_error_response( function create_validate_image_on_test (line 81) | def create_validate_image_on_test( FILE: build_stream/api/validate/schemas.py class ValidateImageOnTestRequest (line 20) | class ValidateImageOnTestRequest(BaseModel): class ValidateImageOnTestResponse (line 26) | class ValidateImageOnTestResponse(BaseModel): class ValidateImageOnTestErrorResponse (line 36) | class ValidateImageOnTestErrorResponse(BaseModel): FILE: build_stream/api/vault_client.py class VaultError (line 28) | class VaultError(Exception): class VaultDecryptError (line 32) | class VaultDecryptError(VaultError): class VaultEncryptError (line 36) | class VaultEncryptError(VaultError): class VaultNotFoundError (line 40) | class VaultNotFoundError(VaultError): class VaultClient (line 44) | class VaultClient: # pylint: disable=too-few-public-methods method __init__ (line 47) | def __init__( method _run_vault_command (line 74) | def _run_vault_command( method read_vault (line 129) | def read_vault(self, vault_path: str) -> Dict[str, Any]: method write_vault (line 150) | def write_vault(self, vault_path: str, data: Dict[str, Any]) -> None: method get_auth_config (line 217) | def get_auth_config(self) -> Dict[str, Any]: method get_oauth_clients (line 229) | def get_oauth_clients(self) -> Dict[str, Any]: method save_oauth_client (line 245) | def save_oauth_client( method get_active_client_count (line 272) | def get_active_client_count(self) -> int: method client_exists (line 281) | def client_exists(self, client_name: str) -> bool: FILE: build_stream/common/config.py class ArtifactStoreConfig (line 26) | class ArtifactStoreConfig: class PathsConfig (line 36) | class PathsConfig: class FileStoreConfig (line 42) | class FileStoreConfig: class BuildStreamConfig (line 48) | class BuildStreamConfig: function load_config (line 55) | def load_config(config_path: Optional[str] = None) -> BuildStreamConfig: FILE: build_stream/container.py function _create_artifact_store (line 68) | def _create_artifact_store(): class DevContainer (line 107) | class DevContainer(containers.DeclarativeContainer): # pylint: disable=... class ProdContainer (line 275) | class ProdContainer(containers.DeclarativeContainer): # pylint: disable... function get_container_class (line 447) | def get_container_class(): FILE: build_stream/core/artifacts/entities.py class ArtifactRecord (line 27) | class ArtifactRecord: method __post_init__ (line 58) | def __post_init__(self) -> None: FILE: build_stream/core/artifacts/exceptions.py class ArtifactDomainError (line 20) | class ArtifactDomainError(Exception): method __init__ (line 23) | def __init__(self, message: str, correlation_id: Optional[str] = None)... class ArtifactNotFoundError (line 35) | class ArtifactNotFoundError(ArtifactDomainError): method __init__ (line 38) | def __init__( class ArtifactAlreadyExistsError (line 56) | class ArtifactAlreadyExistsError(ArtifactDomainError): method __init__ (line 59) | def __init__( class ArtifactStoreError (line 77) | class ArtifactStoreError(ArtifactDomainError): method __init__ (line 80) | def __init__( class ArtifactValidationError (line 94) | class ArtifactValidationError(ArtifactDomainError): method __init__ (line 97) | def __init__( FILE: build_stream/core/artifacts/interfaces.py class ArtifactStore (line 29) | class ArtifactStore(Protocol): method store (line 43) | def store( method retrieve (line 73) | def retrieve( method exists (line 99) | def exists(self, key: ArtifactKey) -> bool: method delete (line 110) | def delete(self, key: ArtifactKey) -> bool: method generate_key (line 121) | def generate_key(self, hint: StoreHint, kind: ArtifactKind) -> Artifac... class ArtifactMetadataRepository (line 134) | class ArtifactMetadataRepository(Protocol): method save (line 140) | def save(self, record: ArtifactRecord) -> None: method find_by_job_stage_and_label (line 148) | def find_by_job_stage_and_label( method find_by_job (line 166) | def find_by_job(self, job_id: JobId) -> List[ArtifactRecord]: method delete_by_job (line 177) | def delete_by_job(self, job_id: JobId) -> int: FILE: build_stream/core/artifacts/ports.py class ArtifactStore (line 29) | class ArtifactStore(Protocol): method store (line 43) | def store( method retrieve (line 73) | def retrieve( method exists (line 99) | def exists(self, key: ArtifactKey) -> bool: method delete (line 110) | def delete(self, key: ArtifactKey) -> bool: method generate_key (line 121) | def generate_key(self, hint: StoreHint, kind: ArtifactKind) -> Artifac... class ArtifactMetadataRepository (line 134) | class ArtifactMetadataRepository(Protocol): method save (line 140) | def save(self, record: ArtifactRecord) -> None: method find_by_job_stage_and_label (line 148) | def find_by_job_stage_and_label( method find_by_job (line 166) | def find_by_job(self, job_id: JobId) -> List[ArtifactRecord]: method delete_by_job (line 177) | def delete_by_job(self, job_id: JobId) -> int: FILE: build_stream/core/artifacts/value_objects.py class ArtifactKind (line 27) | class ArtifactKind(str, Enum): class SafePath (line 39) | class SafePath: method __post_init__ (line 57) | def __post_init__(self) -> None: method from_string (line 82) | def from_string(cls, path_str: str) -> "SafePath": method __str__ (line 93) | def __str__(self) -> str: class ArtifactKey (line 99) | class ArtifactKey: method __post_init__ (line 116) | def __post_init__(self) -> None: method __str__ (line 136) | def __str__(self) -> str: class ArtifactDigest (line 142) | class ArtifactDigest: method __post_init__ (line 157) | def __post_init__(self) -> None: method __str__ (line 170) | def __str__(self) -> str: class ArtifactRef (line 176) | class ArtifactRef: method __post_init__ (line 198) | def __post_init__(self) -> None: class StoreHint (line 214) | class StoreHint: method __post_init__ (line 241) | def __post_init__(self) -> None: FILE: build_stream/core/build_image/entities.py class BuildImageRequest (line 26) | class BuildImageRequest: method to_dict (line 54) | def to_dict(self) -> Dict[str, Any]: method generate_filename (line 73) | def generate_filename(self) -> str: method get_playbook_command (line 82) | def get_playbook_command(self) -> str: FILE: build_stream/core/build_image/exceptions.py class BuildImageDomainError (line 18) | class BuildImageDomainError(Exception): method __init__ (line 21) | def __init__(self, message: str, correlation_id: str = ""): class InvalidArchitectureError (line 33) | class InvalidArchitectureError(BuildImageDomainError): class InvalidImageKeyError (line 37) | class InvalidImageKeyError(BuildImageDomainError): class InvalidFunctionalGroupsError (line 41) | class InvalidFunctionalGroupsError(BuildImageDomainError): class InventoryHostMissingError (line 45) | class InventoryHostMissingError(BuildImageDomainError): FILE: build_stream/core/build_image/repositories.py class BuildStreamConfigRepository (line 24) | class BuildStreamConfigRepository(ABC): method get_aarch64_inv_host (line 28) | def get_aarch64_inv_host(self, job_id: str) -> Optional[InventoryHost]: class BuildImageInventoryRepository (line 43) | class BuildImageInventoryRepository(ABC): method create_inventory_file (line 47) | def create_inventory_file(self, inventory_host: InventoryHost, job_id:... FILE: build_stream/core/build_image/services.py class BuildImageConfigService (line 29) | class BuildImageConfigService: method __init__ (line 32) | def __init__(self, config_repo: BuildStreamConfigRepository): method get_inventory_host (line 36) | def get_inventory_host( class BuildImageQueueService (line 64) | class BuildImageQueueService: method __init__ (line 67) | def __init__(self, queue_repo): method submit_request (line 71) | def submit_request(self, request: BuildImageRequest, correlation_id: C... FILE: build_stream/core/build_image/value_objects.py class Architecture (line 26) | class Architecture: method __post_init__ (line 40) | def __post_init__(self) -> None: method __str__ (line 50) | def __str__(self) -> str: method is_x86_64 (line 55) | def is_x86_64(self) -> bool: method is_aarch64 (line 60) | def is_aarch64(self) -> bool: class ImageKey (line 66) | class ImageKey: method __post_init__ (line 81) | def __post_init__(self) -> None: method __str__ (line 96) | def __str__(self) -> str: class FunctionalGroups (line 102) | class FunctionalGroups: method __post_init__ (line 117) | def __post_init__(self) -> None: method to_list (line 135) | def to_list(self) -> List[str]: method __str__ (line 139) | def __str__(self) -> str: class InventoryHost (line 145) | class InventoryHost: method __post_init__ (line 160) | def __post_init__(self) -> None: method __str__ (line 175) | def __str__(self) -> str: FILE: build_stream/core/catalog/adapter.py function _snake_case (line 55) | def _snake_case(name: str) -> str: function _package_key (line 59) | def _package_key(pkg: Package) -> Tuple[str, str, str]: function _package_to_dict (line 67) | def _package_to_dict(pkg: Package) -> Dict[str, str]: function build_default_packages_config (line 76) | def build_default_packages_config(base_os: FeatureList) -> Dict: function _build_subconfig_from_base_os (line 90) | def _build_subconfig_from_base_os( function build_nfs_config (line 117) | def build_nfs_config(base_os: FeatureList) -> Dict | None: function build_openldap_config (line 122) | def build_openldap_config(base_os: FeatureList) -> Dict | None: function build_openmpi_config (line 127) | def build_openmpi_config(base_os: FeatureList) -> Dict | None: function build_service_k8s_config (line 135) | def build_service_k8s_config(functional: FeatureList) -> Dict: function build_slurm_custom_config (line 188) | def build_slurm_custom_config(functional: FeatureList) -> Dict: function build_infra_configs (line 260) | def build_infra_configs(infra: FeatureList) -> Dict[str, Dict]: function write_config_files (line 290) | def write_config_files(configs: Dict[str, Dict], output_dir: str) -> None: function generate_all_configs (line 327) | def generate_all_configs( function generate_omnia_json_from_catalog (line 396) | def generate_omnia_json_from_catalog( FILE: build_stream/core/catalog/adapter_policy.py function _validate_input_policy_and_schema_paths (line 46) | def _validate_input_policy_and_schema_paths( function validate_policy_config (line 62) | def validate_policy_config(policy_config: Any, schema_config: Any, polic... function discover_architectures (line 77) | def discover_architectures(input_dir: str) -> List[str]: function discover_os_versions (line 88) | def discover_os_versions(input_dir: str, arch: str) -> List[Tuple[str, s... function _has_non_empty_cluster (line 112) | def _has_non_empty_cluster(target_data: Dict) -> bool: function _collect_non_empty_subgroups (line 120) | def _collect_non_empty_subgroups( function _extract_version_from_target_config (line 131) | def _extract_version_from_target_config( function generate_software_config (line 160) | def generate_software_config( function _package_key (line 277) | def _package_key(pkg: Dict) -> Tuple[str, str, str]: function transform_package (line 299) | def transform_package(pkg: Dict, transform_config: Optional[Dict]) -> Dict: function apply_substring_filter (line 324) | def apply_substring_filter( function apply_allowlist_filter (line 351) | def apply_allowlist_filter( function apply_field_in_filter (line 380) | def apply_field_in_filter( function apply_any_of_filter (line 417) | def apply_any_of_filter( function compute_common_packages (line 437) | def compute_common_packages( function apply_extract_common_filter (line 470) | def apply_extract_common_filter( function apply_extract_unique_filter (line 495) | def apply_extract_unique_filter( function apply_filter (line 514) | def apply_filter( function merge_transform (line 542) | def merge_transform(base: Optional[Dict], override: Optional[Dict]) -> O... function compute_common_keys_from_roles (line 555) | def compute_common_keys_from_roles( function derive_common_role (line 573) | def derive_common_role( function check_conditions (line 602) | def check_conditions( function process_target_spec (line 627) | def process_target_spec( function write_config_file (line 723) | def write_config_file(file_path: str, config: Dict) -> None: function generate_configs_from_policy (line 752) | def generate_configs_from_policy( function main (line 852) | def main(): FILE: build_stream/core/catalog/exceptions.py class CatalogParseError (line 20) | class CatalogParseError(Exception): method __init__ (line 23) | def __init__(self, message: str, correlation_id: Optional[str] = None)... class InvalidFileFormatError (line 29) | class InvalidFileFormatError(CatalogParseError): class InvalidJSONError (line 33) | class InvalidJSONError(CatalogParseError): class CatalogSchemaValidationError (line 37) | class CatalogSchemaValidationError(CatalogParseError): method __init__ (line 40) | def __init__( class FileTooLargeError (line 50) | class FileTooLargeError(CatalogParseError): method __init__ (line 53) | def __init__( class AdapterPolicyValidationError (line 67) | class AdapterPolicyValidationError(CatalogParseError): method __init__ (line 70) | def __init__( class ConfigGenerationError (line 80) | class ConfigGenerationError(CatalogParseError): FILE: build_stream/core/catalog/generator.py function _validate_catalog_and_schema_paths (line 48) | def _validate_catalog_and_schema_paths(catalog_path: str, schema_path: s... function _arch_suffix (line 62) | def _arch_suffix(architecture) -> str: class Package (line 77) | class Package: class Feature (line 91) | class Feature: class FeatureList (line 99) | class FeatureList: function _filter_featurelist_for_arch (line 105) | def _filter_featurelist_for_arch(feature_list: FeatureList, arch: str) -... function _discover_arch_os_version_from_catalog (line 144) | def _discover_arch_os_version_from_catalog(catalog: Catalog) -> List[Tup... function generate_functional_layer_json (line 177) | def generate_functional_layer_json(catalog: Catalog) -> FeatureList: function generate_infrastructure_json (line 216) | def generate_infrastructure_json(catalog: Catalog) -> FeatureList: function generate_drivers_json (line 255) | def generate_drivers_json(catalog: Catalog) -> FeatureList: function generate_base_os_json (line 328) | def generate_base_os_json(catalog: Catalog) -> FeatureList: function generate_miscellaneous_json (line 367) | def generate_miscellaneous_json(catalog: Catalog) -> FeatureList: function _package_common_dict (line 405) | def _package_common_dict(pkg: Package) -> Dict: function _package_to_json_dict (line 423) | def _package_to_json_dict(pkg: Package) -> Dict: function _package_from_json_dict (line 429) | def _package_from_json_dict(data: Dict) -> Package: function serialize_json (line 441) | def serialize_json(feature_list: FeatureList, output_path: str): function deserialize_json (line 484) | def deserialize_json(input_path: str) -> FeatureList: function get_functional_layer_roles_from_file (line 520) | def get_functional_layer_roles_from_file( function get_package_list (line 563) | def get_package_list( function generate_root_json_from_catalog (line 703) | def generate_root_json_from_catalog( FILE: build_stream/core/catalog/models.py class Package (line 24) | class Package: class FunctionalPackage (line 42) | class FunctionalPackage(Package): class OsPackage (line 46) | class OsPackage(Package): class InfrastructurePackage (line 50) | class InfrastructurePackage: method __init__ (line 53) | def __init__(self, id, name, version, uri, architecture, config, type,... class Driver (line 65) | class Driver: method __init__ (line 68) | def __init__(self, id, name, version, uri, architecture, config, type): class Catalog (line 78) | class Catalog: FILE: build_stream/core/catalog/parser.py function ParseCatalog (line 33) | def ParseCatalog(file_path: str, schema_path: str = _DEFAULT_SCHEMA_PATH... FILE: build_stream/core/catalog/tests/test_adapter_cli_defaults.py class TestAdapterDefaults (line 29) | class TestAdapterDefaults(unittest.TestCase): method test_default_schema_path_points_to_resources (line 30) | def test_default_schema_path_points_to_resources(self): method test_generate_omnia_json_with_defaults_writes_output (line 35) | def test_generate_omnia_json_with_defaults_writes_output(self): FILE: build_stream/core/catalog/tests/test_adapter_policy.py class TestValidatePolicyConfig (line 52) | class TestValidatePolicyConfig(unittest.TestCase): method setUp (line 55) | def setUp(self): method test_valid_policy_passes_validation (line 73) | def test_valid_policy_passes_validation(self): method test_missing_version_raises_error (line 82) | def test_missing_version_raises_error(self): method test_missing_targets_raises_error (line 95) | def test_missing_targets_raises_error(self): method test_invalid_target_spec_raises_error (line 108) | def test_invalid_target_spec_raises_error(self): method test_allowlist_filter_policy_validates (line 125) | def test_allowlist_filter_policy_validates(self): method test_field_in_filter_policy_validates (line 158) | def test_field_in_filter_policy_validates(self): method test_any_of_filter_requires_filters (line 191) | def test_any_of_filter_requires_filters(self): method test_any_of_filter_policy_validates (line 218) | def test_any_of_filter_policy_validates(self): class TestDiscoverArchitectures (line 253) | class TestDiscoverArchitectures(unittest.TestCase): method test_discovers_architecture_directories (line 256) | def test_discovers_architecture_directories(self): method test_returns_empty_for_nonexistent_dir (line 268) | def test_returns_empty_for_nonexistent_dir(self): method test_returns_empty_for_empty_dir (line 273) | def test_returns_empty_for_empty_dir(self): class TestDiscoverOsVersions (line 280) | class TestDiscoverOsVersions(unittest.TestCase): method test_discovers_os_and_versions (line 283) | def test_discovers_os_and_versions(self): method test_returns_empty_for_nonexistent_arch (line 296) | def test_returns_empty_for_nonexistent_arch(self): class TestTransformPackage (line 303) | class TestTransformPackage(unittest.TestCase): method test_no_transform_returns_copy (line 306) | def test_no_transform_returns_copy(self): method test_exclude_fields (line 313) | def test_exclude_fields(self): method test_rename_fields (line 320) | def test_rename_fields(self): method test_exclude_and_rename_combined (line 327) | def test_exclude_and_rename_combined(self): class TestApplySubstringFilter (line 338) | class TestApplySubstringFilter(unittest.TestCase): method test_filters_by_substring (line 341) | def test_filters_by_substring(self): method test_case_insensitive_by_default (line 356) | def test_case_insensitive_by_default(self): method test_case_sensitive_when_specified (line 369) | def test_case_sensitive_when_specified(self): method test_empty_values_returns_all (line 384) | def test_empty_values_returns_all(self): class TestAllowlistAndFieldFilters (line 392) | class TestAllowlistAndFieldFilters(unittest.TestCase): method test_allowlist_matches_exact_package_names (line 393) | def test_allowlist_matches_exact_package_names(self): method test_field_in_matches_classification_field (line 409) | def test_field_in_matches_classification_field(self): method test_any_of_combines_multiple_strategies (line 425) | def test_any_of_combines_multiple_strategies(self): class TestComputeCommonPackages (line 464) | class TestComputeCommonPackages(unittest.TestCase): method test_finds_common_packages (line 467) | def test_finds_common_packages(self): method test_respects_min_occurrences (line 484) | def test_respects_min_occurrences(self): class TestMergeTransform (line 497) | class TestMergeTransform(unittest.TestCase): method test_none_inputs_return_none (line 500) | def test_none_inputs_return_none(self): method test_base_only (line 504) | def test_base_only(self): method test_override_only (line 509) | def test_override_only(self): method test_override_wins (line 514) | def test_override_wins(self): class TestCheckConditions (line 522) | class TestCheckConditions(unittest.TestCase): method test_no_conditions_returns_true (line 525) | def test_no_conditions_returns_true(self): method test_architecture_condition (line 529) | def test_architecture_condition(self): method test_os_family_condition (line 535) | def test_os_family_condition(self): method test_os_version_condition (line 541) | def test_os_version_condition(self): method test_multiple_conditions_all_must_pass (line 547) | def test_multiple_conditions_all_must_pass(self): class TestDeriveCommonRole (line 558) | class TestDeriveCommonRole(unittest.TestCase): method test_derives_common_packages (line 561) | def test_derives_common_packages(self): method test_removes_from_sources_when_specified (line 578) | def test_removes_from_sources_when_specified(self): method test_keeps_sources_when_not_removing (line 594) | def test_keeps_sources_when_not_removing(self): class TestWriteConfigFile (line 610) | class TestWriteConfigFile(unittest.TestCase): method test_writes_valid_json (line 613) | def test_writes_valid_json(self): method test_creates_parent_directories (line 628) | def test_creates_parent_directories(self): class TestGenerateConfigsFromPolicy (line 637) | class TestGenerateConfigsFromPolicy(unittest.TestCase): method setUp (line 640) | def setUp(self): method test_generates_output_files (line 644) | def test_generates_output_files(self): method test_generates_openldap_with_any_of_filter (line 689) | def test_generates_openldap_with_any_of_filter(self): method test_invalid_policy_raises_error (line 761) | def test_invalid_policy_raises_error(self): method test_missing_input_dir_raises_file_not_found (line 783) | def test_missing_input_dir_raises_file_not_found(self): method test_missing_policy_file_raises_file_not_found (line 797) | def test_missing_policy_file_raises_file_not_found(self): method test_missing_schema_file_raises_file_not_found (line 814) | def test_missing_schema_file_raises_file_not_found(self): class TestDefaultPaths (line 832) | class TestDefaultPaths(unittest.TestCase): method test_default_policy_path_exists (line 835) | def test_default_policy_path_exists(self): method test_default_schema_path_exists (line 842) | def test_default_schema_path_exists(self): method test_default_policy_validates_against_schema (line 849) | def test_default_policy_validates_against_schema(self): class TestProcessTargetSpec (line 865) | class TestProcessTargetSpec(unittest.TestCase): method test_processes_simple_target (line 868) | def test_processes_simple_target(self): method test_skips_when_conditions_not_met (line 896) | def test_skips_when_conditions_not_met(self): method test_applies_transform (line 920) | def test_applies_transform(self): FILE: build_stream/core/catalog/tests/test_generator_cli_defaults.py class TestGeneratorDefaults (line 29) | class TestGeneratorDefaults(unittest.TestCase): method test_default_schema_path_points_to_resources (line 30) | def test_default_schema_path_points_to_resources(self): method test_generate_root_json_with_defaults_writes_output (line 35) | def test_generate_root_json_with_defaults_writes_output(self): FILE: build_stream/core/catalog/tests/test_generator_package_list.py class TestGetPackageList (line 38) | class TestGetPackageList(unittest.TestCase): method setUp (line 41) | def setUp(self): method test_get_packages_for_valid_single_role (line 48) | def test_get_packages_for_valid_single_role(self): method test_get_packages_for_all_roles_when_role_is_none (line 59) | def test_get_packages_for_all_roles_when_role_is_none(self): method test_invalid_role_raises_value_error (line 76) | def test_invalid_role_raises_value_error(self): method test_empty_role_raises_value_error (line 83) | def test_empty_role_raises_value_error(self): method test_file_not_found_raises_error (line 90) | def test_file_not_found_raises_error(self): method test_malformed_json_raises_error (line 95) | def test_malformed_json_raises_error(self): method test_schema_validation_failure_raises_error (line 105) | def test_schema_validation_failure_raises_error(self): method test_empty_feature_list_returns_empty_list (line 128) | def test_empty_feature_list_returns_empty_list(self): method test_package_attributes_are_complete (line 139) | def test_package_attributes_are_complete(self): method test_package_with_uri_and_tag (line 153) | def test_package_with_uri_and_tag(self): method test_role_with_spaces_in_name (line 170) | def test_role_with_spaces_in_name(self): method test_all_roles_returns_correct_package_counts (line 177) | def test_all_roles_returns_correct_package_counts(self): method test_case_insensitive_role_matching_lowercase (line 192) | def test_case_insensitive_role_matching_lowercase(self): method test_case_insensitive_role_matching_uppercase (line 200) | def test_case_insensitive_role_matching_uppercase(self): method test_case_insensitive_role_matching_mixed_case (line 207) | def test_case_insensitive_role_matching_mixed_case(self): method test_case_insensitive_role_matching_preserves_original_name (line 214) | def test_case_insensitive_role_matching_preserves_original_name(self): FILE: build_stream/core/catalog/tests/test_generator_roles.py class TestGetFunctionalLayerRolesFromFile (line 34) | class TestGetFunctionalLayerRolesFromFile(unittest.TestCase): method test_returns_all_role_names_from_fixture (line 35) | def test_returns_all_role_names_from_fixture(self): method test_empty_feature_list_returns_empty_roles (line 54) | def test_empty_feature_list_returns_empty_roles(self): method test_invalid_functional_layer_json_fails_schema_validation (line 64) | def test_invalid_functional_layer_json_fails_schema_validation(self): FILE: build_stream/core/catalog/tests/test_parser_defaults.py class TestParseCatalogDefaults (line 28) | class TestParseCatalogDefaults(unittest.TestCase): method test_default_schema_path_points_to_resources (line 29) | def test_default_schema_path_points_to_resources(self): method test_parse_catalog_with_explicit_paths_uses_fixture (line 34) | def test_parse_catalog_with_explicit_paths_uses_fixture(self): FILE: build_stream/core/catalog/utils.py function _configure_logging (line 23) | def _configure_logging(log_file: Optional[str] = None, log_level: int = ... function load_json_file (line 58) | def load_json_file(file_path: str) -> Any: FILE: build_stream/core/exceptions.py class ClientDisabledError (line 18) | class ClientDisabledError(Exception): class InvalidClientError (line 22) | class InvalidClientError(Exception): class InvalidScopeError (line 26) | class InvalidScopeError(Exception): class TokenCreationError (line 30) | class TokenCreationError(Exception): FILE: build_stream/core/jobs/entities/audit.py class AuditEvent (line 24) | class AuditEvent: FILE: build_stream/core/jobs/entities/idempotency.py class IdempotencyRecord (line 24) | class IdempotencyRecord: method is_expired (line 46) | def is_expired(self, current_time: datetime) -> bool: method matches_fingerprint (line 57) | def matches_fingerprint(self, fingerprint: RequestFingerprint) -> bool: FILE: build_stream/core/jobs/entities/job.py class Job (line 26) | class Job: method __post_init__ (line 54) | def __post_init__(self) -> None: method _validate_transition (line 60) | def _validate_transition( method _update_metadata (line 90) | def _update_metadata(self) -> None: method start (line 95) | def start(self) -> None: method complete (line 106) | def complete(self) -> None: method fail (line 117) | def fail(self) -> None: method cancel (line 128) | def cancel(self) -> None: method tombstone (line 144) | def tombstone(self) -> None: method is_completed (line 152) | def is_completed(self) -> bool: method is_failed (line 156) | def is_failed(self) -> bool: method is_cancelled (line 160) | def is_cancelled(self) -> bool: method is_in_progress (line 164) | def is_in_progress(self) -> bool: FILE: build_stream/core/jobs/entities/stage.py class Stage (line 26) | class Stage: method _initialize_timestamps (line 56) | def _initialize_timestamps(self) -> None: method _validate_transition (line 62) | def _validate_transition( method _mark_started (line 92) | def _mark_started(self) -> None: method _mark_ended (line 97) | def _mark_ended(self) -> None: method start (line 102) | def start(self) -> None: method complete (line 113) | def complete(self) -> None: method fail (line 124) | def fail(self, error_code: str, error_summary: str) -> None: method skip (line 141) | def skip(self) -> None: method cancel (line 152) | def cancel(self) -> None: FILE: build_stream/core/jobs/exceptions.py class JobDomainError (line 20) | class JobDomainError(Exception): method __init__ (line 23) | def __init__(self, message: str, correlation_id: Optional[str] = None)... class JobNotFoundError (line 35) | class JobNotFoundError(JobDomainError): method __init__ (line 38) | def __init__(self, job_id: str, correlation_id: Optional[str] = None) ... class JobAlreadyExistsError (line 52) | class JobAlreadyExistsError(JobDomainError): method __init__ (line 55) | def __init__(self, job_id: str, correlation_id: Optional[str] = None) ... class InvalidStateTransitionError (line 69) | class InvalidStateTransitionError(JobDomainError): method __init__ (line 72) | def __init__( class TerminalStateViolationError (line 100) | class TerminalStateViolationError(JobDomainError): method __init__ (line 103) | def __init__( class OptimisticLockError (line 127) | class OptimisticLockError(JobDomainError): method __init__ (line 130) | def __init__( class IdempotencyConflictError (line 158) | class IdempotencyConflictError(JobDomainError): method __init__ (line 161) | def __init__( class StageAlreadyCompletedError (line 183) | class StageAlreadyCompletedError(JobDomainError): method __init__ (line 186) | def __init__( class UpstreamStageNotCompletedError (line 207) | class UpstreamStageNotCompletedError(JobDomainError): method __init__ (line 210) | def __init__( class StageNotFoundError (line 235) | class StageNotFoundError(JobDomainError): method __init__ (line 238) | def __init__( FILE: build_stream/core/jobs/repositories.py class JobIdGenerator (line 28) | class JobIdGenerator(Protocol): method generate (line 31) | def generate(self) -> JobId: class JobRepository (line 43) | class JobRepository(Protocol): method save (line 46) | def save(self, job: Job) -> None: method find_by_id (line 57) | def find_by_id(self, job_id: JobId) -> Optional[Job]: method exists (line 68) | def exists(self, job_id: JobId) -> bool: class StageRepository (line 80) | class StageRepository(Protocol): method save (line 83) | def save(self, stage: Stage) -> None: method save_all (line 94) | def save_all(self, stages: List[Stage]) -> None: method find_by_job_and_name (line 105) | def find_by_job_and_name( method find_all_by_job (line 121) | def find_all_by_job(self, job_id: JobId) -> List[Stage]: class IdempotencyRepository (line 133) | class IdempotencyRepository(Protocol): method save (line 136) | def save(self, record: IdempotencyRecord) -> None: method find_by_key (line 144) | def find_by_key(self, key: IdempotencyKey) -> Optional[IdempotencyReco... class AuditEventRepository (line 156) | class AuditEventRepository(Protocol): method save (line 159) | def save(self, event: AuditEvent) -> None: method find_by_job (line 167) | def find_by_job(self, job_id: JobId) -> List[AuditEvent]: class UUIDGenerator (line 179) | class UUIDGenerator: method generate (line 182) | def generate(self) -> uuid.UUID: FILE: build_stream/core/jobs/services.py class FingerprintService (line 30) | class FingerprintService: method compute (line 37) | def compute(request_body: Dict[str, Any]) -> RequestFingerprint: class JobStateHelper (line 63) | class JobStateHelper: method handle_stage_failure (line 71) | def handle_stage_failure( method handle_job_completion (line 154) | def handle_job_completion( FILE: build_stream/core/jobs/value_objects.py class JobId (line 28) | class JobId: method __post_init__ (line 42) | def __post_init__(self) -> None: method __str__ (line 56) | def __str__(self) -> str: class CorrelationId (line 62) | class CorrelationId: method __post_init__ (line 76) | def __post_init__(self) -> None: method __str__ (line 89) | def __str__(self) -> str: class StageType (line 94) | class StageType(str, Enum): class StageName (line 112) | class StageName: method __post_init__ (line 126) | def __post_init__(self) -> None: method as_enum (line 141) | def as_enum(self) -> StageType: method __str__ (line 149) | def __str__(self) -> str: class IdempotencyKey (line 155) | class IdempotencyKey: method __post_init__ (line 170) | def __post_init__(self) -> None: method __str__ (line 179) | def __str__(self) -> str: class RequestFingerprint (line 185) | class RequestFingerprint: method __post_init__ (line 200) | def __post_init__(self) -> None: method __str__ (line 213) | def __str__(self) -> str: class ClientId (line 219) | class ClientId: method __post_init__ (line 233) | def __post_init__(self) -> None: method __str__ (line 243) | def __str__(self) -> str: class JobState (line 248) | class JobState(str, Enum): method is_terminal (line 260) | def is_terminal(self) -> bool: class StageState (line 269) | class StageState(str, Enum): method is_terminal (line 282) | def is_terminal(self) -> bool: FILE: build_stream/core/localrepo/entities.py class PlaybookRequest (line 27) | class PlaybookRequest: method to_dict (line 52) | def to_dict(self) -> Dict[str, Any]: method generate_filename (line 65) | def generate_filename(self) -> str: class PlaybookResult (line 76) | class PlaybookResult: method is_success (line 114) | def is_success(self) -> bool: method is_failed (line 119) | def is_failed(self) -> bool: method from_dict (line 124) | def from_dict(data: Dict[str, Any]) -> "PlaybookResult": FILE: build_stream/core/localrepo/exceptions.py class LocalRepoDomainError (line 20) | class LocalRepoDomainError(Exception): method __init__ (line 23) | def __init__(self, message: str, correlation_id: Optional[str] = None)... class QueueUnavailableError (line 37) | class QueueUnavailableError(LocalRepoDomainError): method __init__ (line 40) | def __init__( class InputFilesMissingError (line 61) | class InputFilesMissingError(LocalRepoDomainError): method __init__ (line 64) | def __init__( class InputDirectoryInvalidError (line 86) | class InputDirectoryInvalidError(LocalRepoDomainError): method __init__ (line 89) | def __init__( FILE: build_stream/core/localrepo/repositories.py class PlaybookQueueRequestRepository (line 27) | class PlaybookQueueRequestRepository(Protocol): method write_request (line 30) | def write_request(self, request: PlaybookRequest) -> Path: method is_available (line 44) | def is_available(self) -> bool: class PlaybookQueueResultRepository (line 53) | class PlaybookQueueResultRepository(Protocol): method get_unprocessed_results (line 56) | def get_unprocessed_results(self) -> List[Path]: method read_result (line 64) | def read_result(self, result_path: Path) -> PlaybookResult: method archive_result (line 78) | def archive_result(self, result_path: Path) -> None: method is_available (line 86) | def is_available(self) -> bool: class InputDirectoryRepository (line 95) | class InputDirectoryRepository(Protocol): method get_source_input_repository_path (line 98) | def get_source_input_repository_path(self, job_id: str) -> Path: method get_destination_input_repository_path (line 109) | def get_destination_input_repository_path(self) -> Path: method validate_input_directory (line 117) | def validate_input_directory(self, path: Path) -> bool: FILE: build_stream/core/localrepo/services.py class InputFileService (line 39) | class InputFileService: method __init__ (line 46) | def __init__(self, input_repo: InputDirectoryRepository) -> None: method prepare_playbook_input (line 54) | def prepare_playbook_input( method _reset_software_csv_files (line 132) | def _reset_software_csv_files(self) -> None: class PlaybookQueueRequestService (line 181) | class PlaybookQueueRequestService: method __init__ (line 188) | def __init__(self, request_repo: PlaybookQueueRequestRepository) -> None: method submit_request (line 196) | def submit_request( class PlaybookQueueResultService (line 229) | class PlaybookQueueResultService: method __init__ (line 236) | def __init__(self, result_repo: PlaybookQueueResultRepository) -> None: method poll_results (line 244) | def poll_results( FILE: build_stream/core/localrepo/value_objects.py class PlaybookPath (line 26) | class PlaybookPath: method __post_init__ (line 42) | def __post_init__(self) -> None: method __str__ (line 70) | def __str__(self) -> str: class ExtraVars (line 76) | class ExtraVars: method __post_init__ (line 93) | def __post_init__(self) -> None: method to_dict (line 109) | def to_dict(self) -> Dict[str, Any]: method __str__ (line 113) | def __str__(self) -> str: class ExecutionTimeout (line 119) | class ExecutionTimeout: method __post_init__ (line 135) | def __post_init__(self) -> None: method default (line 148) | def default(cls) -> "ExecutionTimeout": method to_seconds (line 152) | def to_seconds(self) -> int: method __str__ (line 156) | def __str__(self) -> str: FILE: build_stream/core/validate/entities.py class ValidateImageOnTestRequest (line 25) | class ValidateImageOnTestRequest: method to_dict (line 51) | def to_dict(self) -> Dict[str, Any]: method generate_filename (line 64) | def generate_filename(self) -> str: FILE: build_stream/core/validate/exceptions.py class ValidateDomainError (line 18) | class ValidateDomainError(Exception): method __init__ (line 21) | def __init__(self, message: str, correlation_id: str = ""): class EnvironmentUnavailableError (line 33) | class EnvironmentUnavailableError(ValidateDomainError): class ValidationExecutionError (line 37) | class ValidationExecutionError(ValidateDomainError): class StageGuardViolationError (line 41) | class StageGuardViolationError(ValidateDomainError): FILE: build_stream/core/validate/services.py class ValidateQueueService (line 25) | class ValidateQueueService: method __init__ (line 28) | def __init__(self, queue_repo) -> None: method submit_request (line 36) | def submit_request( FILE: build_stream/generate_catalog.py function load_json (line 41) | def load_json(filepath): function _is_infra_package_name (line 47) | def _is_infra_package_name(pkg_name: str) -> bool: function load_software_config (line 60) | def load_software_config(config_path): function _extract_arch_from_pxe_group (line 106) | def _extract_arch_from_pxe_group(pxe_group: str): function load_pxe_functional_groups (line 114) | def load_pxe_functional_groups(pxe_file): function _append_unique_source (line 128) | def _append_unique_source(pkg_sources, source): function _render_templated_url (line 133) | def _render_templated_url(template: str, bundle_name: str, versions_by_n... function collect_packages_from_config (line 160) | def collect_packages_from_config(config_dir, allowed_bundles_by_arch, ve... function generate_catalog (line 269) | def generate_catalog(input_dir, software_config_path, pxe_mapping_file): function build_functional_layers (line 381) | def build_functional_layers(functional_packages, pxe_groups, role_packag... function map_packages_to_roles (line 418) | def map_packages_to_roles(packages, config_dir, allowed_bundles, bundle_... function create_package_entry (line 484) | def create_package_entry(pkg_data): function create_infra_package_entry (line 506) | def create_infra_package_entry(pkg_data): FILE: build_stream/generate_catalog_examples.py function resolve_base_and_paths (line 29) | def resolve_base_and_paths(base_dir_arg: str): function copy_mapping_to_input (line 53) | def copy_mapping_to_input(mapping_dir: Path, input_dir: Path): function generate_example_catalogs (line 67) | def generate_example_catalogs(base_dir: str): function main (line 129) | def main(): FILE: build_stream/infra/artifact_store/file_artifact_store.py class FileArtifactStore (line 39) | class FileArtifactStore: method __init__ (line 54) | def __init__( method store (line 82) | def store( method retrieve (line 137) | def retrieve( method exists (line 192) | def exists(self, key: ArtifactKey) -> bool: method delete (line 204) | def delete(self, key: ArtifactKey) -> bool: method generate_key (line 223) | def generate_key(self, hint: StoreHint, kind: ArtifactKind) -> Artifac... method _get_artifact_path (line 244) | def _get_artifact_path(self, key: ArtifactKey) -> Path: method _cleanup_empty_dirs (line 255) | def _cleanup_empty_dirs(self, directory: Path) -> None: method _resolve_content (line 271) | def _resolve_content( method _zip_file_map (line 323) | def _zip_file_map(self, file_map: Dict[str, bytes]) -> bytes: method _zip_directory (line 338) | def _zip_directory(self, directory: Path) -> bytes: method _validate_content_type (line 360) | def _validate_content_type(self, content_type: str) -> None: method _validate_size (line 375) | def _validate_size(self, raw_bytes: bytes) -> None: FILE: build_stream/infra/artifact_store/in_memory_artifact_metadata.py class InMemoryArtifactMetadataRepository (line 23) | class InMemoryArtifactMetadataRepository: method __init__ (line 30) | def __init__(self) -> None: method save (line 34) | def save(self, record: ArtifactRecord) -> None: method find_by_job_stage_and_label (line 47) | def find_by_job_stage_and_label( method find_by_job (line 66) | def find_by_job(self, job_id: JobId) -> List[ArtifactRecord]: method delete_by_job (line 82) | def delete_by_job(self, job_id: JobId) -> int: FILE: build_stream/infra/artifact_store/in_memory_artifact_store.py class InMemoryArtifactStore (line 39) | class InMemoryArtifactStore: method __init__ (line 54) | def __init__( method store (line 73) | def store( method retrieve (line 119) | def retrieve( method exists (line 160) | def exists(self, key: ArtifactKey) -> bool: method delete (line 171) | def delete(self, key: ArtifactKey) -> bool: method generate_key (line 185) | def generate_key(self, hint: StoreHint, kind: ArtifactKind) -> Artifac... method _resolve_content (line 206) | def _resolve_content( method _zip_file_map (line 258) | def _zip_file_map(self, file_map: Dict[str, bytes]) -> bytes: method _zip_directory (line 273) | def _zip_directory(self, directory: Path) -> bytes: method _validate_content_type (line 295) | def _validate_content_type(self, content_type: str) -> None: method _validate_size (line 310) | def _validate_size(self, raw_bytes: bytes) -> None: FILE: build_stream/infra/db/alembic/env.py function run_migrations_offline (line 42) | def run_migrations_offline() -> None: function run_migrations_online (line 60) | def run_migrations_online() -> None: FILE: build_stream/infra/db/alembic/versions/20260219_001_create_jobs_table.py function upgrade (line 35) | def upgrade() -> None: function downgrade (line 59) | def downgrade() -> None: FILE: build_stream/infra/db/alembic/versions/20260219_002_create_stages_table.py function upgrade (line 35) | def upgrade() -> None: function downgrade (line 65) | def downgrade() -> None: FILE: build_stream/infra/db/alembic/versions/20260219_003_create_idempotency_keys_table.py function upgrade (line 35) | def upgrade() -> None: function downgrade (line 51) | def downgrade() -> None: FILE: build_stream/infra/db/alembic/versions/20260219_004_create_audit_events_table.py function upgrade (line 36) | def upgrade() -> None: function downgrade (line 61) | def downgrade() -> None: FILE: build_stream/infra/db/alembic/versions/20260219_005_create_artifact_metadata_table.py function upgrade (line 35) | def upgrade() -> None: function downgrade (line 57) | def downgrade() -> None: FILE: build_stream/infra/db/config.py class DatabaseConfig (line 21) | class DatabaseConfig: method __init__ (line 24) | def __init__(self): method validate (line 31) | def validate(self) -> None: FILE: build_stream/infra/db/mappers.py class JobMapper (line 40) | class JobMapper: method to_orm (line 44) | def to_orm(job: Job) -> JobModel: method to_domain (line 66) | def to_domain(model: JobModel) -> Job: class StageMapper (line 88) | class StageMapper: method to_orm (line 92) | def to_orm(stage: Stage) -> StageModel: method to_domain (line 115) | def to_domain(model: StageModel) -> Stage: class IdempotencyRecordMapper (line 138) | class IdempotencyRecordMapper: method to_orm (line 142) | def to_orm(record: IdempotencyRecord) -> IdempotencyKeyModel: method to_domain (line 161) | def to_domain(model: IdempotencyKeyModel) -> IdempotencyRecord: class AuditEventMapper (line 180) | class AuditEventMapper: method to_orm (line 184) | def to_orm(event: AuditEvent) -> AuditEventModel: method to_domain (line 204) | def to_domain(model: AuditEventModel) -> AuditEvent: FILE: build_stream/infra/db/models.py class JobModel (line 39) | class JobModel(Base): class StageModel (line 81) | class StageModel(Base): class IdempotencyKeyModel (line 126) | class IdempotencyKeyModel(Base): class AuditEventModel (line 153) | class AuditEventModel(Base): class ArtifactMetadata (line 184) | class ArtifactMetadata(Base): FILE: build_stream/infra/db/repositories.py class SqlJobRepository (line 45) | class SqlJobRepository: method __init__ (line 48) | def __init__(self, session: Session) -> None: method save (line 56) | def save(self, job: Job) -> None: method find_by_id (line 100) | def find_by_id(self, job_id: JobId) -> Optional[Job]: method exists (line 114) | def exists(self, job_id: JobId) -> bool: class SqlStageRepository (line 128) | class SqlStageRepository: method __init__ (line 131) | def __init__(self, session: Session) -> None: method save (line 139) | def save(self, stage: Stage) -> None: method save_all (line 188) | def save_all(self, stages: List[Stage]) -> None: method find_by_job_and_name (line 200) | def find_by_job_and_name( method find_all_by_job (line 223) | def find_all_by_job(self, job_id: JobId) -> List[Stage]: class SqlIdempotencyRepository (line 241) | class SqlIdempotencyRepository: method __init__ (line 244) | def __init__(self, session: Session) -> None: method save (line 252) | def save(self, record: IdempotencyRecord) -> None: method find_by_key (line 262) | def find_by_key(self, key: IdempotencyKey) -> Optional[IdempotencyReco... class SqlAuditEventRepository (line 277) | class SqlAuditEventRepository: method __init__ (line 280) | def __init__(self, session: Session) -> None: method save (line 288) | def save(self, event: AuditEvent) -> None: method find_by_job (line 298) | def find_by_job(self, job_id: JobId) -> List[AuditEvent]: class SqlArtifactMetadataRepository (line 316) | class SqlArtifactMetadataRepository(ArtifactMetadataRepository): method __init__ (line 319) | def __init__(self, session: Session): method save (line 323) | def save(self, record: ArtifactRecord) -> None: method get_by_job_id_and_label (line 344) | def get_by_job_id_and_label( method find_by_job_stage_and_label (line 364) | def find_by_job_stage_and_label( method list_by_job_id (line 388) | def list_by_job_id(self, job_id: JobId) -> List[ArtifactRecord]: method _db_record_to_entity (line 400) | def _db_record_to_entity(self, db_record) -> ArtifactRecord: FILE: build_stream/infra/db/session.py function _get_engine (line 35) | def _get_engine() -> Engine: function _get_session_factory (line 54) | def _get_session_factory() -> sessionmaker: function SessionLocal (line 66) | def SessionLocal() -> Session: function get_db_session (line 79) | def get_db_session() -> Generator[Session, None, None]: function get_db (line 99) | def get_db() -> Generator[Session, None, None]: FILE: build_stream/infra/id_generator.py class JobUUIDGenerator (line 24) | class JobUUIDGenerator(JobIdGenerator): # pylint: disable=R0903 method generate (line 27) | def generate(self) -> JobId: class UUIDv4Generator (line 44) | class UUIDv4Generator(UUIDGenerator): # pylint: disable=R0903 method generate (line 47) | def generate(self) -> uuid.UUID: FILE: build_stream/infra/repositories/in_memory.py class InMemoryJobRepository (line 23) | class InMemoryJobRepository: method __init__ (line 26) | def __init__(self) -> None: method save (line 30) | def save(self, job: Job) -> None: method find_by_id (line 34) | def find_by_id(self, job_id: JobId) -> Optional[Job]: method exists (line 38) | def exists(self, job_id: JobId) -> bool: class InMemoryStageRepository (line 43) | class InMemoryStageRepository: method __init__ (line 46) | def __init__(self) -> None: method save (line 50) | def save(self, stage: Stage) -> None: method save_all (line 65) | def save_all(self, stages: List[Stage]) -> None: method find_by_job_and_name (line 70) | def find_by_job_and_name( method find_all_by_job (line 83) | def find_all_by_job(self, job_id: JobId) -> List[Stage]: class InMemoryIdempotencyRepository (line 88) | class InMemoryIdempotencyRepository: method __init__ (line 91) | def __init__(self) -> None: method save (line 95) | def save(self, record: IdempotencyRecord) -> None: method find_by_key (line 99) | def find_by_key(self, key: IdempotencyKey) -> Optional[IdempotencyReco... class InMemoryAuditEventRepository (line 104) | class InMemoryAuditEventRepository: method __init__ (line 107) | def __init__(self) -> None: method save (line 111) | def save(self, event: AuditEvent) -> None: method find_by_job (line 118) | def find_by_job(self, job_id: JobId) -> List[AuditEvent]: FILE: build_stream/infra/repositories/nfs_build_image_inventory_repository.py class NfsBuildImageInventoryRepository (line 28) | class NfsBuildImageInventoryRepository: method __init__ (line 34) | def __init__( method create_inventory_file (line 48) | def create_inventory_file(self, inventory_host: InventoryHost, job_id:... FILE: build_stream/infra/repositories/nfs_input_repository.py function _read_project_name (line 44) | def _read_project_name(default_file_path: str = "/opt/omnia/input/defaul... class NfsInputRepository (line 69) | class NfsInputRepository(BuildStreamConfigRepository, BuildImageInventor... method __init__ (line 81) | def __init__( method get_aarch64_inv_host (line 114) | def get_aarch64_inv_host(self, job_id: str) -> Optional[InventoryHost]: method create_inventory_file (line 171) | def create_inventory_file(self, inventory_host: InventoryHost, job_id:... method get_source_input_repository_path (line 217) | def get_source_input_repository_path(self, job_id: str) -> Path: method get_destination_input_repository_path (line 228) | def get_destination_input_repository_path(self) -> Path: method validate_input_directory (line 236) | def validate_input_directory(self, path: Path) -> bool: FILE: build_stream/infra/repositories/nfs_playbook_queue_request_repository.py class NfsPlaybookQueueRequestRepository (line 38) | class NfsPlaybookQueueRequestRepository: method __init__ (line 45) | def __init__(self, queue_base_path: str = DEFAULT_QUEUE_BASE) -> None: method write_request (line 54) | def write_request(self, request: PlaybookRequest) -> Path: method is_available (line 99) | def is_available(self) -> bool: method ensure_directories (line 109) | def ensure_directories(self) -> None: FILE: build_stream/infra/repositories/nfs_playbook_queue_result_repository.py class NfsPlaybookQueueResultRepository (line 35) | class NfsPlaybookQueueResultRepository: method __init__ (line 42) | def __init__(self, queue_base_path: str = DEFAULT_QUEUE_BASE) -> None: method get_unprocessed_results (line 56) | def get_unprocessed_results(self) -> List[Path]: method read_result (line 73) | def read_result(self, result_path: Path) -> PlaybookResult: method archive_result (line 104) | def archive_result(self, result_path: Path) -> None: method is_available (line 133) | def is_available(self) -> bool: method ensure_directories (line 143) | def ensure_directories(self) -> None: method clear_processed_cache (line 149) | def clear_processed_cache(self) -> None: FILE: build_stream/main.py function lifespan (line 54) | async def lifespan(app: FastAPI): function root (line 100) | async def root() -> dict: function health_check (line 115) | async def health_check() -> dict: function global_exception_handler (line 121) | async def global_exception_handler(request, exc): # pylint: disable=unu... function get_server_config (line 130) | def get_server_config(): FILE: build_stream/orchestrator/build_image/commands/create_build_image.py class CreateBuildImageCommand (line 24) | class CreateBuildImageCommand: FILE: build_stream/orchestrator/build_image/dtos/build_image_response.py class BuildImageResponse (line 22) | class BuildImageResponse: FILE: build_stream/orchestrator/build_image/use_cases/create_build_image.py class CreateBuildImageUseCase (line 85) | class CreateBuildImageUseCase: method __init__ (line 107) | def __init__( method execute (line 136) | def execute(self, command: CreateBuildImageCommand) -> BuildImageRespo... method _validate_job (line 182) | def _validate_job(self, command: CreateBuildImageCommand): method _verify_upstream_stage_completed (line 199) | def _verify_upstream_stage_completed( method _validate_stage (line 224) | def _validate_stage(self, command: CreateBuildImageCommand, architectu... method _validate_architecture (line 265) | def _validate_architecture( method _validate_image_key (line 278) | def _validate_image_key(self, command: CreateBuildImageCommand) -> Ima... method _validate_functional_groups (line 288) | def _validate_functional_groups( method _get_inventory_host (line 301) | def _get_inventory_host( method _create_inventory_file (line 357) | def _create_inventory_file( method _build_playbook_request (line 422) | def _build_playbook_request( method _create_request (line 439) | def _create_request( method _submit_to_queue (line 474) | def _submit_to_queue( method _emit_stage_started_event (line 501) | def _emit_stage_started_event( method _to_response (line 525) | def _to_response( FILE: build_stream/orchestrator/catalog/commands/generate_input_files.py class GenerateInputFilesCommand (line 25) | class GenerateInputFilesCommand: FILE: build_stream/orchestrator/catalog/commands/parse_catalog.py class ParseCatalogCommand (line 24) | class ParseCatalogCommand: method __post_init__ (line 42) | def __post_init__(self) -> None: FILE: build_stream/orchestrator/catalog/dtos.py class ParseCatalogResult (line 24) | class ParseCatalogResult: class GenerateInputFilesResult (line 38) | class GenerateInputFilesResult: FILE: build_stream/orchestrator/catalog/use_cases/generate_input_files.py class GenerateInputFilesUseCase (line 64) | class GenerateInputFilesUseCase: method __init__ (line 77) | def __init__( method execute (line 98) | def execute( method _load_and_guard_stage (line 135) | def _load_and_guard_stage( method _verify_upstream_stage_completed (line 181) | def _verify_upstream_stage_completed( method _retrieve_upstream_artifacts (line 207) | def _retrieve_upstream_artifacts( method _resolve_policy_path (line 233) | def _resolve_policy_path( method _generate_omnia_configs (line 246) | def _generate_omnia_configs( method _store_output_artifacts (line 290) | def _store_output_artifacts( method _copy_configs_to_artifacts_input_dir (line 339) | def _copy_configs_to_artifacts_input_dir( method _mark_stage_started (line 379) | def _mark_stage_started( method _mark_stage_completed (line 390) | def _mark_stage_completed( method _mark_stage_failed (line 401) | def _mark_stage_failed( method _emit_audit_event (line 435) | def _emit_audit_event( method _build_success_result (line 463) | def _build_success_result( FILE: build_stream/orchestrator/catalog/use_cases/parse_catalog.py class ParseCatalogUseCase (line 68) | class ParseCatalogUseCase: # pylint: disable=too-few-public-methods method __init__ (line 80) | def __init__( method execute (line 97) | def execute(self, command: ParseCatalogCommand) -> ParseCatalogResult: method _load_and_guard_stage (line 143) | def _load_and_guard_stage( method _check_idempotent_completion (line 189) | def _check_idempotent_completion( method _validate_file_format (line 201) | def _validate_file_format(self, filename: str) -> None: method _parse_and_validate_json (line 208) | def _parse_and_validate_json(self, content: bytes) -> dict: method _store_catalog_artifact (line 227) | def _store_catalog_artifact( method _generate_and_store_root_jsons (line 268) | def _generate_and_store_root_jsons( method _mark_stage_started (line 344) | def _mark_stage_started( method _mark_stage_completed (line 359) | def _mark_stage_completed( method _mark_stage_failed (line 369) | def _mark_stage_failed( method _emit_audit_event (line 404) | def _emit_audit_event( method _build_success_result (line 431) | def _build_success_result( FILE: build_stream/orchestrator/common/result_poller.py class ResultPoller (line 44) | class ResultPoller: method __init__ (line 62) | def __init__( method start (line 90) | async def start(self) -> None: method stop (line 100) | async def stop(self) -> None: method _poll_loop (line 114) | async def _poll_loop(self) -> None: method _on_result_received (line 128) | def _on_result_received(self, result: PlaybookResult) -> None: FILE: build_stream/orchestrator/jobs/commands/create_job.py class CreateJobCommand (line 27) | class CreateJobCommand: FILE: build_stream/orchestrator/jobs/dtos/job_response.py class JobResponse (line 22) | class JobResponse: method from_entity (line 52) | def from_entity(job, is_new: bool = True) -> "JobResponse": FILE: build_stream/orchestrator/jobs/use_cases/create_job.py class CreateJobUseCase (line 42) | class CreateJobUseCase: method __init__ (line 58) | def __init__( method execute (line 84) | def execute(self, command: CreateJobCommand) -> JobResponse: method _generate_job_id (line 113) | def _generate_job_id(self, command: CreateJobCommand) -> JobId: method _check_idempotency (line 123) | def _check_idempotency( method _build_job (line 142) | def _build_job(self, command: CreateJobCommand, job_id: JobId) -> Job: method _save_job_and_stages (line 151) | def _save_job_and_stages(self, job: Job, stages: List[Stage]) -> None: method _save_idempotency_record (line 156) | def _save_idempotency_record( method _emit_job_created_event (line 174) | def _emit_job_created_event( method _to_response (line 195) | def _to_response(self, job: Job, is_new: bool = True) -> JobResponse: method _now_utc (line 199) | def _now_utc(self) -> datetime: method _compute_fingerprint (line 203) | def _compute_fingerprint(self, command: CreateJobCommand) -> RequestFi... method _create_initial_stages (line 212) | def _create_initial_stages(self, job_id: JobId) -> List[Stage]: method _generate_event_id (line 239) | def _generate_event_id(self) -> str: FILE: build_stream/orchestrator/local_repo/commands/create_local_repo.py class CreateLocalRepoCommand (line 23) | class CreateLocalRepoCommand: FILE: build_stream/orchestrator/local_repo/dtos/local_repo_response.py class LocalRepoResponse (line 21) | class LocalRepoResponse: FILE: build_stream/orchestrator/local_repo/use_cases/create_local_repo.py class CreateLocalRepoUseCase (line 64) | class CreateLocalRepoUseCase: method __init__ (line 83) | def __init__( method execute (line 109) | def execute(self, command: CreateLocalRepoCommand) -> LocalRepoResponse: method _validate_job (line 137) | def _validate_job(self, command: CreateLocalRepoCommand): method _verify_upstream_stage_completed (line 154) | def _verify_upstream_stage_completed( method _validate_stage (line 179) | def _validate_stage(self, command: CreateLocalRepoCommand) -> Stage: method _prepare_input_files (line 226) | def _prepare_input_files( method _build_playbook_request (line 277) | def _build_playbook_request( method _submit_to_queue (line 293) | def _submit_to_queue( method _emit_stage_started_event (line 324) | def _emit_stage_started_event( method _to_response (line 342) | def _to_response( FILE: build_stream/orchestrator/validate/commands/validate_image_on_test.py class ValidateImageOnTestCommand (line 23) | class ValidateImageOnTestCommand: FILE: build_stream/orchestrator/validate/dtos/validate_image_on_test_response.py class ValidateImageOnTestResponse (line 21) | class ValidateImageOnTestResponse: FILE: build_stream/orchestrator/validate/use_cases/validate_image_on_test.py class ValidateImageOnTestUseCase (line 61) | class ValidateImageOnTestUseCase: method __init__ (line 78) | def __init__( method execute (line 101) | def execute(self, command: ValidateImageOnTestCommand) -> ValidateImag... method _validate_job (line 125) | def _validate_job(self, command: ValidateImageOnTestCommand) -> None: method _validate_stage (line 140) | def _validate_stage(self, command: ValidateImageOnTestCommand) -> Stage: method _enforce_stage_guard (line 162) | def _enforce_stage_guard(self, command: ValidateImageOnTestCommand) ->... method _create_request (line 199) | def _create_request( method _submit_to_queue (line 226) | def _submit_to_queue( method _emit_stage_started_event (line 293) | def _emit_stage_started_event( method _to_response (line 311) | def _to_response( FILE: build_stream/playbook-watcher/playbook_watcher_service.py function log_secure_info (line 45) | def log_secure_info(level: str, message: str, identifier: Optional[str] ... function signal_handler (line 110) | def signal_handler(signum, _): function ensure_directories (line 121) | def ensure_directories(): function validate_playbook_name (line 148) | def validate_playbook_name(playbook_name: str) -> bool: function map_playbook_name_to_path (line 179) | def map_playbook_name_to_path(playbook_name: str) -> Optional[str]: function validate_job_id (line 199) | def validate_job_id(job_id: str) -> bool: function validate_stage_name (line 215) | def validate_stage_name(stage_name: str) -> bool: function validate_command (line 229) | def validate_command(cmd: list, playbook_path: str) -> bool: function parse_request_file (line 402) | def parse_request_file(request_path: Path) -> Optional[Dict[str, Any]]: function extract_playbook_name (line 557) | def extract_playbook_name(full_playbook_path: str) -> str: function _build_log_paths (line 570) | def _build_log_paths(playbook_path: str, started_at: datetime) -> tuple: function move_log_to_job_directory (line 599) | def move_log_to_job_directory(host_log_file_path: Path, job_id: str) -> ... function execute_playbook (line 638) | def execute_playbook(request_data: Dict[str, Any]) -> Dict[str, Any]: function write_result_file (line 910) | def write_result_file(result_data: Dict[str, Any], original_filename: st... function archive_request_file (line 945) | def archive_request_file(request_path: Path) -> None: function process_request (line 966) | def process_request(request_path: Path) -> None: function process_request_async (line 1045) | def process_request_async(request_path: Path) -> None: function scan_and_process_requests (line 1054) | def scan_and_process_requests() -> int: function run_watcher_loop (line 1101) | def run_watcher_loop(): function main (line 1167) | def main(): FILE: build_stream/tests/conftest.py class ExpiredSignatureError (line 41) | class ExpiredSignatureError(jwt.exceptions.JWTDecodeError): class InvalidAudienceError (line 45) | class InvalidAudienceError(jwt.exceptions.JWTDecodeError): class InvalidIssuerError (line 49) | class InvalidIssuerError(jwt.exceptions.JWTDecodeError): class InvalidSignatureError (line 53) | class InvalidSignatureError(jwt.exceptions.JWTDecodeError): function _get_app (line 67) | def _get_app(): function _get_auth_service (line 76) | def _get_auth_service(): function _get_auth_routes (line 85) | def _get_auth_routes(): function _get_mock_vault_client (line 94) | def _get_mock_vault_client(): function _get_mock_jwt_handler (line 106) | def _get_mock_jwt_handler(): function mock_vault_client (line 116) | def mock_vault_client(): function mock_vault_with_client (line 127) | def mock_vault_with_client(mock_vault_client): # noqa: W0621 function auth_service (line 141) | def auth_service(mock_vault_client): # noqa: W0621 function mock_jwt_handler (line 155) | def mock_jwt_handler(): function test_client (line 166) | def test_client(mock_vault_client, mock_jwt_handler) -> Generator: # no... function test_client_with_existing_client (line 198) | def test_client_with_existing_client( # noqa: C0301,W0621 function valid_auth_header (line 232) | def valid_auth_header() -> Dict[str, str]: function invalid_auth_header (line 248) | def invalid_auth_header() -> Dict[str, str]: function valid_registration_request (line 259) | def valid_registration_request() -> Dict: function minimal_registration_request (line 273) | def minimal_registration_request() -> Dict: function valid_token_request (line 285) | def valid_token_request() -> Dict: function generate_test_client_secret (line 300) | def generate_test_client_secret() -> str: function generate_invalid_client_id (line 309) | def generate_invalid_client_id() -> str: function generate_invalid_client_secret (line 318) | def generate_invalid_client_secret() -> str: FILE: build_stream/tests/demo/buildstream_demo.py class ParseCatalogDemo (line 58) | class ParseCatalogDemo: method __init__ (line 61) | def __init__(self, cleanup=False): method wait_for_enter (line 91) | def wait_for_enter(self, message="Press ENTER to continue..."): method load_credentials (line 95) | def load_credentials(self): method save_credentials (line 117) | def save_credentials(self, client_id, client_secret): method cleanup_artifacts (line 133) | def cleanup_artifacts(self): method check_server_health (line 170) | def check_server_health(self): method register_client (line 192) | def register_client(self): method get_access_token (line 312) | def get_access_token(self): method create_job (line 375) | def create_job(self): method get_job_info (line 430) | def get_job_info(self): method parse_catalog (line 477) | def parse_catalog(self): method generate_input_files (line 533) | def generate_input_files(self): method show_artifacts (line 575) | def show_artifacts(self): method _fallback_artifact_list (line 650) | def _fallback_artifact_list(self, artifact_path): method _show_latest_artifacts_preview (line 660) | def _show_latest_artifacts_preview(self, catalog_path, input_files_path): method create_local_repository (line 713) | def create_local_repository(self): method _trigger_build_image_stage (line 755) | def _trigger_build_image_stage(self, step_label: str, architecture: st... method trigger_build_image_x86_64_stage (line 807) | def trigger_build_image_x86_64_stage(self): method trigger_build_image_aarch64_stage (line 825) | def trigger_build_image_aarch64_stage(self): method run_demo (line 839) | def run_demo(self): function main (line 937) | def main(): FILE: build_stream/tests/end_to_end/api/conftest.py function generate_secure_test_password (line 46) | def generate_secure_test_password(length: int = 24) -> str: function generate_test_client_secret (line 84) | def generate_test_client_secret(length: int = 32) -> str: function generate_invalid_client_id (line 103) | def generate_invalid_client_id() -> str: function generate_invalid_client_secret (line 115) | def generate_invalid_client_secret() -> str: class IntegrationTestConfig (line 127) | class IntegrationTestConfig: method get_vault_password (line 137) | def get_vault_password(cls) -> str: method get_auth_password (line 146) | def get_auth_password(cls) -> str: class VaultManager (line 155) | class VaultManager: # noqa: R0902 pylint: disable=too-many-instance-att... method __init__ (line 158) | def __init__(self, base_dir: str): method setup (line 180) | def setup(self, username: str, password: str) -> None: method _generate_jwt_keys (line 244) | def _generate_jwt_keys(self) -> None: method cleanup (line 279) | def cleanup(self) -> None: class ServerManager (line 287) | class ServerManager: method __init__ (line 305) | def __init__( # noqa: R0913,R0917 pylint: disable=too-many-arguments,... method _setup_venv (line 329) | def _setup_venv(self) -> None: method python_path (line 362) | def python_path(self) -> str: method _is_port_in_use (line 366) | def _is_port_in_use(self) -> bool: method _free_port (line 371) | def _free_port(self) -> None: method start (line 391) | def start(self) -> None: method _wait_for_server (line 448) | def _wait_for_server(self) -> None: method stop (line 489) | def stop(self) -> None: method base_url (line 509) | def base_url(self) -> str: function integration_test_dir (line 515) | def integration_test_dir() -> Generator[str, None, None]: function vault_manager (line 527) | def vault_manager( function project_dir (line 550) | def project_dir() -> str: function venv_dir (line 560) | def venv_dir(integration_test_dir: str) -> str: # noqa: W0621 function server_manager (line 573) | def server_manager( function base_url (line 601) | def base_url(server_manager: ServerManager) -> str: # noqa: W0621 function auth_password (line 614) | def auth_password() -> str: function valid_auth_header (line 624) | def valid_auth_header(auth_password: str) -> Dict[str, str]: # noqa: W0621 function invalid_auth_header (line 640) | def invalid_auth_header() -> Dict[str, str]: function reset_vault (line 651) | def reset_vault( FILE: build_stream/tests/end_to_end/api/test_api_flow_e2e.py class APIFlowContext (line 70) | class APIFlowContext: # noqa: R0902 pylint: disable=too-many-instance-a... method __init__ (line 85) | def __init__(self): method has_client_credentials (line 96) | def has_client_credentials(self) -> bool: method has_access_token (line 100) | def has_access_token(self) -> bool: method get_auth_header (line 104) | def get_auth_header(self) -> Dict[str, str]: function api_flow_context (line 119) | def api_flow_context(): class TestCompleteAPIFlow (line 130) | class TestCompleteAPIFlow: method test_01_health_check (line 148) | def test_01_health_check( method test_02_register_client (line 165) | def test_02_register_client( method test_03_request_token (line 203) | def test_03_request_token( method test_04_token_contains_granted_scopes (line 247) | def test_04_token_contains_granted_scopes( method test_05_request_token_with_subset_scope (line 264) | def test_05_request_token_with_subset_scope( method test_06_reject_unauthorized_scope (line 293) | def test_06_reject_unauthorized_scope( method test_07_reject_invalid_credentials (line 322) | def test_07_reject_invalid_credentials( method test_08_multiple_tokens_are_unique (line 351) | def test_08_multiple_tokens_are_unique( class TestAPIFlowErrorHandling (line 384) | class TestAPIFlowErrorHandling: method test_register_without_auth_fails (line 397) | def test_register_without_auth_fails( method test_register_with_invalid_auth_fails (line 411) | def test_register_with_invalid_auth_fails( method test_token_without_registration_fails (line 427) | def test_token_without_registration_fails( method test_token_with_invalid_grant_type_fails (line 448) | def test_token_with_invalid_grant_type_fails( class TestAPIFlowSecurityValidation (line 481) | class TestAPIFlowSecurityValidation: method test_client_credentials_format_validation (line 494) | def test_client_credentials_format_validation( method test_client_secret_format_validation (line 513) | def test_client_secret_format_validation( method test_max_clients_limit_enforced (line 531) | def test_max_clients_limit_enforced( FILE: build_stream/tests/end_to_end/api/test_build_image_e2e.py class TestBuildImageE2E (line 27) | class TestBuildImageE2E: method setup_class (line 36) | def setup_class(cls): method teardown_class (line 59) | def teardown_class(cls): method get_headers (line 65) | def get_headers(self, correlation_id: str = None) -> Dict[str, str]: method test_full_build_image_workflow_x86_64 (line 75) | def test_full_build_image_workflow_x86_64(self): method test_full_build_image_workflow_aarch64 (line 180) | def test_full_build_image_workflow_aarch64(self): method test_consolidated_repository_functionality (line 262) | def test_consolidated_repository_functionality(self): method test_build_image_error_cases (line 341) | def test_build_image_error_cases(self): method test_build_image_concurrent_requests (line 401) | def test_build_image_concurrent_requests(self): method test_build_image_audit_trail (line 451) | def test_build_image_audit_trail(self): FILE: build_stream/tests/end_to_end/api/test_generate_input_files_e2e.py class GenerateInputFilesContext (line 44) | class GenerateInputFilesContext: method __init__ (line 58) | def __init__(self): method has_client_credentials (line 71) | def has_client_credentials(self) -> bool: method has_access_token (line 75) | def has_access_token(self) -> bool: method has_job_id (line 79) | def has_job_id(self) -> bool: method get_auth_header (line 83) | def get_auth_header(self) -> Dict[str, str]: method set_job_id (line 96) | def set_job_id(self, job_id: str) -> None: method load_catalog_content (line 100) | def load_catalog_content(self) -> str: method get_catalog_bytes (line 118) | def get_catalog_bytes(self) -> bytes: function generate_input_files_context (line 124) | def generate_input_files_context(): class TestGenerateInputFilesE2E (line 133) | class TestGenerateInputFilesE2E: method test_01_health_check (line 150) | def test_01_health_check(self, base_url: str): method test_02_register_client_for_generate_input_files (line 165) | def test_02_register_client_for_generate_input_files( method test_03_request_token_for_generate_input_files (line 204) | def test_03_request_token_for_generate_input_files( method test_04_create_job_for_generate_input_files (line 249) | def test_04_create_job_for_generate_input_files( method test_05_parse_catalog_prerequisite (line 299) | def test_05_parse_catalog_prerequisite( method test_06_generate_input_files_success (line 349) | def test_06_generate_input_files_success( method test_07_generate_input_files_with_custom_policy (line 398) | def test_07_generate_input_files_with_custom_policy( FILE: build_stream/tests/end_to_end/api/test_parse_catalog_e2e.py class ParseCatalogContext (line 44) | class ParseCatalogContext: # pylint: disable=too-many-instance-attributes method __init__ (line 58) | def __init__(self): method has_client_credentials (line 71) | def has_client_credentials(self) -> bool: method has_access_token (line 75) | def has_access_token(self) -> bool: method has_job_id (line 79) | def has_job_id(self) -> bool: method get_auth_header (line 83) | def get_auth_header(self) -> Dict[str, str]: method set_job_id (line 96) | def set_job_id(self, job_id: str) -> None: method load_catalog_content (line 100) | def load_catalog_content(self) -> None: function parse_catalog_context (line 114) | def parse_catalog_context(): class TestParseCatalogWorkflow (line 125) | class TestParseCatalogWorkflow: method test_01_health_check (line 139) | def test_01_health_check( method test_02_register_client_for_parse_catalog (line 156) | def test_02_register_client_for_parse_catalog( method test_03_request_token_for_parse_catalog (line 194) | def test_03_request_token_for_parse_catalog( method test_04_create_job_for_parse_catalog (line 238) | def test_04_create_job_for_parse_catalog( method test_05_parse_catalog_success (line 287) | def test_05_parse_catalog_success( method test_06_parse_catalog_with_invalid_data (line 337) | def test_06_parse_catalog_with_invalid_data( method test_07_parse_catalog_with_oversized_file (line 385) | def test_07_parse_catalog_with_oversized_file( method test_08_parse_catalog_job_status_integration (line 436) | def test_08_parse_catalog_job_status_integration( method test_09_parse_catalog_with_nonexistent_job_fails (line 471) | def test_09_parse_catalog_with_nonexistent_job_fails( method test_10_parse_catalog_with_oversized_file_security_check (line 497) | def test_10_parse_catalog_with_oversized_file_security_check( class TestParseCatalogErrorHandling (line 548) | class TestParseCatalogErrorHandling: method test_parse_catalog_without_authentication_fails (line 555) | def test_parse_catalog_without_authentication_fails( method test_parse_catalog_with_invalid_token_fails (line 577) | def test_parse_catalog_with_invalid_token_fails( class TestParseCatalogSecurityValidation (line 608) | class TestParseCatalogSecurityValidation: method test_parse_catalog_with_malicious_content (line 620) | def test_parse_catalog_with_malicious_content( method test_parse_catalog_file_parameter_validation (line 695) | def test_parse_catalog_file_parameter_validation( FILE: build_stream/tests/end_to_end/api/test_register_e2e.py class TestRegisterEndpointE2E (line 36) | class TestRegisterEndpointE2E: method test_register_valid_credentials_returns_201 (line 44) | def test_register_valid_credentials_returns_201( method test_register_minimal_request_returns_201 (line 80) | def test_register_minimal_request_returns_201( method test_register_max_clients_reached_returns_409 (line 100) | def test_register_max_clients_reached_returns_409( method test_register_invalid_auth_returns_401 (line 131) | def test_register_invalid_auth_returns_401( method test_register_missing_auth_returns_401 (line 150) | def test_register_missing_auth_returns_401( method test_register_invalid_client_name_returns_422 (line 164) | def test_register_invalid_client_name_returns_422( method test_register_empty_client_name_returns_422 (line 180) | def test_register_empty_client_name_returns_422( method test_register_missing_client_name_returns_422 (line 196) | def test_register_missing_client_name_returns_422( method test_register_invalid_scope_returns_422 (line 212) | def test_register_invalid_scope_returns_422( method test_register_client_name_too_long_returns_422 (line 231) | def test_register_client_name_too_long_returns_422( method test_register_response_contains_all_fields (line 247) | def test_register_response_contains_all_fields( method test_register_client_id_format (line 279) | def test_register_client_id_format( method test_register_client_secret_format (line 304) | def test_register_client_secret_format( method test_register_malformed_json_returns_422 (line 326) | def test_register_malformed_json_returns_422( method test_register_wrong_content_type_returns_422 (line 342) | def test_register_wrong_content_type_returns_422( method test_register_malformed_basic_auth_returns_401 (line 358) | def test_register_malformed_basic_auth_returns_401( method test_register_bearer_auth_returns_401 (line 373) | def test_register_bearer_auth_returns_401( method test_register_special_characters_in_client_name (line 388) | def test_register_special_characters_in_client_name( method test_register_description_with_unicode (line 405) | def test_register_description_with_unicode( method test_register_all_valid_scopes (line 424) | def test_register_all_valid_scopes( FILE: build_stream/tests/end_to_end/api/test_token_e2e.py function registered_client_e2e (line 45) | def registered_client_e2e( # noqa: W0613 class TestTokenEndpointE2E (line 83) | class TestTokenEndpointE2E: method test_token_valid_credentials_returns_200 (line 92) | def test_token_valid_credentials_returns_200( method test_token_response_contains_all_fields (line 122) | def test_token_response_contains_all_fields( method test_token_jwt_structure (line 145) | def test_token_jwt_structure( method test_token_with_valid_scope (line 174) | def test_token_with_valid_scope( method test_token_with_multiple_scopes (line 196) | def test_token_with_multiple_scopes( method test_token_invalid_client_id_returns_401 (line 219) | def test_token_invalid_client_id_returns_401( method test_token_invalid_client_secret_returns_401 (line 240) | def test_token_invalid_client_secret_returns_401( method test_token_missing_client_id_returns_400 (line 262) | def test_token_missing_client_id_returns_400( method test_token_missing_client_secret_returns_400 (line 282) | def test_token_missing_client_secret_returns_400( method test_token_missing_grant_type_returns_422 (line 302) | def test_token_missing_grant_type_returns_422( method test_token_invalid_grant_type_returns_422 (line 319) | def test_token_invalid_grant_type_returns_422( method test_token_invalid_scope_returns_400 (line 337) | def test_token_invalid_scope_returns_400( method test_token_invalid_client_id_format_returns_422 (line 359) | def test_token_invalid_client_id_format_returns_422( method test_token_invalid_client_secret_format_returns_422 (line 378) | def test_token_invalid_client_secret_format_returns_422( method test_token_expires_in_is_positive (line 397) | def test_token_expires_in_is_positive( method test_token_type_is_bearer (line 419) | def test_token_type_is_bearer( method test_token_multiple_requests_return_different_tokens (line 440) | def test_token_multiple_requests_return_different_tokens( method test_token_default_scope_when_not_specified (line 473) | def test_token_default_scope_when_not_specified( FILE: build_stream/tests/integration/api/auth/conftest.py function valid_auth_header (line 26) | def valid_auth_header() -> Dict[str, str]: function invalid_auth_header (line 35) | def invalid_auth_header() -> Dict[str, str]: FILE: build_stream/tests/integration/api/auth/test_register.py class TestRegisterEndpoint (line 25) | class TestRegisterEndpoint: method test_register_valid_credentials_returns_201 (line 30) | def test_register_valid_credentials_returns_201( method test_register_minimal_request_returns_201 (line 54) | def test_register_minimal_request_returns_201( method test_register_invalid_auth_returns_401 (line 73) | def test_register_invalid_auth_returns_401( method test_register_missing_auth_returns_401 (line 91) | def test_register_missing_auth_returns_401( method test_register_max_clients_reached_returns_409 (line 104) | def test_register_max_clients_reached_returns_409( method test_register_duplicate_client_name_returns_409 (line 122) | def test_register_duplicate_client_name_returns_409( method test_register_invalid_client_name_returns_422 (line 146) | def test_register_invalid_client_name_returns_422( method test_register_empty_client_name_returns_422 (line 164) | def test_register_empty_client_name_returns_422( method test_register_missing_client_name_returns_422 (line 182) | def test_register_missing_client_name_returns_422( method test_register_invalid_scope_returns_422 (line 200) | def test_register_invalid_scope_returns_422( method test_register_client_name_too_long_returns_422 (line 219) | def test_register_client_name_too_long_returns_422( method test_register_response_contains_all_fields (line 237) | def test_register_response_contains_all_fields( method test_register_client_id_format (line 264) | def test_register_client_id_format( method test_register_client_secret_format (line 288) | def test_register_client_secret_format( FILE: build_stream/tests/integration/api/auth/test_token.py function registered_client (line 27) | def registered_client(test_client: TestClient, valid_auth_header: Dict[s... function valid_token_request (line 52) | def valid_token_request(registered_client: Dict) -> Dict: class TestTokenEndpoint (line 69) | class TestTokenEndpoint: method test_token_valid_credentials_returns_200 (line 74) | def test_token_valid_credentials_returns_200( method test_token_response_contains_all_fields (line 97) | def test_token_response_contains_all_fields( method test_token_jwt_format (line 119) | def test_token_jwt_format( method test_token_with_valid_scope (line 143) | def test_token_with_valid_scope( method test_token_invalid_client_id_returns_401 (line 164) | def test_token_invalid_client_id_returns_401( method test_token_invalid_client_secret_returns_401 (line 184) | def test_token_invalid_client_secret_returns_401( method test_token_missing_client_id_returns_400 (line 206) | def test_token_missing_client_id_returns_400( method test_token_missing_client_secret_returns_400 (line 225) | def test_token_missing_client_secret_returns_400( method test_token_missing_grant_type_returns_422 (line 244) | def test_token_missing_grant_type_returns_422( method test_token_invalid_grant_type_returns_422 (line 260) | def test_token_invalid_grant_type_returns_422( method test_token_invalid_scope_returns_400 (line 277) | def test_token_invalid_scope_returns_400( method test_token_invalid_client_id_format_returns_422 (line 298) | def test_token_invalid_client_id_format_returns_422( method test_token_invalid_client_secret_format_returns_422 (line 317) | def test_token_invalid_client_secret_format_returns_422( method test_token_expires_in_is_positive (line 336) | def test_token_expires_in_is_positive( method test_token_type_is_bearer (line 357) | def test_token_type_is_bearer( method test_token_multiple_requests_return_different_tokens (line 377) | def test_token_multiple_requests_return_different_tokens( method test_token_default_scope_when_not_specified (line 409) | def test_token_default_scope_when_not_specified( FILE: build_stream/tests/integration/api/build_image/conftest.py function client (line 25) | def client(tmp_path): function uuid_generator_fixture (line 71) | def uuid_generator_fixture(): function auth_headers_fixture (line 78) | def auth_headers_fixture(uuid_generator) -> Dict[str, str]: function unique_correlation_id (line 88) | def unique_correlation_id(uuid_generator) -> str: function created_job (line 94) | def created_job(client, auth_headers) -> str: function job_with_completed_parse_catalog (line 103) | def job_with_completed_parse_catalog(client, auth_headers, created_job, ... FILE: build_stream/tests/integration/api/build_image/test_build_image_api.py class TestBuildImageAPI (line 28) | class TestBuildImageAPI: method test_create_build_image_success_x86_64 (line 31) | def test_create_build_image_success_x86_64(self, client, auth_headers,... method test_create_build_image_success_aarch64 (line 58) | def test_create_build_image_success_aarch64(self, client, auth_headers... method test_create_build_image_invalid_architecture (line 79) | def test_create_build_image_invalid_architecture(self, client, auth_he... method test_create_build_image_invalid_image_key (line 98) | def test_create_build_image_invalid_image_key(self, client, auth_heade... method test_create_build_image_aarch64_missing_inventory_host (line 117) | def test_create_build_image_aarch64_missing_inventory_host(self, clien... method test_create_build_image_unauthorized (line 136) | def test_create_build_image_unauthorized(self, client): method test_create_build_image_job_not_found (line 149) | def test_create_build_image_job_not_found(self, client, auth_headers): method test_create_build_image_queue_submission (line 165) | def test_create_build_image_queue_submission(self, client, auth_header... FILE: build_stream/tests/integration/api/catalog_roles/conftest.py function client (line 25) | def client(tmp_path): function uuid_generator_fixture (line 71) | def uuid_generator_fixture(): function auth_headers_fixture (line 78) | def auth_headers_fixture(uuid_generator) -> Dict[str, str]: function unique_correlation_id (line 88) | def unique_correlation_id(uuid_generator) -> str: function created_job (line 94) | def created_job(client, auth_headers) -> str: function job_with_completed_parse_catalog (line 103) | def job_with_completed_parse_catalog(client, auth_headers, created_job, ... FILE: build_stream/tests/integration/api/catalog_roles/test_catalog_roles_api.py class TestGetCatalogRolesAPI (line 38) | class TestGetCatalogRolesAPI: # pylint: disable=too-many-public-methods method valid_catalog_json (line 43) | def valid_catalog_json(self) -> Dict[str, Any]: method job_with_parsed_catalog (line 55) | def job_with_parsed_catalog( method test_get_roles_success (line 86) | def test_get_roles_success( method test_get_roles_returns_sorted_list (line 110) | def test_get_roles_returns_sorted_list( method test_get_roles_response_schema (line 128) | def test_get_roles_response_schema( method test_get_roles_returns_correlation_id (line 148) | def test_get_roles_returns_correlation_id( method test_get_roles_no_auth_returns_401 (line 171) | def test_get_roles_no_auth_returns_401( method test_get_roles_invalid_token_returns_401 (line 184) | def test_get_roles_invalid_token_returns_401( method test_get_roles_requires_job_read_scope (line 200) | def test_get_roles_requires_job_read_scope( method test_get_roles_nonexistent_job_returns_404 (line 215) | def test_get_roles_nonexistent_job_returns_404( method test_get_roles_upstream_stage_not_completed (line 232) | def test_get_roles_upstream_stage_not_completed( method test_get_roles_invalid_job_id_format_returns_400 (line 254) | def test_get_roles_invalid_job_id_format_returns_400( method test_error_response_does_not_expose_internals (line 273) | def test_error_response_does_not_expose_internals( FILE: build_stream/tests/integration/api/conftest.py function client (line 29) | def client() -> TestClient: function uuid_generator_fixture (line 36) | def uuid_generator_fixture() -> UUIDv4Generator: function auth_headers (line 42) | def auth_headers(uuid_generator: UUIDv4Generator) -> Dict[str, str]: function mock_jwt_validation (line 52) | def mock_jwt_validation() -> Generator[None, None, None]: function auth_headers_with_mock (line 76) | def auth_headers_with_mock(mock_jwt_validation: None, uuid_generator: UU... FILE: build_stream/tests/integration/api/generate_input_files/conftest.py function client (line 25) | def client(tmp_path): function uuid_generator_fixture (line 71) | def uuid_generator_fixture(): function auth_headers_fixture (line 78) | def auth_headers_fixture(uuid_generator) -> Dict[str, str]: function unique_correlation_id (line 88) | def unique_correlation_id(uuid_generator) -> str: function created_job (line 94) | def created_job(client, auth_headers) -> str: FILE: build_stream/tests/integration/api/generate_input_files/test_generate_input_files_api.py class TestGenerateInputFilesAPI (line 26) | class TestGenerateInputFilesAPI: # pylint: disable=too-many-public-methods method client (line 30) | def client(self) -> TestClient: method auth_headers (line 39) | def auth_headers(self, mock_jwt_validation) -> Dict[str, str]: # pyli... method valid_job_id (line 48) | def valid_job_id(self) -> str: method valid_request_data (line 53) | def valid_request_data(self) -> Dict[str, Any]: method custom_policy_request_data (line 58) | def custom_policy_request_data(self) -> Dict[str, Any]: method created_job (line 65) | def created_job(self, client: TestClient, auth_headers: Dict[str, str]... method test_endpoint_exists_and_requires_auth (line 79) | def test_endpoint_exists_and_requires_auth(self, client: TestClient, v... method test_valid_request_structure (line 90) | def test_valid_request_structure(self, client: TestClient, auth_header... method test_request_with_custom_policy (line 102) | def test_request_with_custom_policy(self, client: TestClient, auth_hea... method test_missing_correlation_id (line 114) | def test_missing_correlation_id(self, client: TestClient, created_job:... method test_invalid_job_id_format (line 124) | def test_invalid_job_id_format(self, client: TestClient, auth_headers:... method test_path_traversal_protection (line 134) | def test_path_traversal_protection(self, client: TestClient, auth_head... method test_invalid_json_request (line 155) | def test_invalid_json_request(self, client: TestClient, auth_headers: ... method test_empty_request_body (line 167) | def test_empty_request_body(self, client: TestClient, auth_headers: Di... method test_concurrent_requests (line 179) | def test_concurrent_requests(self, client: TestClient, auth_headers: D... method test_response_structure_on_success (line 206) | def test_response_structure_on_success(self, client: TestClient, auth_... method test_error_response_structure (line 238) | def test_error_response_structure(self, client: TestClient, auth_heade... method test_job_not_found_error (line 276) | def test_job_not_found_error(self, client: TestClient, auth_headers: D... method test_dependency_validation (line 289) | def test_dependency_validation(self, client: TestClient, auth_headers:... method test_policy_file_not_found (line 317) | def test_policy_file_not_found(self, client: TestClient, auth_headers:... method test_idempotency_key_handling (line 333) | def test_idempotency_key_handling(self, client: TestClient, auth_heade... method test_large_policy_path (line 355) | def test_large_policy_path(self, client: TestClient, auth_headers: Dic... method test_special_characters_in_policy_path (line 371) | def test_special_characters_in_policy_path(self, client: TestClient, a... FILE: build_stream/tests/integration/api/generate_input_files/test_generate_input_files_artifact_integration.py class TestGenerateInputFilesArtifactStorage (line 35) | class TestGenerateInputFilesArtifactStorage: # pylint: disable=attribut... method setup_method (line 38) | def setup_method(self) -> None: method teardown_method (line 62) | def teardown_method(self) -> None: method test_file_artifact_store_is_used_when_enabled (line 77) | def test_file_artifact_store_is_used_when_enabled(self) -> None: method test_generate_input_files_creates_artifacts_on_file_store (line 82) | def test_generate_input_files_creates_artifacts_on_file_store(self) ->... method test_generate_input_files_with_custom_policy_creates_artifacts (line 197) | def test_generate_input_files_with_custom_policy_creates_artifacts(sel... method test_generate_input_files_handles_missing_prerequisites (line 297) | def test_generate_input_files_handles_missing_prerequisites(self) -> N... method test_generate_input_files_artifact_metadata (line 329) | def test_generate_input_files_artifact_metadata(self) -> None: FILE: build_stream/tests/integration/api/generate_input_files/test_generate_input_files_routes.py class TestGenerateInputFilesRoutes (line 28) | class TestGenerateInputFilesRoutes: method test_generate_input_files_endpoint_exists (line 32) | def test_generate_input_files_endpoint_exists(self, client: TestClient... method test_generate_input_files_with_valid_request (line 45) | def test_generate_input_files_with_valid_request(self, client: TestCli... method test_generate_input_files_with_custom_policy (line 57) | def test_generate_input_files_with_custom_policy(self, client: TestCli... method test_generate_input_files_requires_authentication (line 73) | def test_generate_input_files_requires_authentication(self, client: Te... method test_generate_input_files_requires_correlation_id (line 82) | def test_generate_input_files_requires_correlation_id(self, client: Te... method test_generate_input_files_invalid_job_id_format (line 93) | def test_generate_input_files_invalid_job_id_format(self, client: Test... method test_generate_input_files_invalid_policy_path (line 103) | def test_generate_input_files_invalid_policy_path(self, client: TestCl... method test_generate_input_files_empty_policy_path (line 119) | def test_generate_input_files_empty_policy_path(self, client: TestClie... method test_generate_input_files_openapi_documentation (line 135) | def test_generate_input_files_openapi_documentation(self, client: Test... method test_generate_input_files_api_docs_accessible (line 144) | def test_generate_input_files_api_docs_accessible(self, client: TestCl... method test_generate_input_files_response_structure (line 154) | def test_generate_input_files_response_structure(self, client: TestCli... method test_generate_input_files_error_handling (line 173) | def test_generate_input_files_error_handling(self, client: TestClient,... method test_generate_input_files_default_policy_usage (line 186) | def test_generate_input_files_default_policy_usage(self, client: TestC... FILE: build_stream/tests/integration/api/jobs/conftest.py function _mock_verify_token (line 32) | def _mock_verify_token( function client (line 52) | def client(): function unauth_client (line 61) | def unauth_client(): function uuid_generator_fixture (line 67) | def uuid_generator_fixture(): function auth_headers (line 73) | def auth_headers(uuid_generator) -> Dict[str, str]: function unique_idempotency_key (line 83) | def unique_idempotency_key(uuid_generator) -> str: function unique_correlation_id (line 89) | def unique_correlation_id(uuid_generator) -> str: FILE: build_stream/tests/integration/api/jobs/test_create_job_api.py class TestCreateJobSuccess (line 20) | class TestCreateJobSuccess: method test_create_job_returns_201_with_valid_request (line 23) | def test_create_job_returns_201_with_valid_request(self, client, auth_... method test_create_job_returns_valid_uuid (line 40) | def test_create_job_returns_valid_uuid(self, client, auth_headers): method test_create_job_returns_created_state (line 52) | def test_create_job_returns_created_state(self, client, auth_headers): method test_create_job_creates_all_nine_stages (line 60) | def test_create_job_creates_all_nine_stages(self, client, auth_headers): method test_create_job_all_stages_pending (line 81) | def test_create_job_all_stages_pending(self, client, auth_headers): method test_create_job_returns_correlation_id (line 96) | def test_create_job_returns_correlation_id( class TestCreateJobIdempotency (line 112) | class TestCreateJobIdempotency: method test_idempotent_request_returns_200_with_same_job (line 115) | def test_idempotent_request_returns_200_with_same_job( method test_idempotency_with_different_correlation_id (line 135) | def test_idempotency_with_different_correlation_id( class TestCreateJobValidation (line 181) | class TestCreateJobValidation: method test_missing_client_id_returns_422 (line 184) | def test_missing_client_id_returns_422(self, client, auth_headers): method test_missing_client_name_is_allowed (line 192) | def test_missing_client_name_is_allowed(self, client, auth_headers): method test_empty_client_id_returns_422 (line 200) | def test_empty_client_id_returns_422(self, client, auth_headers): method test_empty_client_name_returns_400 (line 208) | def test_empty_client_name_returns_400(self, client, auth_headers): method test_client_id_whitespace_only_returns_422 (line 216) | def test_client_id_whitespace_only_returns_422(self, client, auth_head... method test_client_name_whitespace_only_returns_400 (line 224) | def test_client_name_whitespace_only_returns_400(self, client, auth_he... class TestCreateJobAuthentication (line 233) | class TestCreateJobAuthentication: method test_missing_authorization_header_returns_422 (line 236) | def test_missing_authorization_header_returns_422(self, unauth_client,... method test_invalid_authorization_format_returns_401 (line 248) | def test_invalid_authorization_format_returns_401( method test_empty_bearer_token_returns_401 (line 263) | def test_empty_bearer_token_returns_401(self, unauth_client, unique_id... class TestCreateJobHeaders (line 277) | class TestCreateJobHeaders: method test_missing_idempotency_key_returns_422 (line 280) | def test_missing_idempotency_key_returns_422(self, client): method test_auto_generates_correlation_id_if_missing (line 292) | def test_auto_generates_correlation_id_if_missing( FILE: build_stream/tests/integration/api/jobs/test_delete_job_api.py class TestDeleteJobSuccess (line 22) | class TestDeleteJobSuccess: method test_delete_existing_job_returns_204 (line 25) | def test_delete_existing_job_returns_204(self, client, auth_headers): method test_delete_job_is_idempotent (line 41) | def test_delete_job_is_idempotent(self, client, auth_headers): method test_deleted_job_not_retrievable (line 58) | def test_deleted_job_not_retrievable(self, client, auth_headers): class TestDeleteJobNotFound (line 76) | class TestDeleteJobNotFound: method test_delete_nonexistent_job_returns_404 (line 79) | def test_delete_nonexistent_job_returns_404(self, client, auth_headers): method test_delete_job_invalid_uuid_format_returns_400 (line 91) | def test_delete_job_invalid_uuid_format_returns_400(self, client, auth... class TestDeleteJobAuthentication (line 104) | class TestDeleteJobAuthentication: method test_delete_job_missing_authorization_returns_422 (line 107) | def test_delete_job_missing_authorization_returns_422(self, unauth_cli... method test_delete_job_invalid_auth_format_returns_401 (line 116) | def test_delete_job_invalid_auth_format_returns_401( class TestDeleteJobClientIsolation (line 131) | class TestDeleteJobClientIsolation: method test_different_client_cannot_delete_job (line 134) | def test_different_client_cannot_delete_job( FILE: build_stream/tests/integration/api/jobs/test_get_job_api.py class TestGetJobSuccess (line 22) | class TestGetJobSuccess: method test_get_existing_job_returns_200 (line 25) | def test_get_existing_job_returns_200(self, client, auth_headers): method test_get_job_returns_all_stages (line 45) | def test_get_job_returns_all_stages(self, client, auth_headers): method test_get_job_returns_correlation_id (line 61) | def test_get_job_returns_correlation_id(self, client, auth_headers, un... class TestGetJobNotFound (line 77) | class TestGetJobNotFound: method test_get_nonexistent_job_returns_404 (line 80) | def test_get_nonexistent_job_returns_404(self, client, auth_headers): method test_get_job_invalid_uuid_format_returns_400 (line 92) | def test_get_job_invalid_uuid_format_returns_400(self, client, auth_he... class TestGetJobAuthentication (line 105) | class TestGetJobAuthentication: method test_get_job_missing_authorization_returns_422 (line 108) | def test_get_job_missing_authorization_returns_422(self, unauth_client... method test_get_job_invalid_authorization_format_returns_401 (line 117) | def test_get_job_invalid_authorization_format_returns_401(self, unauth... class TestGetJobClientIsolation (line 130) | class TestGetJobClientIsolation: method test_different_client_cannot_access_job (line 133) | def test_different_client_cannot_access_job( class TestGetJobStateMapping (line 156) | class TestGetJobStateMapping: method test_get_job_returns_mapped_state_names (line 159) | def test_get_job_returns_mapped_state_names(self, client, auth_headers): method test_get_job_returns_state_timestamps (line 179) | def test_get_job_returns_state_timestamps(self, client, auth_headers): method test_get_job_returns_step_breakdown (line 204) | def test_get_job_returns_step_breakdown(self, client, auth_headers): FILE: build_stream/tests/integration/api/local_repo/conftest.py function client (line 30) | def client(): function unauth_client (line 52) | def unauth_client(): function uuid_generator_fixture (line 59) | def uuid_generator_fixture(): function auth_headers_fixture (line 65) | def auth_headers_fixture(uuid_generator) -> Dict[str, str]: function unique_correlation_id (line 75) | def unique_correlation_id(uuid_generator) -> str: function created_job (line 81) | def created_job(client, auth_headers) -> str: function nfs_queue_dir (line 90) | def nfs_queue_dir(tmp_path): function input_dir (line 106) | def input_dir(tmp_path): function setup_input_files (line 112) | def setup_input_files(input_dir_path: Path, job_id: str) -> Path: FILE: build_stream/tests/integration/api/local_repo/test_create_local_repo_api.py class TestCreateLocalRepoSuccess (line 22) | class TestCreateLocalRepoSuccess: method test_returns_202_with_valid_request (line 25) | def test_returns_202_with_valid_request( method test_returns_correlation_id (line 64) | def test_returns_correlation_id( class TestCreateLocalRepoValidation (line 104) | class TestCreateLocalRepoValidation: method test_invalid_job_id_returns_400 (line 107) | def test_invalid_job_id_returns_400(self, client, auth_headers): method test_nonexistent_job_returns_404 (line 116) | def test_nonexistent_job_returns_404(self, client, auth_headers): class TestCreateLocalRepoAuthentication (line 127) | class TestCreateLocalRepoAuthentication: method test_missing_authorization_returns_422 (line 130) | def test_missing_authorization_returns_422(self, unauth_client): method test_invalid_authorization_format_returns_401 (line 140) | def test_invalid_authorization_format_returns_401(self, unauth_client): method test_empty_bearer_token_returns_401 (line 151) | def test_empty_bearer_token_returns_401(self, unauth_client): class TestCreateLocalRepoInputValidation (line 163) | class TestCreateLocalRepoInputValidation: method test_missing_input_files_returns_400 (line 166) | def test_missing_input_files_returns_400(self, client, auth_headers, c... FILE: build_stream/tests/integration/api/local_repo/test_create_local_repo_edge_cases.py class TestCreateLocalRepoEdgeCases (line 27) | class TestCreateLocalRepoEdgeCases: method test_concurrent_requests_same_job (line 30) | def test_concurrent_requests_same_job( method test_request_with_very_long_correlation_id (line 57) | def test_request_with_very_long_correlation_id( method test_request_with_unicode_characters (line 74) | def test_request_with_unicode_characters( method test_request_when_nfs_queue_full (line 88) | def test_request_when_nfs_queue_full(self, client, auth_headers, creat... method test_request_with_malformed_authorization_header (line 100) | def test_request_with_malformed_authorization_header(self, unauth_clie... method test_request_with_expired_job (line 110) | def test_request_with_expired_job(self, client, auth_headers, created_... method test_request_when_input_directory_has_permissions_issue (line 120) | def test_request_when_input_directory_has_permissions_issue( method test_request_with_multiple_auth_headers (line 132) | def test_request_with_multiple_auth_headers(self, unauth_client): method test_request_with_large_request_body (line 147) | def test_request_with_large_request_body(self, client, auth_headers, c... method test_request_with_content_type_header (line 179) | def test_request_with_content_type_header(self, client, auth_headers, ... FILE: build_stream/tests/integration/api/parse_catalog/conftest.py function client (line 25) | def client(tmp_path): function uuid_generator_fixture (line 71) | def uuid_generator_fixture(): function auth_headers_fixture (line 78) | def auth_headers_fixture(uuid_generator) -> Dict[str, str]: function unique_correlation_id (line 88) | def unique_correlation_id(uuid_generator) -> str: function created_job (line 94) | def created_job(client, auth_headers) -> str: FILE: build_stream/tests/integration/api/parse_catalog/test_parse_catalog_api.py class TestParseCatalogAPI (line 26) | class TestParseCatalogAPI: # pylint: disable=too-many-public-methods method valid_catalog_json (line 31) | def valid_catalog_json(self) -> Dict[str, Any]: method test_parse_catalog_success_happy_path (line 42) | def test_parse_catalog_success_happy_path( method test_parse_catalog_with_custom_filename (line 70) | def test_parse_catalog_with_custom_filename( method test_parse_catalog_invalid_json_format (line 96) | def test_parse_catalog_invalid_json_format( method test_parse_catalog_malformed_json (line 116) | def test_parse_catalog_malformed_json( method test_parse_catalog_schema_validation_error (line 136) | def test_parse_catalog_schema_validation_error( method test_parse_catalog_file_too_large (line 163) | def test_parse_catalog_file_too_large( method test_parse_catalog_job_not_found (line 192) | def test_parse_catalog_job_not_found( method test_parse_catalog_already_completed (line 211) | def test_parse_catalog_already_completed( method test_parse_catalog_job_in_terminal_state (line 240) | def test_parse_catalog_job_in_terminal_state( method test_parse_catalog_no_authentication (line 271) | def test_parse_catalog_no_authentication( method test_parse_catalog_invalid_token (line 290) | def test_parse_catalog_invalid_token( method test_parse_catalog_invalid_job_id_format (line 314) | def test_parse_catalog_invalid_job_id_format( method test_parse_catalog_no_file_uploaded (line 331) | def test_parse_catalog_no_file_uploaded( method test_parse_catalog_artifact_storage_verification (line 350) | def test_parse_catalog_artifact_storage_verification( method test_parse_catalog_cross_stage_lookup (line 390) | def test_parse_catalog_cross_stage_lookup( method test_parse_catalog_error_sanitization (line 427) | def test_parse_catalog_error_sanitization( method test_parse_catalog_concurrent_requests (line 459) | def test_parse_catalog_concurrent_requests( FILE: build_stream/tests/integration/api/parse_catalog/test_parse_catalog_artifact_integration.py class TestFileArtifactStorage (line 34) | class TestFileArtifactStorage: # pylint: disable=attribute-defined-outs... method setup_method (line 37) | def setup_method(self) -> None: method teardown_method (line 63) | def teardown_method(self) -> None: method test_file_artifact_store_is_used_when_enabled (line 78) | def test_file_artifact_store_is_used_when_enabled(self) -> None: method test_parse_catalog_creates_artifacts_on_file_store (line 83) | def test_parse_catalog_creates_artifacts_on_file_store(self) -> None: ... method test_artifact_retrieval_from_file_store (line 153) | def test_artifact_retrieval_from_file_store(self) -> None: method test_artifact_deletion_from_file_store (line 186) | def test_artifact_deletion_from_file_store(self) -> None: method test_working_dir_is_used_for_temp_files (line 216) | def test_working_dir_is_used_for_temp_files(self) -> None: method test_archive_artifact_storage_on_file_store (line 231) | def test_archive_artifact_storage_on_file_store(self) -> None: FILE: build_stream/tests/integration/api/parse_catalog/test_parse_catalog_routes.py class TestParseCatalogRoutes (line 27) | class TestParseCatalogRoutes: method setup_method (line 30) | def setup_method(self) -> None: method test_parse_catalog_endpoint_exists (line 40) | def test_parse_catalog_endpoint_exists(self) -> None: method test_parse_catalog_with_valid_request_structure (line 54) | def test_parse_catalog_with_valid_request_structure(self, mock_jwt_val... method test_parse_catalog_requires_authentication (line 90) | def test_parse_catalog_requires_authentication(self) -> None: method test_parse_catalog_requires_correlation_id (line 100) | def test_parse_catalog_requires_correlation_id(self, mock_jwt_validati... method test_parse_catalog_invalid_job_id_format (line 111) | def test_parse_catalog_invalid_job_id_format(self, mock_jwt_validation... method test_parse_catalog_missing_file_parameter (line 122) | def test_parse_catalog_missing_file_parameter(self, mock_jwt_validatio... method test_parse_catalog_invalid_file_format (line 132) | def test_parse_catalog_invalid_file_format(self, mock_jwt_validation) ... method test_parse_catalog_invalid_json_content (line 143) | def test_parse_catalog_invalid_json_content(self, mock_jwt_validation)... method test_parse_catalog_oversized_file (line 154) | def test_parse_catalog_oversized_file(self, mock_jwt_validation) -> None: method test_parse_catalog_openapi_documentation (line 168) | def test_parse_catalog_openapi_documentation(self) -> None: method test_parse_catalog_api_docs_accessible (line 192) | def test_parse_catalog_api_docs_accessible(self) -> None: method test_parse_catalog_service_integration (line 203) | def test_parse_catalog_service_integration(self, mock_service, mock_jw... FILE: build_stream/tests/integration/api/validate/conftest.py function client (line 31) | def client(tmp_path): function uuid_generator_fixture (line 75) | def uuid_generator_fixture(): function auth_headers_fixture (line 81) | def auth_headers_fixture(uuid_generator) -> Dict[str, str]: function unique_correlation_id (line 91) | def unique_correlation_id(uuid_generator) -> str: function created_job (line 97) | def created_job(client, auth_headers) -> str: function job_with_completed_build_image (line 106) | def job_with_completed_build_image(client, auth_headers, created_job, mo... function nfs_queue_dir (line 146) | def nfs_queue_dir(tmp_path): FILE: build_stream/tests/integration/api/validate/test_models.py class Job (line 36) | class Job(Base): class Stage (line 58) | class Stage(Base): class AuditEvent (line 89) | class AuditEvent(Base): class IdempotencyRecord (line 120) | class IdempotencyRecord(Base): class ArtifactRecord (line 142) | class ArtifactRecord(Base): class StageLock (line 168) | class StageLock(Base): FILE: build_stream/tests/integration/api/validate/test_validate_image_on_test_api.py class TestValidateImageOnTestSuccess (line 22) | class TestValidateImageOnTestSuccess: method test_returns_202_with_valid_request (line 25) | def test_returns_202_with_valid_request( method test_returns_correlation_id (line 52) | def test_returns_correlation_id( method test_queue_submission (line 82) | def test_queue_submission( class TestValidateImageOnTestValidation (line 123) | class TestValidateImageOnTestValidation: method test_invalid_job_id_returns_400 (line 126) | def test_invalid_job_id_returns_400(self, client, auth_headers): method test_nonexistent_job_returns_404 (line 137) | def test_nonexistent_job_returns_404(self, client, auth_headers): method test_stage_guard_violation_returns_412 (line 149) | def test_stage_guard_violation_returns_412( class TestValidateImageOnTestAuthentication (line 164) | class TestValidateImageOnTestAuthentication: method test_missing_authorization_returns_422 (line 167) | def test_missing_authorization_returns_422( method test_invalid_authorization_format_returns_401 (line 181) | def test_invalid_authorization_format_returns_401( method test_empty_bearer_token_returns_401 (line 196) | def test_empty_bearer_token_returns_401( class TestValidateImageOnTestErrorHandling (line 212) | class TestValidateImageOnTestErrorHandling: method test_queue_unavailable_returns_500 (line 215) | def test_queue_unavailable_returns_500( FILE: build_stream/tests/integration/conftest.py function generate_secure_test_password (line 62) | def generate_secure_test_password(length: int = 24) -> str: function generate_test_client_secret (line 100) | def generate_test_client_secret(length: int = 32) -> str: function generate_invalid_client_id (line 119) | def generate_invalid_client_id() -> str: function generate_invalid_client_secret (line 128) | def generate_invalid_client_secret() -> str: class IntegrationTestConfig (line 137) | class IntegrationTestConfig: method get_vault_password (line 147) | def get_vault_password(cls) -> str: method get_auth_password (line 156) | def get_auth_password(cls) -> str: class VaultManager (line 165) | class VaultManager: # noqa: R0902 pylint: disable=too-many-instance-att... method __init__ (line 168) | def __init__(self, base_dir: str): method setup (line 190) | def setup(self, username: str, password: str) -> None: method _generate_jwt_keys (line 254) | def _generate_jwt_keys(self) -> None: method cleanup (line 289) | def cleanup(self) -> None: class ServerManager (line 297) | class ServerManager: method __init__ (line 315) | def __init__( # noqa: R0913,R0917 pylint: disable=too-many-arguments,... method _setup_venv (line 339) | def _setup_venv(self) -> None: method python_path (line 372) | def python_path(self) -> str: method _is_port_in_use (line 376) | def _is_port_in_use(self) -> bool: method _free_port (line 381) | def _free_port(self) -> None: method start (line 401) | def start(self) -> None: method _wait_for_server (line 458) | def _wait_for_server(self) -> None: method stop (line 498) | def stop(self) -> None: method base_url (line 518) | def base_url(self) -> str: function integration_test_dir (line 524) | def integration_test_dir() -> Generator[str, None, None]: function vault_manager (line 536) | def vault_manager( function project_dir (line 559) | def project_dir() -> str: function venv_dir (line 569) | def venv_dir(integration_test_dir: str) -> str: # noqa: W0621 function server_manager (line 582) | def server_manager( function base_url (line 610) | def base_url(server_manager: ServerManager) -> str: # noqa: W0621 function auth_password (line 623) | def auth_password() -> str: function valid_auth_header (line 633) | def valid_auth_header(auth_password: str) -> Dict[str, str]: # noqa: W0621 function invalid_auth_header (line 649) | def invalid_auth_header() -> Dict[str, str]: function reset_vault (line 660) | def reset_vault( FILE: build_stream/tests/integration/core/catalog/test_adapter_cli_defaults.py class TestAdapterDefaults (line 33) | class TestAdapterDefaults(unittest.TestCase): method test_default_schema_path_points_to_resources (line 34) | def test_default_schema_path_points_to_resources(self): method test_generate_omnia_json_with_defaults_writes_output (line 39) | def test_generate_omnia_json_with_defaults_writes_output(self): FILE: build_stream/tests/integration/core/catalog/test_adapter_policy.py class TestValidatePolicyConfig (line 52) | class TestValidatePolicyConfig(unittest.TestCase): method setUp (line 55) | def setUp(self): method test_valid_policy_passes_validation (line 73) | def test_valid_policy_passes_validation(self): method test_missing_version_raises_error (line 82) | def test_missing_version_raises_error(self): method test_missing_targets_raises_error (line 95) | def test_missing_targets_raises_error(self): method test_invalid_target_spec_raises_error (line 108) | def test_invalid_target_spec_raises_error(self): method test_allowlist_filter_policy_validates (line 125) | def test_allowlist_filter_policy_validates(self): method test_field_in_filter_policy_validates (line 158) | def test_field_in_filter_policy_validates(self): method test_any_of_filter_requires_filters (line 191) | def test_any_of_filter_requires_filters(self): method test_any_of_filter_policy_validates (line 218) | def test_any_of_filter_policy_validates(self): class TestDiscoverArchitectures (line 253) | class TestDiscoverArchitectures(unittest.TestCase): method test_discovers_architecture_directories (line 256) | def test_discovers_architecture_directories(self): method test_returns_empty_for_nonexistent_dir (line 268) | def test_returns_empty_for_nonexistent_dir(self): method test_returns_empty_for_empty_dir (line 273) | def test_returns_empty_for_empty_dir(self): class TestDiscoverOsVersions (line 280) | class TestDiscoverOsVersions(unittest.TestCase): method test_discovers_os_and_versions (line 283) | def test_discovers_os_and_versions(self): method test_returns_empty_for_nonexistent_arch (line 296) | def test_returns_empty_for_nonexistent_arch(self): class TestTransformPackage (line 303) | class TestTransformPackage(unittest.TestCase): method test_no_transform_returns_copy (line 306) | def test_no_transform_returns_copy(self): method test_exclude_fields (line 313) | def test_exclude_fields(self): method test_rename_fields (line 320) | def test_rename_fields(self): method test_exclude_and_rename_combined (line 327) | def test_exclude_and_rename_combined(self): class TestApplySubstringFilter (line 338) | class TestApplySubstringFilter(unittest.TestCase): method test_filters_by_substring (line 341) | def test_filters_by_substring(self): method test_case_insensitive_by_default (line 356) | def test_case_insensitive_by_default(self): method test_case_sensitive_when_specified (line 369) | def test_case_sensitive_when_specified(self): method test_empty_values_returns_all (line 384) | def test_empty_values_returns_all(self): class TestAllowlistAndFieldFilters (line 392) | class TestAllowlistAndFieldFilters(unittest.TestCase): method test_allowlist_matches_exact_package_names (line 393) | def test_allowlist_matches_exact_package_names(self): method test_field_in_matches_classification_field (line 409) | def test_field_in_matches_classification_field(self): method test_any_of_combines_multiple_strategies (line 425) | def test_any_of_combines_multiple_strategies(self): class TestComputeCommonPackages (line 464) | class TestComputeCommonPackages(unittest.TestCase): method test_finds_common_packages (line 467) | def test_finds_common_packages(self): method test_respects_min_occurrences (line 484) | def test_respects_min_occurrences(self): class TestMergeTransform (line 497) | class TestMergeTransform(unittest.TestCase): method test_none_inputs_return_none (line 500) | def test_none_inputs_return_none(self): method test_base_only (line 504) | def test_base_only(self): method test_override_only (line 509) | def test_override_only(self): method test_override_wins (line 514) | def test_override_wins(self): class TestCheckConditions (line 522) | class TestCheckConditions(unittest.TestCase): method test_no_conditions_returns_true (line 525) | def test_no_conditions_returns_true(self): method test_architecture_condition (line 529) | def test_architecture_condition(self): method test_os_family_condition (line 535) | def test_os_family_condition(self): method test_os_version_condition (line 541) | def test_os_version_condition(self): method test_multiple_conditions_all_must_pass (line 547) | def test_multiple_conditions_all_must_pass(self): class TestDeriveCommonRole (line 558) | class TestDeriveCommonRole(unittest.TestCase): method test_derives_common_packages (line 561) | def test_derives_common_packages(self): method test_removes_from_sources_when_specified (line 578) | def test_removes_from_sources_when_specified(self): method test_keeps_sources_when_not_removing (line 594) | def test_keeps_sources_when_not_removing(self): class TestWriteConfigFile (line 610) | class TestWriteConfigFile(unittest.TestCase): method test_writes_valid_json (line 613) | def test_writes_valid_json(self): method test_creates_parent_directories (line 628) | def test_creates_parent_directories(self): class TestGenerateConfigsFromPolicy (line 637) | class TestGenerateConfigsFromPolicy(unittest.TestCase): method setUp (line 640) | def setUp(self): method test_generates_output_files (line 644) | def test_generates_output_files(self): method test_generates_openldap_with_any_of_filter (line 689) | def test_generates_openldap_with_any_of_filter(self): method test_invalid_policy_raises_error (line 761) | def test_invalid_policy_raises_error(self): method test_missing_input_dir_raises_file_not_found (line 783) | def test_missing_input_dir_raises_file_not_found(self): method test_missing_policy_file_raises_file_not_found (line 797) | def test_missing_policy_file_raises_file_not_found(self): method test_missing_schema_file_raises_file_not_found (line 814) | def test_missing_schema_file_raises_file_not_found(self): class TestDefaultPaths (line 832) | class TestDefaultPaths(unittest.TestCase): method test_default_policy_path_exists (line 835) | def test_default_policy_path_exists(self): method test_default_schema_path_exists (line 842) | def test_default_schema_path_exists(self): method test_default_policy_validates_against_schema (line 849) | def test_default_policy_validates_against_schema(self): class TestProcessTargetSpec (line 865) | class TestProcessTargetSpec(unittest.TestCase): method test_processes_simple_target (line 868) | def test_processes_simple_target(self): method test_skips_when_conditions_not_met (line 896) | def test_skips_when_conditions_not_met(self): method test_applies_transform (line 920) | def test_applies_transform(self): FILE: build_stream/tests/integration/core/catalog/test_generator_cli_defaults.py class TestGeneratorDefaults (line 28) | class TestGeneratorDefaults(unittest.TestCase): method test_default_schema_path_points_to_resources (line 29) | def test_default_schema_path_points_to_resources(self): method test_generate_root_json_with_defaults_writes_output (line 34) | def test_generate_root_json_with_defaults_writes_output(self): FILE: build_stream/tests/integration/core/catalog/test_generator_package_list.py class TestGetPackageList (line 37) | class TestGetPackageList(unittest.TestCase): method setUp (line 40) | def setUp(self): method test_get_packages_for_valid_single_role (line 48) | def test_get_packages_for_valid_single_role(self): method test_get_packages_for_all_roles_when_role_is_none (line 59) | def test_get_packages_for_all_roles_when_role_is_none(self): method test_invalid_role_raises_value_error (line 76) | def test_invalid_role_raises_value_error(self): method test_empty_role_raises_value_error (line 83) | def test_empty_role_raises_value_error(self): method test_file_not_found_raises_error (line 90) | def test_file_not_found_raises_error(self): method test_malformed_json_raises_error (line 95) | def test_malformed_json_raises_error(self): method test_schema_validation_failure_raises_error (line 105) | def test_schema_validation_failure_raises_error(self): method test_empty_feature_list_returns_empty_list (line 128) | def test_empty_feature_list_returns_empty_list(self): method test_package_attributes_are_complete (line 139) | def test_package_attributes_are_complete(self): method test_package_with_uri_and_tag (line 153) | def test_package_with_uri_and_tag(self): method test_role_with_spaces_in_name (line 170) | def test_role_with_spaces_in_name(self): method test_all_roles_returns_correct_package_counts (line 177) | def test_all_roles_returns_correct_package_counts(self): method test_case_insensitive_role_matching_lowercase (line 192) | def test_case_insensitive_role_matching_lowercase(self): method test_case_insensitive_role_matching_uppercase (line 200) | def test_case_insensitive_role_matching_uppercase(self): method test_case_insensitive_role_matching_mixed_case (line 207) | def test_case_insensitive_role_matching_mixed_case(self): method test_case_insensitive_role_matching_preserves_original_name (line 214) | def test_case_insensitive_role_matching_preserves_original_name(self): FILE: build_stream/tests/integration/core/catalog/test_generator_roles.py class TestGetFunctionalLayerRolesFromFile (line 33) | class TestGetFunctionalLayerRolesFromFile(unittest.TestCase): method test_returns_all_role_names_from_fixture (line 34) | def test_returns_all_role_names_from_fixture(self): method test_empty_feature_list_returns_empty_roles (line 52) | def test_empty_feature_list_returns_empty_roles(self): method test_invalid_functional_layer_json_fails_schema_validation (line 62) | def test_invalid_functional_layer_json_fails_schema_validation(self): FILE: build_stream/tests/integration/infra/artifact_store/test_file_artifact_store.py class TestFileArtifactStoreIntegration (line 37) | class TestFileArtifactStoreIntegration: method setup_method (line 40) | def setup_method(self) -> None: method teardown_method (line 64) | def teardown_method(self) -> None: method test_file_artifact_store_is_used_when_enabled_in_config (line 80) | def test_file_artifact_store_is_used_when_enabled_in_config(self) -> N... method test_file_artifact_store_uses_configured_path (line 85) | def test_file_artifact_store_uses_configured_path(self) -> None: method test_file_artifact_store_creates_directories (line 94) | def test_file_artifact_store_creates_directories(self) -> None: method test_store_and_retrieve_file (line 105) | def test_store_and_retrieve_file(self) -> None: method test_store_and_retrieve_archive_from_file_map (line 124) | def test_store_and_retrieve_archive_from_file_map(self) -> None: method test_store_and_retrieve_archive_from_directory (line 155) | def test_store_and_retrieve_archive_from_directory(self) -> None: method test_exists_and_delete (line 181) | def test_exists_and_delete(self) -> None: method test_duplicate_store_raises_error (line 205) | def test_duplicate_store_raises_error(self) -> None: method test_retrieve_nonexistent_raises_error (line 219) | def test_retrieve_nonexistent_raises_error(self) -> None: method test_content_type_validation (line 228) | def test_content_type_validation(self) -> None: method test_size_validation (line 246) | def test_size_validation(self) -> None: method test_deterministic_key_generation (line 262) | def test_deterministic_key_generation(self) -> None: method test_key_format_validation (line 284) | def test_key_format_validation(self) -> None: method test_file_cleanup_on_delete (line 303) | def test_file_cleanup_on_delete(self) -> None: method test_concurrent_operations (line 325) | def test_concurrent_operations(self) -> None: class TestFileArtifactStoreConfiguration (line 366) | class TestFileArtifactStoreConfiguration: method test_missing_config_fallback (line 369) | def test_missing_config_fallback(self) -> None: method test_invalid_config_handling (line 391) | def test_invalid_config_handling(self) -> None: FILE: build_stream/tests/integration/infra/db/conftest.py function sample_job (line 35) | def sample_job() -> JobId: function sample_client_id (line 41) | def sample_client_id() -> ClientId: function sample_idempotency_key (line 47) | def sample_idempotency_key() -> IdempotencyKey: function sample_correlation_id (line 53) | def sample_correlation_id() -> CorrelationId: function sample_request_fingerprint (line 59) | def sample_request_fingerprint() -> RequestFingerprint: function sample_timestamp (line 65) | def sample_timestamp() -> datetime: function sample_stage_names (line 71) | def sample_stage_names() -> list[StageName]: function sample_job_states (line 88) | def sample_job_states() -> list[JobState]: function sample_stage_states (line 94) | def sample_stage_states() -> list[StageState]: FILE: build_stream/tests/integration/infra/db/test_sql_repositories.py function pg_url (line 53) | def pg_url() -> str: function db_engine (line 75) | def db_engine(pg_url: str) -> Generator: function db_session (line 84) | def db_session(db_engine) -> Generator[Session, None, None]: function job_repo (line 95) | def job_repo(db_session: Session) -> SqlJobRepository: function stage_repo (line 101) | def stage_repo(db_session: Session) -> SqlStageRepository: function idempotency_repo (line 107) | def idempotency_repo(db_session: Session) -> SqlIdempotencyRepository: function audit_repo (line 113) | def audit_repo(db_session: Session) -> SqlAuditEventRepository: class TestSqlJobRepository (line 118) | class TestSqlJobRepository: method test_save_and_find_by_id (line 121) | def test_save_and_find_by_id(self, job_repo: SqlJobRepository) -> None: method test_exists (line 142) | def test_exists(self, job_repo: SqlJobRepository) -> None: method test_update_with_optimistic_locking (line 156) | def test_update_with_optimistic_locking(self, job_repo: SqlJobReposito... method test_find_by_id_not_found (line 186) | def test_find_by_id_not_found(self, job_repo: SqlJobRepository) -> None: class TestSqlStageRepository (line 192) | class TestSqlStageRepository: method test_save_and_find_by_job_and_name (line 195) | def test_save_and_find_by_job_and_name( method test_save_all_and_find_all_by_job (line 223) | def test_save_all_and_find_all_by_job( method test_update_with_optimistic_locking (line 266) | def test_update_with_optimistic_locking( class TestSqlIdempotencyRepository (line 304) | class TestSqlIdempotencyRepository: method test_save_and_find_by_key (line 307) | def test_save_and_find_by_key( method test_find_by_key_not_found (line 329) | def test_find_by_key_not_found( class TestSqlAuditEventRepository (line 337) | class TestSqlAuditEventRepository: method test_save_and_find_by_job (line 340) | def test_save_and_find_by_job(self, audit_repo: SqlAuditEventRepositor... class TestDatabaseConstraints (line 376) | class TestDatabaseConstraints: method test_foreign_key_cascade_delete (line 379) | def test_foreign_key_cascade_delete( method test_unique_constraint_on_stages (line 414) | def test_unique_constraint_on_stages( FILE: build_stream/tests/mocks/mock_jwt_handler.py class MockJWTHandler (line 26) | class MockJWTHandler: method __init__ (line 37) | def __init__( method create_access_token (line 55) | def create_access_token( method validate_token (line 121) | def validate_token(self, token: str) -> TokenData: method reset (line 150) | def reset(self) -> None: FILE: build_stream/tests/mocks/mock_vault_client.py class MockVaultClient (line 22) | class MockVaultClient: method __init__ (line 32) | def __init__( method get_auth_config (line 54) | def get_auth_config(self) -> Dict[str, Any]: method get_oauth_clients (line 62) | def get_oauth_clients(self) -> Dict[str, Any]: method save_oauth_client (line 70) | def save_oauth_client( method get_active_client_count (line 83) | def get_active_client_count(self) -> int: method client_exists (line 94) | def client_exists(self, client_name: str) -> bool: method reset (line 108) | def reset(self) -> None: method add_test_client (line 112) | def add_test_client( FILE: build_stream/tests/others/test_dependency_rules.py function get_python_files (line 29) | def get_python_files(directory: str, pattern: str = "*.py") -> List[Path]: function check_forbidden_imports (line 37) | def check_forbidden_imports(file_path: Path, forbidden_modules: List[str... function check_forbidden_calls (line 66) | def check_forbidden_calls(file_path: Path, forbidden_patterns: List[str]... class TestDesignRules (line 87) | class TestDesignRules: method test_api_routes_dont_import_container (line 90) | def test_api_routes_dont_import_container(self): method test_api_routes_dont_call_container_methods (line 119) | def test_api_routes_dont_call_container_methods(self): method test_use_cases_dont_import_infra_db (line 153) | def test_use_cases_dont_import_infra_db(self): method test_core_domain_has_no_infra_dependencies (line 180) | def test_core_domain_has_no_infra_dependencies(self): method test_all_route_files_have_dependency_providers (line 209) | def test_all_route_files_have_dependency_providers(self): class TestDependencyInjectionPatterns (line 239) | class TestDependencyInjectionPatterns: method test_routes_use_depends_for_use_cases (line 242) | def test_routes_use_depends_for_use_cases(self): FILE: build_stream/tests/performance/test_local_repo_performance.py class TestLocalRepoPerformance (line 30) | class TestLocalRepoPerformance: method test_response_time_under_threshold (line 34) | def test_response_time_under_threshold(self, client, auth_headers, cre... method test_concurrent_requests_performance (line 71) | def test_concurrent_requests_performance(self, client, auth_headers, c... method test_memory_usage_stable (line 136) | def test_memory_usage_stable(self, client, auth_headers, created_job, ... method test_large_correlation_id_handling (line 182) | def test_large_correlation_id_handling(self, client, auth_headers, cre... FILE: build_stream/tests/unit/api/auth/test_password_handler.py function test_password (line 30) | def test_password(): function test_password_pair (line 36) | def test_password_pair(): class TestPasswordHashing (line 42) | class TestPasswordHashing: method test_hash_password_returns_argon2_hash (line 45) | def test_hash_password_returns_argon2_hash(self, test_password): # no... method test_hash_password_different_for_same_input (line 52) | def test_hash_password_different_for_same_input(self, test_password): ... method test_verify_password_correct_password (line 59) | def test_verify_password_correct_password(self, test_password): # noq... method test_verify_password_incorrect_password (line 65) | def test_verify_password_incorrect_password(self, test_password_pair):... method test_verify_password_invalid_hash (line 72) | def test_verify_password_invalid_hash(self, test_password): # noqa: W... method test_generated_password_strength (line 76) | def test_generated_password_strength(self, test_password): # noqa: W0621 class TestCredentialGeneration (line 96) | class TestCredentialGeneration: method test_generate_client_id_format (line 99) | def test_generate_client_id_format(self): method test_generate_client_id_unique (line 106) | def test_generate_client_id_unique(self): method test_generate_client_secret_format (line 112) | def test_generate_client_secret_format(self): method test_generate_client_secret_unique (line 119) | def test_generate_client_secret_unique(self): method test_generate_credentials_returns_tuple (line 125) | def test_generate_credentials_returns_tuple(self): method test_generate_credentials_secret_verifiable (line 133) | def test_generate_credentials_secret_verifiable(self): FILE: build_stream/tests/unit/api/auth/test_service.py class TestAuthServiceCredentialVerification (line 29) | class TestAuthServiceCredentialVerification: method test_verify_valid_credentials (line 32) | def test_verify_valid_credentials(self, auth_service: AuthService): method test_verify_invalid_username (line 40) | def test_verify_invalid_username(self, auth_service: AuthService): method test_verify_invalid_password (line 48) | def test_verify_invalid_password(self, auth_service: AuthService): class TestAuthServiceClientRegistration (line 58) | class TestAuthServiceClientRegistration: method test_register_client_success (line 61) | def test_register_client_success(self, auth_service: AuthService): method test_register_client_default_scopes (line 74) | def test_register_client_default_scopes(self, auth_service: AuthService): method test_register_client_max_clients_reached (line 80) | def test_register_client_max_clients_reached( method test_register_client_duplicate_name (line 91) | def test_register_client_duplicate_name(self, auth_service: AuthService): FILE: build_stream/tests/unit/api/auth/test_token_service.py function mock_jwt_handler (line 32) | def mock_jwt_handler(): function mock_vault_with_active_client (line 38) | def mock_vault_with_active_client(): function mock_vault_with_disabled_client (line 50) | def mock_vault_with_disabled_client(): function test_client_id (line 62) | def test_client_id(): function test_client_secret (line 68) | def test_client_secret(): class TestAuthServiceClientVerification (line 74) | class TestAuthServiceClientVerification: method test_verify_valid_client_credentials (line 77) | def test_verify_valid_client_credentials( method test_verify_invalid_client_id (line 95) | def test_verify_invalid_client_id( method test_verify_invalid_client_secret (line 109) | def test_verify_invalid_client_secret( method test_verify_disabled_client (line 123) | def test_verify_disabled_client( method test_verify_empty_vault (line 138) | def test_verify_empty_vault(self, mock_vault_client: MockVaultClient): class TestAuthServiceTokenGeneration (line 150) | class TestAuthServiceTokenGeneration: method test_generate_token_success (line 153) | def test_generate_token_success( method test_generate_token_with_valid_scope (line 178) | def test_generate_token_with_valid_scope( method test_generate_token_with_invalid_scope (line 200) | def test_generate_token_with_invalid_scope( method test_generate_token_invalid_client (line 220) | def test_generate_token_invalid_client( method test_generate_token_disabled_client (line 238) | def test_generate_token_disabled_client( method test_generate_token_jwt_structure (line 257) | def test_generate_token_jwt_structure( FILE: build_stream/tests/unit/api/build_image/test_routes.py function create_test_uuid (line 34) | def create_test_uuid(): class MockCreateBuildImageUseCase (line 40) | class MockCreateBuildImageUseCase: method __init__ (line 43) | def __init__(self, error_to_raise=None): method execute (line 48) | def execute(self, command): class TestBuildImageRoutes (line 66) | class TestBuildImageRoutes: method test_build_error_response (line 69) | def test_build_error_response(self): method test_create_build_image_success (line 82) | def test_create_build_image_success(self): method test_create_build_image_invalid_job_id (line 122) | def test_create_build_image_invalid_job_id(self): method test_create_build_image_job_not_found (line 146) | def test_create_build_image_job_not_found(self): method test_create_build_image_invalid_state_transition (line 171) | def test_create_build_image_invalid_state_transition(self): method test_create_build_image_invalid_architecture (line 196) | def test_create_build_image_invalid_architecture(self): method test_create_build_image_invalid_image_key (line 221) | def test_create_build_image_invalid_image_key(self): method test_create_build_image_invalid_functional_groups (line 246) | def test_create_build_image_invalid_functional_groups(self): method test_create_build_image_missing_inventory_host (line 271) | def test_create_build_image_missing_inventory_host(self): method test_create_build_image_domain_error (line 296) | def test_create_build_image_domain_error(self): method test_create_build_image_unexpected_error (line 321) | def test_create_build_image_unexpected_error(self): FILE: build_stream/tests/unit/api/catalog_roles/test_catalog_roles_service.py function _make_job_id (line 35) | def _make_job_id() -> JobId: function _make_artifact_ref (line 39) | def _make_artifact_ref(key_value: str = "catalog/abc123/root-jsons.zip")... function _make_artifact_record (line 48) | def _make_artifact_record(job_id: JobId, ref: ArtifactRef) -> ArtifactRe... function _make_zip_with_functional_layer (line 61) | def _make_zip_with_functional_layer(roles_data: dict, path: str = "x86_6... class TestCatalogRolesServiceGetRoles (line 69) | class TestCatalogRolesServiceGetRoles: method _make_service (line 72) | def _make_service(self, artifact_store=None, artifact_metadata_repo=No... method _make_service_with_artifacts (line 87) | def _make_service_with_artifacts(self, roles_data: dict, job_id=None, ... method test_returns_sorted_roles_from_functional_layer (line 144) | def test_returns_sorted_roles_from_functional_layer(self): method test_raises_when_no_artifact_record (line 159) | def test_raises_when_no_artifact_record(self): method test_raises_when_artifact_not_in_store (line 171) | def test_raises_when_artifact_not_in_store(self): method test_raises_when_no_functional_layer_in_archive (line 188) | def test_raises_when_no_functional_layer_in_archive(self): method test_raises_when_archive_is_corrupt (line 210) | def test_raises_when_archive_is_corrupt(self): method test_raises_when_functional_layer_json_is_malformed (line 227) | def test_raises_when_functional_layer_json_is_malformed(self): method test_raises_when_functional_layer_json_is_not_a_dict (line 249) | def test_raises_when_functional_layer_json_is_not_a_dict(self): method test_returns_empty_list_for_empty_functional_layer (line 268) | def test_returns_empty_list_for_empty_functional_layer(self): method test_uses_first_functional_layer_found_in_archive (line 277) | def test_uses_first_functional_layer_found_in_archive(self): method test_queries_correct_stage_and_label (line 344) | def test_queries_correct_stage_and_label(self): FILE: build_stream/tests/unit/api/jobs/test_dependencies.py class TestGetClientId (line 24) | class TestGetClientId: method test_valid_token_data_returns_client_id (line 27) | def test_valid_token_data_returns_client_id(self): method test_token_data_with_different_client (line 36) | def test_token_data_with_different_client(self): method test_missing_client_id_raises_error (line 44) | def test_missing_client_id_raises_error(self): method test_empty_client_id_raises_value_error (line 51) | def test_empty_client_id_raises_value_error(self): class TestGetIdempotencyKey (line 59) | class TestGetIdempotencyKey: method test_valid_idempotency_key_returned (line 62) | def test_valid_idempotency_key_returned(self): method test_idempotency_key_with_special_chars (line 70) | def test_idempotency_key_with_special_chars(self): method test_empty_idempotency_key_raises_422 (line 78) | def test_empty_idempotency_key_raises_422(self): method test_whitespace_only_key_raises_422 (line 87) | def test_whitespace_only_key_raises_422(self): method test_key_exceeding_max_length_raises_422 (line 96) | def test_key_exceeding_max_length_raises_422(self): method test_key_at_max_length_accepted (line 106) | def test_key_at_max_length_accepted(self): FILE: build_stream/tests/unit/api/jobs/test_schemas.py class TestCreateJobRequest (line 32) | class TestCreateJobRequest: method test_valid_request_with_required_fields (line 35) | def test_valid_request_with_required_fields(self): method test_valid_request_with_metadata (line 45) | def test_valid_request_with_metadata(self): method test_missing_client_id_raises_validation_error (line 59) | def test_missing_client_id_raises_validation_error(self): method test_missing_client_name_is_allowed (line 69) | def test_missing_client_name_is_allowed(self): method test_empty_client_id_raises_validation_error (line 78) | def test_empty_client_id_raises_validation_error(self): method test_empty_client_name_raises_validation_error (line 88) | def test_empty_client_name_raises_validation_error(self): method test_client_id_max_length_validation (line 98) | def test_client_id_max_length_validation(self): method test_client_name_max_length_validation (line 105) | def test_client_name_max_length_validation(self): method test_metadata_can_be_none (line 112) | def test_metadata_can_be_none(self): class TestCreateJobResponse (line 121) | class TestCreateJobResponse: method test_valid_response_with_all_fields (line 124) | def test_valid_response_with_all_fields(self): method test_missing_required_field_raises_validation_error (line 142) | def test_missing_required_field_raises_validation_error(self): class TestCreateStageResponse (line 153) | class TestCreateStageResponse: method test_valid_create_stage_response (line 156) | def test_valid_create_stage_response(self): method test_create_stage_with_timestamps (line 174) | def test_create_stage_with_timestamps(self): method test_create_stage_with_error (line 190) | def test_create_stage_with_error(self): class TestGetStageResponse (line 207) | class TestGetStageResponse: method test_valid_get_stage_response (line 210) | def test_valid_get_stage_response(self): method test_get_stage_with_log_file_path (line 228) | def test_get_stage_with_log_file_path(self): method test_get_stage_with_error_and_log_path (line 244) | def test_get_stage_with_error_and_log_path(self): class TestGetJobResponse (line 262) | class TestGetJobResponse: method test_valid_get_job_response (line 265) | def test_valid_get_job_response(self): class TestErrorResponse (line 281) | class TestErrorResponse: method test_valid_error_response (line 284) | def test_valid_error_response(self): method test_error_response_missing_required_field (line 299) | def test_error_response_missing_required_field(self): FILE: build_stream/tests/unit/api/local_repo/test_local_repo_dependencies.py class TestGetCorrelationId (line 30) | class TestGetCorrelationId: method test_get_correlation_id_from_header (line 33) | def test_get_correlation_id_from_header(self): method test_get_correlation_id_generates_new_id (line 42) | def test_get_correlation_id_generates_new_id(self): method test_get_correlation_id_empty_string (line 50) | def test_get_correlation_id_empty_string(self): method test_get_correlation_id_whitespace_only (line 58) | def test_get_correlation_id_whitespace_only(self): class TestGetCreateLocalRepoUseCase (line 67) | class TestGetCreateLocalRepoUseCase: method test_returns_use_case_instance (line 70) | def test_returns_use_case_instance(self): method test_use_case_is_factory (line 78) | def test_use_case_is_factory(self): class TestGetCreateLocalRepoUseCaseFactory (line 88) | class TestGetCreateLocalRepoUseCaseFactory: method test_returns_callable (line 91) | def test_returns_callable(self): FILE: build_stream/tests/unit/api/local_repo/test_local_repo_schemas.py class TestCreateLocalRepoResponse (line 32) | class TestCreateLocalRepoResponse: method valid_response_data (line 36) | def valid_response_data(self): method test_valid_response (line 46) | def test_valid_response(self, valid_response_data): method test_accepts_string_values (line 59) | def test_accepts_string_values(self, valid_response_data): method test_invalid_datetime_format (line 71) | def test_invalid_datetime_format(self, valid_response_data): method test_missing_required_fields (line 79) | def test_missing_required_fields(self): method test_response_serialization (line 89) | def test_response_serialization(self, valid_response_data): method test_response_deserialization (line 100) | def test_response_deserialization(self, valid_response_data): class TestLocalRepoErrorResponse (line 114) | class TestLocalRepoErrorResponse: method test_valid_error_response (line 117) | def test_valid_error_response(self): method test_error_response_serialization (line 131) | def test_error_response_serialization(self): method test_error_response_with_special_characters (line 146) | def test_error_response_with_special_characters(self): FILE: build_stream/tests/unit/api/local_repo/test_routes.py class TestCreateLocalRepositoryRoute (line 36) | class TestCreateLocalRepositoryRoute: method mock_use_case (line 40) | def mock_use_case(self): method job_id (line 47) | def job_id(self): method test_success_response (line 51) | def test_success_response(self, mock_use_case, job_id): method test_job_not_found_returns_404 (line 87) | def test_job_not_found_returns_404(self, mock_use_case, job_id): method test_input_files_missing_returns_400 (line 112) | def test_input_files_missing_returns_400(self, mock_use_case, job_id): method test_input_directory_invalid_returns_400 (line 141) | def test_input_directory_invalid_returns_400(self, mock_use_case, job_... method test_queue_unavailable_returns_503 (line 171) | def test_queue_unavailable_returns_503(self, mock_use_case, job_id): method test_unexpected_exception_returns_500 (line 200) | def test_unexpected_exception_returns_500(self, mock_use_case, job_id): method test_invalid_job_id_format_returns_400 (line 225) | def test_invalid_job_id_format_returns_400(self, mock_use_case): method test_missing_authorization_returns_401 (line 247) | def test_missing_authorization_returns_401(self, mock_use_case, job_id): method test_correlation_id_header_propagated (line 264) | def test_correlation_id_header_propagated(self, mock_use_case, job_id): FILE: build_stream/tests/unit/api/validate/test_routes.py function _uuid (line 38) | def _uuid(): class MockValidateUseCase (line 42) | class MockValidateUseCase: method __init__ (line 46) | def __init__(self, error_to_raise=None): method execute (line 50) | def execute(self, command): class TestBuildErrorResponse (line 65) | class TestBuildErrorResponse: method test_builds_correct_response (line 69) | def test_builds_correct_response(self): class TestCreateValidateImageOnTest (line 78) | class TestCreateValidateImageOnTest: method test_success (line 81) | def test_success(self): method test_invalid_job_id (line 111) | def test_invalid_job_id(self): method test_job_not_found (line 128) | def test_job_not_found(self): method test_invalid_state_transition (line 147) | def test_invalid_state_transition(self): method test_upstream_stage_not_completed (line 171) | def test_upstream_stage_not_completed(self): method test_validation_execution_error (line 195) | def test_validation_execution_error(self): method test_unexpected_error (line 216) | def test_unexpected_error(self): FILE: build_stream/tests/unit/core/artifacts/conftest.py function valid_artifact_key (line 32) | def valid_artifact_key() -> ArtifactKey: function valid_digest (line 38) | def valid_digest() -> ArtifactDigest: function valid_store_hint (line 44) | def valid_store_hint() -> StoreHint: function valid_artifact_ref (line 54) | def valid_artifact_ref(valid_artifact_key, valid_digest) -> ArtifactRef: FILE: build_stream/tests/unit/core/artifacts/test_exceptions.py class TestArtifactDomainError (line 28) | class TestArtifactDomainError: method test_base_error_with_message_only (line 31) | def test_base_error_with_message_only(self) -> None: method test_base_error_with_correlation_id (line 37) | def test_base_error_with_correlation_id(self) -> None: method test_inheritance_from_exception (line 44) | def test_inheritance_from_exception(self) -> None: class TestArtifactNotFoundError (line 50) | class TestArtifactNotFoundError: method test_error_with_key_only (line 53) | def test_error_with_key_only(self) -> None: method test_error_with_correlation_id (line 59) | def test_error_with_correlation_id(self) -> None: method test_inheritance_from_domain_error (line 66) | def test_inheritance_from_domain_error(self) -> None: class TestArtifactAlreadyExistsError (line 72) | class TestArtifactAlreadyExistsError: method test_error_with_key_only (line 75) | def test_error_with_key_only(self) -> None: method test_error_with_correlation_id (line 81) | def test_error_with_correlation_id(self) -> None: method test_inheritance_from_domain_error (line 87) | def test_inheritance_from_domain_error(self) -> None: class TestArtifactStoreError (line 93) | class TestArtifactStoreError: method test_error_with_message_only (line 96) | def test_error_with_message_only(self) -> None: method test_error_with_correlation_id (line 102) | def test_error_with_correlation_id(self) -> None: method test_inheritance_from_domain_error (line 108) | def test_inheritance_from_domain_error(self) -> None: class TestArtifactValidationError (line 114) | class TestArtifactValidationError: method test_error_with_message_only (line 117) | def test_error_with_message_only(self) -> None: method test_error_with_correlation_id (line 123) | def test_error_with_correlation_id(self) -> None: method test_inheritance_from_domain_error (line 129) | def test_inheritance_from_domain_error(self) -> None: FILE: build_stream/tests/unit/core/artifacts/test_value_objects.py class TestSafePath (line 36) | class TestSafePath: method test_valid_path (line 39) | def test_valid_path(self) -> None: method test_from_string (line 43) | def test_from_string(self) -> None: method test_empty_path_raises (line 47) | def test_empty_path_raises(self) -> None: method test_whitespace_only_raises (line 51) | def test_whitespace_only_raises(self) -> None: method test_path_too_long_raises (line 55) | def test_path_too_long_raises(self) -> None: method test_traversal_dot_dot_raises (line 60) | def test_traversal_dot_dot_raises(self) -> None: method test_relative_path_with_dots_in_name_allowed (line 64) | def test_relative_path_with_dots_in_name_allowed(self) -> None: method test_traversal_encoded_raises (line 68) | def test_traversal_encoded_raises(self) -> None: method test_null_byte_raises (line 72) | def test_null_byte_raises(self) -> None: method test_immutable (line 76) | def test_immutable(self) -> None: method test_str_representation (line 81) | def test_str_representation(self) -> None: class TestArtifactKey (line 90) | class TestArtifactKey: method test_valid_key (line 93) | def test_valid_key(self) -> None: method test_empty_key_raises (line 97) | def test_empty_key_raises(self) -> None: method test_whitespace_key_raises (line 101) | def test_whitespace_key_raises(self) -> None: method test_key_too_long_raises (line 105) | def test_key_too_long_raises(self) -> None: method test_traversal_dot_dot_raises (line 109) | def test_traversal_dot_dot_raises(self) -> None: method test_traversal_backslash_raises (line 113) | def test_traversal_backslash_raises(self) -> None: method test_absolute_path_raises (line 117) | def test_absolute_path_raises(self) -> None: method test_null_byte_raises (line 121) | def test_null_byte_raises(self) -> None: method test_immutable (line 125) | def test_immutable(self) -> None: method test_str_representation (line 130) | def test_str_representation(self) -> None: class TestArtifactDigest (line 139) | class TestArtifactDigest: method test_valid_digest (line 142) | def test_valid_digest(self) -> None: method test_short_digest_raises (line 146) | def test_short_digest_raises(self) -> None: method test_long_digest_raises (line 150) | def test_long_digest_raises(self) -> None: method test_uppercase_raises (line 154) | def test_uppercase_raises(self) -> None: method test_non_hex_raises (line 158) | def test_non_hex_raises(self) -> None: method test_immutable (line 162) | def test_immutable(self) -> None: method test_str_representation (line 167) | def test_str_representation(self) -> None: class TestArtifactRef (line 176) | class TestArtifactRef: method test_valid_ref (line 179) | def test_valid_ref(self, valid_artifact_key, valid_digest) -> None: method test_zero_size_allowed (line 188) | def test_zero_size_allowed(self, valid_artifact_key, valid_digest) -> ... method test_negative_size_raises (line 197) | def test_negative_size_raises(self, valid_artifact_key, valid_digest) ... method test_empty_uri_raises (line 206) | def test_empty_uri_raises(self, valid_artifact_key, valid_digest) -> N... method test_uri_too_long_raises (line 215) | def test_uri_too_long_raises(self, valid_artifact_key, valid_digest) -... method test_immutable (line 224) | def test_immutable(self, valid_artifact_ref) -> None: class TestArtifactKind (line 233) | class TestArtifactKind: method test_file_value (line 236) | def test_file_value(self) -> None: method test_archive_value (line 239) | def test_archive_value(self) -> None: method test_string_comparison (line 242) | def test_string_comparison(self) -> None: class TestStoreHint (line 251) | class TestStoreHint: method test_valid_hint (line 254) | def test_valid_hint(self) -> None: method test_empty_namespace_raises (line 263) | def test_empty_namespace_raises(self) -> None: method test_namespace_too_long_raises (line 267) | def test_namespace_too_long_raises(self) -> None: method test_empty_label_raises (line 271) | def test_empty_label_raises(self) -> None: method test_label_too_long_raises (line 275) | def test_label_too_long_raises(self) -> None: method test_too_many_tags_raises (line 279) | def test_too_many_tags_raises(self) -> None: method test_tag_key_too_long_raises (line 284) | def test_tag_key_too_long_raises(self) -> None: method test_tag_value_too_long_raises (line 288) | def test_tag_value_too_long_raises(self) -> None: method test_empty_tags_allowed (line 292) | def test_empty_tags_allowed(self) -> None: method test_immutable (line 296) | def test_immutable(self) -> None: FILE: build_stream/tests/unit/core/build_image/test_entities.py class TestBuildImageRequest (line 27) | class TestBuildImageRequest: method sample_request (line 31) | def sample_request(self): method test_to_dict (line 60) | def test_to_dict(self, functional_groups): method test_to_dict_with_inventory_host (line 97) | def test_to_dict_with_inventory_host(self, image_key_value, inventory_... method test_generate_filename (line 120) | def test_generate_filename(self, sample_request): method test_get_playbook_command_x86_64 (line 128) | def test_get_playbook_command_x86_64(self, sample_request): method test_get_playbook_command_aarch64 (line 148) | def test_get_playbook_command_aarch64( method test_immutable (line 185) | def test_immutable(self, sample_request): method test_all_fields_required (line 190) | def test_all_fields_required(self): FILE: build_stream/tests/unit/core/build_image/test_services.py class MockBuildImageConfigRepository (line 34) | class MockBuildImageConfigRepository(BuildStreamConfigRepository): method __init__ (line 37) | def __init__(self, inventory_host=None, should_fail=False): method get_aarch64_inv_host (line 42) | def get_aarch64_inv_host(self, job_id): class MockBuildImageQueueRepository (line 49) | class MockBuildImageQueueRepository: method __init__ (line 52) | def __init__(self, should_fail=False): method write_request (line 57) | def write_request(self, request): class TestBuildImageConfigService (line 64) | class TestBuildImageConfigService: method test_get_inventory_host_for_x86_64 (line 67) | def test_get_inventory_host_for_x86_64(self): method test_get_inventory_host_for_aarch64_success (line 76) | def test_get_inventory_host_for_aarch64_success(self): method test_get_inventory_host_for_aarch64_missing (line 86) | def test_get_inventory_host_for_aarch64_missing(self): method test_get_inventory_host_for_aarch64_config_error (line 97) | def test_get_inventory_host_for_aarch64_config_error(self): class TestBuildImageQueueService (line 106) | class TestBuildImageQueueService: method test_submit_request_success (line 109) | def test_submit_request_success(self): method test_submit_request_failure (line 131) | def test_submit_request_failure(self): FILE: build_stream/tests/unit/core/build_image/test_value_objects.py class TestArchitecture (line 27) | class TestArchitecture: method test_valid_x86_64 (line 30) | def test_valid_x86_64(self): method test_valid_aarch64 (line 37) | def test_valid_aarch64(self): method test_invalid_empty (line 44) | def test_invalid_empty(self): method test_invalid_whitespace (line 49) | def test_invalid_whitespace(self): method test_unsupported_architecture (line 54) | def test_unsupported_architecture(self): method test_case_sensitive (line 59) | def test_case_sensitive(self): class TestImageKey (line 65) | class TestImageKey: method test_valid_simple_key (line 68) | def test_valid_simple_key(self): method test_valid_complex_key (line 73) | def test_valid_complex_key(self): method test_valid_max_length (line 78) | def test_valid_max_length(self): method test_invalid_empty (line 83) | def test_invalid_empty(self): method test_invalid_too_long (line 88) | def test_invalid_too_long(self): method test_invalid_characters (line 93) | def test_invalid_characters(self): method test_invalid_space (line 98) | def test_invalid_space(self): class TestFunctionalGroups (line 104) | class TestFunctionalGroups: method test_valid_single_group (line 107) | def test_valid_single_group(self): method test_valid_multiple_groups (line 112) | def test_valid_multiple_groups(self): method test_valid_max_groups (line 117) | def test_valid_max_groups(self): method test_invalid_empty (line 122) | def test_invalid_empty(self): method test_invalid_too_many (line 127) | def test_invalid_too_many(self): method test_invalid_empty_group (line 132) | def test_invalid_empty_group(self): method test_invalid_group_characters (line 137) | def test_invalid_group_characters(self): method test_immutable_list (line 142) | def test_immutable_list(self): class TestInventoryHost (line 150) | class TestInventoryHost: method test_valid_ip_address (line 153) | def test_valid_ip_address(self): method test_valid_hostname (line 158) | def test_valid_hostname(self): method test_valid_max_length (line 163) | def test_valid_max_length(self): method test_invalid_empty (line 168) | def test_invalid_empty(self): method test_invalid_too_long (line 173) | def test_invalid_too_long(self): method test_invalid_characters (line 178) | def test_invalid_characters(self): method test_invalid_underscore (line 183) | def test_invalid_underscore(self): FILE: build_stream/tests/unit/core/catalog/test_exceptions.py class TestCatalogParseError (line 30) | class TestCatalogParseError: method test_base_error_with_message_only (line 33) | def test_base_error_with_message_only(self) -> None: method test_base_error_with_correlation_id (line 39) | def test_base_error_with_correlation_id(self) -> None: method test_inheritance_from_exception (line 46) | def test_inheritance_from_exception(self) -> None: class TestInvalidFileFormatError (line 52) | class TestInvalidFileFormatError: method test_error_creation (line 55) | def test_error_creation(self) -> None: method test_error_with_correlation_id (line 61) | def test_error_with_correlation_id(self) -> None: class TestInvalidJSONError (line 67) | class TestInvalidJSONError: method test_error_creation (line 70) | def test_error_creation(self) -> None: method test_error_with_correlation_id (line 76) | def test_error_with_correlation_id(self) -> None: class TestCatalogSchemaValidationError (line 82) | class TestCatalogSchemaValidationError: method test_error_with_message_only (line 85) | def test_error_with_message_only(self) -> None: method test_error_with_schema_path (line 92) | def test_error_with_schema_path(self) -> None: method test_error_with_correlation_id (line 102) | def test_error_with_correlation_id(self) -> None: method test_error_with_all_parameters (line 110) | def test_error_with_all_parameters(self) -> None: class TestFileTooLargeError (line 123) | class TestFileTooLargeError: method test_error_creation (line 126) | def test_error_creation(self) -> None: method test_error_with_correlation_id (line 134) | def test_error_with_correlation_id(self) -> None: method test_error_message_format (line 143) | def test_error_message_format(self) -> None: class TestAdapterPolicyValidationError (line 149) | class TestAdapterPolicyValidationError: method test_error_with_message_only (line 152) | def test_error_with_message_only(self) -> None: method test_error_with_policy_path (line 159) | def test_error_with_policy_path(self) -> None: method test_error_with_correlation_id (line 169) | def test_error_with_correlation_id(self) -> None: method test_error_with_all_parameters (line 177) | def test_error_with_all_parameters(self) -> None: class TestConfigGenerationError (line 190) | class TestConfigGenerationError: method test_error_creation (line 193) | def test_error_creation(self) -> None: method test_error_with_correlation_id (line 199) | def test_error_with_correlation_id(self) -> None: FILE: build_stream/tests/unit/core/catalog/test_generate_software_config.py function _read_output (line 31) | def _read_output(output_dir: str) -> dict: function _software_by_name (line 39) | def _software_by_name(result: dict, name: str) -> dict: class TestStaticFields (line 50) | class TestStaticFields: method test_cluster_os_type_from_os_family (line 53) | def test_cluster_os_type_from_os_family(self, tmp_path: str) -> None: method test_cluster_os_version_from_os_version (line 62) | def test_cluster_os_version_from_os_version(self, tmp_path: str) -> None: method test_repo_config_is_partial (line 71) | def test_repo_config_is_partial(self, tmp_path: str) -> None: class TestSoftwaresList (line 85) | class TestSoftwaresList: method test_single_arch_single_target (line 88) | def test_single_arch_single_target(self, tmp_path: str) -> None: method test_multi_arch_both_non_empty (line 105) | def test_multi_arch_both_non_empty(self, tmp_path: str) -> None: method test_target_name_derived_from_filename (line 118) | def test_target_name_derived_from_filename(self, tmp_path: str) -> None: class TestArchExclusion (line 134) | class TestArchExclusion: method test_excludes_arch_when_all_subgroups_empty (line 137) | def test_excludes_arch_when_all_subgroups_empty(self, tmp_path: str) -... method test_excludes_target_entirely_when_empty_on_all_arches (line 153) | def test_excludes_target_entirely_when_empty_on_all_arches(self, tmp_p... method test_target_missing_from_arch_excluded (line 169) | def test_target_missing_from_arch_excluded(self, tmp_path: str) -> None: class TestVersionStrings (line 189) | class TestVersionStrings: method test_service_k8s_gets_version (line 192) | def test_service_k8s_gets_version(self, tmp_path: str) -> None: method test_csi_target_gets_version (line 204) | def test_csi_target_gets_version(self, tmp_path: str) -> None: method test_regular_target_has_no_version (line 215) | def test_regular_target_has_no_version(self, tmp_path: str) -> None: class TestSubgroupSections (line 231) | class TestSubgroupSections: method test_lists_non_empty_subgroups (line 234) | def test_lists_non_empty_subgroups(self, tmp_path: str) -> None: method test_target_name_not_in_subgroups (line 250) | def test_target_name_not_in_subgroups(self, tmp_path: str) -> None: method test_excludes_empty_cluster_subgroups (line 262) | def test_excludes_empty_cluster_subgroups(self, tmp_path: str) -> None: method test_no_subgroup_section_for_single_role_target (line 276) | def test_no_subgroup_section_for_single_role_target(self, tmp_path: st... method test_subgroups_merged_across_arches (line 287) | def test_subgroups_merged_across_arches(self, tmp_path: str) -> None: class TestEdgeCases (line 312) | class TestEdgeCases: method test_empty_all_arch_configs (line 315) | def test_empty_all_arch_configs(self, tmp_path: str) -> None: method test_creates_output_directory (line 326) | def test_creates_output_directory(self, tmp_path: str) -> None: class TestRealisticScenario (line 341) | class TestRealisticScenario: method test_realistic_multi_target (line 344) | def test_realistic_multi_target(self, tmp_path: str) -> None: FILE: build_stream/tests/unit/core/catalog/test_parser.py class TestParseCatalog (line 29) | class TestParseCatalog: method test_parse_valid_catalog_with_default_schema (line 32) | def test_parse_valid_catalog_with_default_schema(self) -> None: method test_parse_catalog_with_custom_schema (line 84) | def test_parse_catalog_with_custom_schema(self) -> None: method test_parse_catalog_validation_error_raises_exception (line 127) | def test_parse_catalog_validation_error_raises_exception(self) -> None: method test_parse_catalog_with_all_package_types (line 172) | def test_parse_catalog_with_all_package_types(self) -> None: method test_parse_catalog_missing_optional_sections (line 256) | def test_parse_catalog_missing_optional_sections(self) -> None: FILE: build_stream/tests/unit/core/catalog/test_parser_defaults.py class TestParseCatalogDefaults (line 27) | class TestParseCatalogDefaults: method test_default_schema_path_points_to_resources (line 28) | def test_default_schema_path_points_to_resources(self): method test_parse_catalog_with_explicit_paths_uses_fixture (line 33) | def test_parse_catalog_with_explicit_paths_uses_fixture(self): FILE: build_stream/tests/unit/core/jobs/entities/conftest.py function sample_job_id (line 24) | def sample_job_id(): function sample_client_id (line 30) | def sample_client_id(): function sample_correlation_id (line 36) | def sample_correlation_id(): function sample_timestamp (line 42) | def sample_timestamp(): FILE: build_stream/tests/unit/core/jobs/entities/test_audit.py class TestAuditEvent (line 25) | class TestAuditEvent: method test_create_event (line 28) | def test_create_event(self): method test_event_with_details (line 41) | def test_event_with_details(self): method test_event_immutability (line 55) | def test_event_immutability(self): FILE: build_stream/tests/unit/core/jobs/entities/test_idempotency.py class TestIdempotencyRecord (line 25) | class TestIdempotencyRecord: method test_create_record (line 28) | def test_create_record(self): method test_record_immutability (line 42) | def test_record_immutability(self): method test_is_expired (line 56) | def test_is_expired(self): method test_matches_fingerprint (line 70) | def test_matches_fingerprint(self): FILE: build_stream/tests/unit/core/jobs/entities/test_job.py class TestJob (line 27) | class TestJob: method test_create_job (line 30) | def test_create_job(self): method test_start_job (line 42) | def test_start_job(self): method test_start_job_invalid_state (line 54) | def test_start_job_invalid_state(self): method test_complete_job (line 66) | def test_complete_job(self): method test_complete_job_invalid_state (line 79) | def test_complete_job_invalid_state(self): method test_fail_job (line 90) | def test_fail_job(self): method test_cancel_job_from_created (line 103) | def test_cancel_job_from_created(self): method test_cancel_job_from_in_progress (line 115) | def test_cancel_job_from_in_progress(self): method test_terminal_state_prevents_transitions (line 127) | def test_terminal_state_prevents_transitions(self): method test_tombstone_job (line 145) | def test_tombstone_job(self): method test_job_state_predicates (line 158) | def test_job_state_predicates(self): FILE: build_stream/tests/unit/core/jobs/entities/test_stage.py class TestStage (line 27) | class TestStage: method test_create_stage (line 30) | def test_create_stage(self): method test_start_stage (line 42) | def test_start_stage(self): method test_start_stage_invalid_state (line 53) | def test_start_stage_invalid_state(self): method test_complete_stage (line 63) | def test_complete_stage(self): method test_fail_stage (line 75) | def test_fail_stage(self): method test_skip_stage (line 89) | def test_skip_stage(self): method test_cancel_stage_from_pending (line 100) | def test_cancel_stage_from_pending(self): method test_cancel_stage_from_in_progress (line 110) | def test_cancel_stage_from_in_progress(self): method test_terminal_state_prevents_transitions (line 120) | def test_terminal_state_prevents_transitions(self): FILE: build_stream/tests/unit/core/jobs/test_exceptions.py class TestJobDomainError (line 31) | class TestJobDomainError: method test_basic_error (line 34) | def test_basic_error(self): method test_error_with_correlation_id (line 41) | def test_error_with_correlation_id(self): class TestJobNotFoundError (line 47) | class TestJobNotFoundError: method test_error_message (line 50) | def test_error_message(self): method test_with_correlation_id (line 56) | def test_with_correlation_id(self): class TestJobAlreadyExistsError (line 62) | class TestJobAlreadyExistsError: method test_error_message (line 65) | def test_error_message(self): class TestInvalidStateTransitionError (line 72) | class TestInvalidStateTransitionError: method test_error_message (line 75) | def test_error_message(self): method test_error_attributes (line 88) | def test_error_attributes(self): class TestTerminalStateViolationError (line 102) | class TestTerminalStateViolationError: method test_error_message (line 105) | def test_error_message(self): method test_error_attributes (line 117) | def test_error_attributes(self): class TestOptimisticLockError (line 129) | class TestOptimisticLockError: method test_error_message (line 132) | def test_error_message(self): method test_error_attributes (line 145) | def test_error_attributes(self): class TestIdempotencyConflictError (line 159) | class TestIdempotencyConflictError: method test_error_message (line 162) | def test_error_message(self): method test_error_attributes (line 172) | def test_error_attributes(self): class TestStageNotFoundError (line 182) | class TestStageNotFoundError: method test_error_message (line 185) | def test_error_message(self): method test_error_attributes (line 194) | def test_error_attributes(self): FILE: build_stream/tests/unit/core/jobs/test_value_objects.py class TestJobId (line 34) | class TestJobId: method _uuid_str (line 38) | def _uuid_str() -> str: method test_valid_uuid_any_version (line 42) | def test_valid_uuid_any_version(self): method test_uuid_is_normalized_lowercase (line 48) | def test_uuid_is_normalized_lowercase(self): method test_invalid_uuid_format (line 55) | def test_invalid_uuid_format(self): method test_empty_string (line 60) | def test_empty_string(self): method test_exceeds_maximum_length (line 65) | def test_exceeds_maximum_length(self): method test_immutability (line 70) | def test_immutability(self): method test_str_representation (line 76) | def test_str_representation(self): method test_equality (line 82) | def test_equality(self): class TestCorrelationId (line 90) | class TestCorrelationId: method _uuid_str (line 94) | def _uuid_str() -> str: method test_valid_uuid_any_version (line 98) | def test_valid_uuid_any_version(self): method test_invalid_uuid_format (line 104) | def test_invalid_uuid_format(self): method test_exceeds_maximum_length (line 109) | def test_exceeds_maximum_length(self): method test_immutability (line 114) | def test_immutability(self): class TestStageName (line 121) | class TestStageName: method test_valid_stage_names (line 124) | def test_valid_stage_names(self): method test_invalid_stage_name (line 131) | def test_invalid_stage_name(self): method test_empty_string (line 136) | def test_empty_string(self): method test_case_sensitive (line 141) | def test_case_sensitive(self): method test_exceeds_maximum_length (line 146) | def test_exceeds_maximum_length(self): method test_immutability (line 151) | def test_immutability(self): method test_canonical_stages_count (line 157) | def test_canonical_stages_count(self): class TestIdempotencyKey (line 162) | class TestIdempotencyKey: method test_valid_key (line 165) | def test_valid_key(self): method test_minimum_length (line 170) | def test_minimum_length(self): method test_maximum_length (line 175) | def test_maximum_length(self): method test_empty_string (line 181) | def test_empty_string(self): method test_exceeds_maximum_length (line 186) | def test_exceeds_maximum_length(self): method test_immutability (line 192) | def test_immutability(self): class TestRequestFingerprint (line 199) | class TestRequestFingerprint: method test_valid_sha256 (line 202) | def test_valid_sha256(self): method test_valid_sha256_uppercase (line 209) | def test_valid_sha256_uppercase(self): method test_invalid_length (line 216) | def test_invalid_length(self): method test_invalid_characters (line 221) | def test_invalid_characters(self): method test_empty_string (line 226) | def test_empty_string(self): method test_immutability (line 231) | def test_immutability(self): class TestClientId (line 240) | class TestClientId: method test_valid_client_id (line 243) | def test_valid_client_id(self): method test_empty_string (line 248) | def test_empty_string(self): method test_whitespace_only (line 253) | def test_whitespace_only(self): method test_exceeds_maximum_length (line 258) | def test_exceeds_maximum_length(self): method test_immutability (line 263) | def test_immutability(self): class TestJobState (line 270) | class TestJobState: method test_all_states_exist (line 273) | def test_all_states_exist(self): method test_terminal_states (line 281) | def test_terminal_states(self): method test_non_terminal_states (line 287) | def test_non_terminal_states(self): method test_state_count (line 292) | def test_state_count(self): class TestStageState (line 297) | class TestStageState: method test_all_states_exist (line 300) | def test_all_states_exist(self): method test_terminal_states (line 309) | def test_terminal_states(self): method test_non_terminal_states (line 316) | def test_non_terminal_states(self): method test_state_count (line 321) | def test_state_count(self): FILE: build_stream/tests/unit/core/localrepo/test_entities.py class TestPlaybookRequest (line 31) | class TestPlaybookRequest: method _make_request (line 34) | def _make_request(self, **overrides): method test_to_dict_contains_all_fields (line 49) | def test_to_dict_contains_all_fields(self): method test_generate_filename_format (line 61) | def test_generate_filename_format(self): method test_immutability (line 69) | def test_immutability(self): class TestPlaybookResult (line 76) | class TestPlaybookResult: method test_success_result (line 79) | def test_success_result(self): method test_failed_result (line 91) | def test_failed_result(self): method test_from_dict_success (line 105) | def test_from_dict_success(self): method test_from_dict_missing_required_field (line 125) | def test_from_dict_missing_required_field(self): method test_from_dict_with_optional_fields (line 131) | def test_from_dict_with_optional_fields(self): method test_immutability (line 143) | def test_immutability(self): FILE: build_stream/tests/unit/core/localrepo/test_exceptions.py class TestLocalRepoDomainError (line 27) | class TestLocalRepoDomainError: method test_message_stored (line 30) | def test_message_stored(self): method test_correlation_id_stored (line 35) | def test_correlation_id_stored(self): method test_correlation_id_defaults_none (line 40) | def test_correlation_id_defaults_none(self): class TestQueueUnavailableError (line 48) | class TestQueueUnavailableError: method test_attributes_stored (line 51) | def test_attributes_stored(self): class TestInputFilesMissingError (line 58) | class TestInputFilesMissingError: method test_attributes_stored (line 61) | def test_attributes_stored(self): method test_message_suggests_generate_api (line 67) | def test_message_suggests_generate_api(self): class TestInputDirectoryInvalidError (line 73) | class TestInputDirectoryInvalidError: method test_attributes_stored (line 76) | def test_attributes_stored(self): FILE: build_stream/tests/unit/core/localrepo/test_services.py class TestInputFileService (line 41) | class TestInputFileService: method _make_service (line 44) | def _make_service(self, input_repo=None): method test_prepare_success (line 50) | def test_prepare_success(self, tmp_path): method test_prepare_missing_input_raises (line 71) | def test_prepare_missing_input_raises(self): method test_prepare_copies_only_specific_files (line 82) | def test_prepare_copies_only_specific_files(self, tmp_path): method test_prepare_handles_missing_specific_files (line 117) | def test_prepare_handles_missing_specific_files(self, tmp_path): class TestPlaybookQueueRequestService (line 145) | class TestPlaybookQueueRequestService: method _make_request (line 148) | def _make_request(self): method test_submit_request_success (line 161) | def test_submit_request_success(self): method test_submit_request_queue_unavailable (line 173) | def test_submit_request_queue_unavailable(self): class TestPlaybookQueueResultService (line 184) | class TestPlaybookQueueResultService: method test_poll_results_processes_files (line 187) | def test_poll_results_processes_files(self): method test_poll_results_queue_unavailable (line 210) | def test_poll_results_queue_unavailable(self): method test_poll_results_handles_parse_error (line 220) | def test_poll_results_handles_parse_error(self): method test_poll_results_empty_queue (line 235) | def test_poll_results_empty_queue(self): FILE: build_stream/tests/unit/core/localrepo/test_value_objects.py class TestPlaybookPath (line 26) | class TestPlaybookPath: method test_valid_playbook_path (line 29) | def test_valid_playbook_path(self): method test_valid_yaml_extension (line 34) | def test_valid_yaml_extension(self): method test_empty_path_raises (line 39) | def test_empty_path_raises(self): method test_whitespace_path_raises (line 44) | def test_whitespace_path_raises(self): method test_relative_path_raises (line 49) | def test_relative_path_raises(self): method test_path_traversal_raises (line 54) | def test_path_traversal_raises(self): method test_non_yaml_extension_raises (line 59) | def test_non_yaml_extension_raises(self): method test_path_exceeds_max_length (line 64) | def test_path_exceeds_max_length(self): method test_immutability (line 70) | def test_immutability(self): class TestExtraVars (line 77) | class TestExtraVars: method test_valid_extra_vars (line 80) | def test_valid_extra_vars(self): method test_empty_extra_vars (line 85) | def test_empty_extra_vars(self): method test_none_values_raises (line 90) | def test_none_values_raises(self): method test_invalid_key_raises (line 95) | def test_invalid_key_raises(self): method test_key_starting_with_number_raises (line 100) | def test_key_starting_with_number_raises(self): method test_exceeds_max_keys (line 105) | def test_exceeds_max_keys(self): method test_to_dict_returns_copy (line 111) | def test_to_dict_returns_copy(self): method test_immutability (line 119) | def test_immutability(self): class TestExecutionTimeout (line 126) | class TestExecutionTimeout: method test_valid_timeout (line 129) | def test_valid_timeout(self): method test_default_timeout (line 134) | def test_default_timeout(self): method test_to_seconds (line 139) | def test_to_seconds(self): method test_minimum_timeout (line 144) | def test_minimum_timeout(self): method test_maximum_timeout (line 149) | def test_maximum_timeout(self): method test_below_minimum_raises (line 154) | def test_below_minimum_raises(self): method test_above_maximum_raises (line 159) | def test_above_maximum_raises(self): method test_negative_timeout_raises (line 164) | def test_negative_timeout_raises(self): method test_str_representation (line 169) | def test_str_representation(self): method test_immutability (line 174) | def test_immutability(self): FILE: build_stream/tests/unit/core/validate/test_entities.py function _make_request (line 24) | def _make_request(**overrides): class TestValidateImageOnTestRequest (line 40) | class TestValidateImageOnTestRequest: method test_create_valid_request (line 43) | def test_create_valid_request(self): method test_immutability (line 49) | def test_immutability(self): method test_to_dict (line 58) | def test_to_dict(self): method test_generate_filename (line 79) | def test_generate_filename(self): FILE: build_stream/tests/unit/core/validate/test_exceptions.py class TestValidateDomainError (line 25) | class TestValidateDomainError: method test_message_stored (line 28) | def test_message_stored(self): method test_default_correlation_id (line 34) | def test_default_correlation_id(self): method test_str_representation (line 39) | def test_str_representation(self): class TestEnvironmentUnavailableError (line 45) | class TestEnvironmentUnavailableError: method test_inherits_from_base (line 48) | def test_inherits_from_base(self): class TestValidationExecutionError (line 56) | class TestValidationExecutionError: method test_inherits_from_base (line 59) | def test_inherits_from_base(self): class TestStageGuardViolationError (line 66) | class TestStageGuardViolationError: method test_inherits_from_base (line 69) | def test_inherits_from_base(self): FILE: build_stream/tests/unit/core/validate/test_services.py class MockQueueRepo (line 27) | class MockQueueRepo: method __init__ (line 30) | def __init__(self, should_fail: bool = False): method write_request (line 34) | def write_request(self, request): function _make_request (line 40) | def _make_request(): class TestValidateQueueService (line 54) | class TestValidateQueueService: method test_submit_request_success (line 57) | def test_submit_request_success(self): method test_submit_request_failure_propagates (line 69) | def test_submit_request_failure_propagates(self): FILE: build_stream/tests/unit/infra/artifact_store/conftest.py function artifact_store (line 27) | def artifact_store() -> InMemoryArtifactStore: function artifact_metadata_repo (line 33) | def artifact_metadata_repo() -> InMemoryArtifactMetadataRepository: function file_hint (line 39) | def file_hint() -> StoreHint: function archive_hint (line 49) | def archive_hint() -> StoreHint: function sample_content (line 59) | def sample_content() -> bytes: function sample_file_map (line 65) | def sample_file_map() -> dict: FILE: build_stream/tests/unit/infra/artifact_store/test_in_memory_artifact_metadata.py function _make_ref (line 36) | def _make_ref(key_str: str = "ns/hash/label.bin") -> ArtifactRef: function _make_record (line 45) | def _make_record( class TestSave (line 62) | class TestSave: method test_save_and_find (line 65) | def test_save_and_find(self, artifact_metadata_repo) -> None: method test_save_overwrites_same_key (line 77) | def test_save_overwrites_same_key(self, artifact_metadata_repo) -> None: class TestFind (line 92) | class TestFind: method test_find_not_found (line 95) | def test_find_not_found(self, artifact_metadata_repo) -> None: method test_find_by_job (line 104) | def test_find_by_job(self, artifact_metadata_repo) -> None: method test_find_by_job_empty (line 124) | def test_find_by_job_empty(self, artifact_metadata_repo) -> None: class TestDelete (line 130) | class TestDelete: method test_delete_by_job (line 133) | def test_delete_by_job(self, artifact_metadata_repo) -> None: method test_delete_by_job_returns_zero (line 155) | def test_delete_by_job_returns_zero(self, artifact_metadata_repo) -> N... FILE: build_stream/tests/unit/infra/artifact_store/test_in_memory_artifact_store.py class TestStoreFile (line 31) | class TestStoreFile: method test_store_file_returns_artifact_ref (line 34) | def test_store_file_returns_artifact_ref( method test_store_file_computes_sha256 (line 49) | def test_store_file_computes_sha256( method test_store_file_rejects_overwrite (line 62) | def test_store_file_rejects_overwrite( method test_store_file_without_content_raises (line 80) | def test_store_file_without_content_raises( method test_store_file_with_file_map_raises (line 91) | def test_store_file_with_file_map_raises( class TestStoreArchive (line 105) | class TestStoreArchive: method test_store_archive_from_file_map (line 108) | def test_store_archive_from_file_map( method test_store_archive_from_directory (line 121) | def test_store_archive_from_directory( method test_store_archive_without_inputs_raises (line 140) | def test_store_archive_without_inputs_raises( method test_store_archive_with_both_inputs_raises (line 151) | def test_store_archive_with_both_inputs_raises( method test_store_archive_with_content_raises (line 164) | def test_store_archive_with_content_raises( method test_store_archive_nonexistent_dir_raises (line 176) | def test_store_archive_nonexistent_dir_raises( class TestRetrieve (line 189) | class TestRetrieve: method test_retrieve_file (line 192) | def test_retrieve_file( method test_retrieve_archive (line 207) | def test_retrieve_archive( method test_retrieve_archive_without_destination (line 226) | def test_retrieve_archive_without_destination( method test_retrieve_not_found_raises (line 242) | def test_retrieve_not_found_raises(self, artifact_store) -> None: class TestExistsAndDelete (line 251) | class TestExistsAndDelete: method test_exists_true_after_store (line 254) | def test_exists_true_after_store( method test_exists_false_before_store (line 266) | def test_exists_false_before_store(self, artifact_store) -> None: method test_delete_returns_true (line 273) | def test_delete_returns_true( method test_delete_returns_false_not_found (line 286) | def test_delete_returns_false_not_found(self, artifact_store) -> None: class TestValidation (line 294) | class TestValidation: method test_disallowed_content_type_raises (line 297) | def test_disallowed_content_type_raises( method test_oversized_content_raises (line 309) | def test_oversized_content_raises(self, file_hint) -> None: class TestGenerateKey (line 321) | class TestGenerateKey: method test_deterministic_key (line 324) | def test_deterministic_key(self, artifact_store, file_hint) -> None: method test_different_hints_different_keys (line 330) | def test_different_hints_different_keys(self, artifact_store) -> None: method test_file_key_has_bin_extension (line 338) | def test_file_key_has_bin_extension(self, artifact_store, file_hint) -... method test_archive_key_has_zip_extension (line 343) | def test_archive_key_has_zip_extension( FILE: build_stream/tests/unit/infra/db/test_mappers.py class TestJobMapper (line 43) | class TestJobMapper: method test_to_orm (line 46) | def test_to_orm(self) -> None: method test_to_domain (line 72) | def test_to_domain(self) -> None: method test_roundtrip (line 98) | def test_roundtrip(self) -> None: class TestStageMapper (line 126) | class TestStageMapper: method test_to_orm (line 129) | def test_to_orm(self) -> None: method test_to_domain (line 155) | def test_to_domain(self) -> None: class TestIdempotencyRecordMapper (line 182) | class TestIdempotencyRecordMapper: method test_to_orm (line 185) | def test_to_orm(self) -> None: class TestAuditEventMapper (line 206) | class TestAuditEventMapper: method test_to_orm_with_details (line 209) | def test_to_orm_with_details(self) -> None: method test_to_orm_without_details (line 231) | def test_to_orm_without_details(self) -> None: method test_to_domain_with_null_details (line 246) | def test_to_domain_with_null_details(self) -> None: FILE: build_stream/tests/unit/infra/db/test_repositories_unit.py class TestSqlJobRepositoryUnit (line 27) | class TestSqlJobRepositoryUnit: method test_save_raises_optimistic_lock_error_on_conflict (line 30) | def test_save_raises_optimistic_lock_error_on_conflict(self) -> None: method test_save_calls_flush (line 57) | def test_save_calls_flush(self) -> None: method test_find_by_id_returns_none_when_not_found (line 75) | def test_find_by_id_returns_none_when_not_found(self) -> None: method test_exists_returns_true_when_found (line 87) | def test_exists_returns_true_when_found(self) -> None: method test_exists_returns_false_when_not_found (line 100) | def test_exists_returns_false_when_not_found(self) -> None: FILE: build_stream/tests/unit/infra/test_id_generator.py class TestJobUUIDGenerator (line 22) | class TestJobUUIDGenerator: method test_generate_returns_valid_job_id (line 25) | def test_generate_returns_valid_job_id(self) -> None: method test_generate_is_unique (line 37) | def test_generate_is_unique(self) -> None: class TestUUIDv4Generator (line 46) | class TestUUIDv4Generator: # pylint: disable=R0903 method test_generate_returns_uuid_instance (line 49) | def test_generate_returns_uuid_instance(self) -> None: FILE: build_stream/tests/unit/infra/test_nfs_input_directory_repository.py class TestNfsInputRepository (line 29) | class TestNfsInputRepository: method repository (line 33) | def repository(self): method job_id (line 38) | def job_id(self): method test_get_source_input_repository_path (line 42) | def test_get_source_input_repository_path(self, repository, job_id): method test_get_destination_input_repository_path (line 50) | def test_get_destination_input_repository_path(self, repository): method test_validate_input_directory_success (line 58) | def test_validate_input_directory_success(self, repository, tmp_path): method test_validate_input_directory_missing_files (line 69) | def test_validate_input_directory_missing_files(self, repository, tmp_... method test_validate_input_directory_nonexistent (line 77) | def test_validate_input_directory_nonexistent(self, repository): method test_validate_input_directory_not_a_directory (line 85) | def test_validate_input_directory_not_a_directory(self, repository, tm... method test_validate_input_directory_empty (line 95) | def test_validate_input_directory_empty(self, repository, tmp_path): method test_validate_input_directory_with_subdirs (line 105) | def test_validate_input_directory_with_subdirs(self, repository, tmp_p... method test_validate_input_directory_permission_error (line 120) | def test_validate_input_directory_permission_error(self, repository): method test_custom_base_paths (line 129) | def test_custom_base_paths(self): FILE: build_stream/tests/unit/infra/test_nfs_playbook_queue_result_service.py class TestPlaybookQueueResultService (line 29) | class TestPlaybookQueueResultService: method mock_result_repo (line 33) | def mock_result_repo(self): method result_service (line 38) | def result_service(self, mock_result_repo): method result_file_content (line 43) | def result_file_content(self): method test_poll_results_no_files (line 54) | def test_poll_results_no_files(self, result_service, mock_result_repo): method test_poll_results_with_files (line 66) | def test_poll_results_with_files(self, result_service, mock_result_rep... method test_poll_results_repo_unavailable (line 92) | def test_poll_results_repo_unavailable(self, result_service, mock_resu... method test_poll_results_callback_exception (line 103) | def test_poll_results_callback_exception(self, result_service, mock_re... method test_poll_results_read_exception (line 121) | def test_poll_results_read_exception(self, result_service, mock_result... FILE: build_stream/tests/unit/infra/test_nfs_repositories.py class TestNfsPlaybookQueueRequestRepository (line 40) | class TestNfsPlaybookQueueRequestRepository: method _make_request (line 43) | def _make_request(self): method test_write_request_creates_file (line 56) | def test_write_request_creates_file(self, tmp_path): method test_is_available_true (line 72) | def test_is_available_true(self, tmp_path): method test_is_available_false (line 80) | def test_is_available_false(self): method test_write_request_unavailable_raises (line 87) | def test_write_request_unavailable_raises(self): method test_file_permissions (line 95) | def test_file_permissions(self, tmp_path): class TestNfsPlaybookQueueResultRepository (line 112) | class TestNfsPlaybookQueueResultRepository: method _write_result_file (line 115) | def _write_result_file(self, results_dir, filename, data): method test_get_unprocessed_results (line 122) | def test_get_unprocessed_results(self, tmp_path): method test_read_result_valid (line 139) | def test_read_result_valid(self, tmp_path): method test_read_result_invalid_json (line 162) | def test_read_result_invalid_json(self, tmp_path): method test_read_result_missing_fields (line 176) | def test_read_result_missing_fields(self, tmp_path): method test_archive_result (line 193) | def test_archive_result(self, tmp_path): method test_is_available_true (line 213) | def test_is_available_true(self, tmp_path): method test_is_available_false (line 221) | def test_is_available_false(self): method test_clear_processed_cache (line 228) | def test_clear_processed_cache(self, tmp_path): class TestNfsInputRepository (line 248) | class TestNfsInputRepository: method test_get_source_path (line 251) | def test_get_source_path(self): method test_get_destination_path (line 259) | def test_get_destination_path(self): method test_validate_existing_directory (line 267) | def test_validate_existing_directory(self, tmp_path): method test_validate_nonexistent_directory (line 278) | def test_validate_nonexistent_directory(self): method test_validate_empty_directory (line 283) | def test_validate_empty_directory(self, tmp_path): FILE: build_stream/tests/unit/orchestrator/build_image/test_create_build_image_use_case.py function _uuid (line 33) | def _uuid(): class MockJobRepository (line 38) | class MockJobRepository: method __init__ (line 41) | def __init__(self, job=None): method find_by_id (line 46) | def find_by_id(self, job_id): method save (line 50) | def save(self, job): class MockStageRepository (line 55) | class MockStageRepository: method __init__ (line 58) | def __init__(self, stages=None): method find_by_job_and_name (line 63) | def find_by_job_and_name(self, job_id, stage_name): method save (line 67) | def save(self, stage): class MockAuditRepository (line 72) | class MockAuditRepository: method __init__ (line 75) | def __init__(self): method save (line 79) | def save(self, event): class MockConfigService (line 84) | class MockConfigService: method __init__ (line 87) | def __init__(self, inventory_host=None, should_fail=False): method get_inventory_host (line 92) | def get_inventory_host(self, job_id, architecture, correlation_id): class MockQueueService (line 99) | class MockQueueService: method __init__ (line 102) | def __init__(self): method submit_request (line 106) | def submit_request(self, request, correlation_id): class MockInventoryRepo (line 111) | class MockInventoryRepo: method __init__ (line 114) | def __init__(self): method create_inventory_file (line 118) | def create_inventory_file(self, inventory_host, job_id): class MockUUIDGenerator (line 124) | class MockUUIDGenerator: method __init__ (line 127) | def __init__(self): method generate (line 130) | def generate(self): class TestCreateBuildImageUseCase (line 135) | class TestCreateBuildImageUseCase: method job_id (line 139) | def job_id(self): method client_id (line 144) | def client_id(self): method correlation_id (line 149) | def correlation_id(self): method mock_job (line 154) | def mock_job(self, client_id): method x86_stage (line 162) | def x86_stage(self, job_id): method aarch64_stage (line 170) | def aarch64_stage(self, job_id): method upstream_completed_stage (line 178) | def upstream_completed_stage(self, job_id): method use_case_x86 (line 189) | def use_case_x86(self, mock_job, job_id, x86_stage, upstream_completed... method test_execute_success_x86_64 (line 205) | def test_execute_success_x86_64(self, use_case_x86, job_id, client_id,... method test_execute_success_aarch64_with_host (line 225) | def test_execute_success_aarch64_with_host( method test_execute_job_not_found (line 259) | def test_execute_job_not_found(self, job_id, client_id, correlation_id): method test_execute_stage_not_found (line 283) | def test_execute_stage_not_found( method test_execute_invalid_architecture (line 312) | def test_execute_invalid_architecture(self, use_case_x86, job_id, clie... method test_execute_aarch64_missing_inventory_host (line 326) | def test_execute_aarch64_missing_inventory_host( method test_execute_emits_audit_event (line 357) | def test_execute_emits_audit_event(self, use_case_x86, job_id, client_... method test_execute_submits_to_queue (line 377) | def test_execute_submits_to_queue(self, use_case_x86, job_id, client_i... method test_execute_starts_stage (line 395) | def test_execute_starts_stage(self, use_case_x86, job_id, client_id, c... FILE: build_stream/tests/unit/orchestrator/catalog/conftest.py class FakeUUIDGenerator (line 47) | class FakeUUIDGenerator: method __init__ (line 50) | def __init__(self) -> None: method generate (line 53) | def generate(self) -> uuid.UUID: function job_id (line 59) | def job_id() -> JobId: function correlation_id (line 64) | def correlation_id() -> CorrelationId: function job_repo (line 69) | def job_repo() -> InMemoryJobRepository: function stage_repo (line 74) | def stage_repo() -> InMemoryStageRepository: function audit_repo (line 79) | def audit_repo() -> InMemoryAuditEventRepository: function artifact_store (line 84) | def artifact_store() -> InMemoryArtifactStore: function artifact_metadata_repo (line 89) | def artifact_metadata_repo() -> InMemoryArtifactMetadataRepository: function uuid_generator (line 94) | def uuid_generator() -> FakeUUIDGenerator: function created_job (line 99) | def created_job(job_id) -> Job: function in_progress_job (line 109) | def in_progress_job(job_id) -> Job: function parse_catalog_stage (line 121) | def parse_catalog_stage(job_id) -> Stage: function completed_parse_catalog_stage (line 131) | def completed_parse_catalog_stage(job_id) -> Stage: function generate_input_files_stage (line 144) | def generate_input_files_stage(job_id) -> Stage: FILE: build_stream/tests/unit/orchestrator/catalog/test_generate_input_files_command.py class TestGenerateInputFilesCommand (line 31) | class TestGenerateInputFilesCommand: method test_valid_command_without_adapter_policy (line 34) | def test_valid_command_without_adapter_policy(self) -> None: method test_valid_command_with_adapter_policy (line 44) | def test_valid_command_with_adapter_policy(self) -> None: method test_immutable (line 56) | def test_immutable(self) -> None: method test_equality_based_on_values (line 65) | def test_equality_based_on_values(self) -> None: method test_inequality_with_different_values (line 83) | def test_inequality_with_different_values(self) -> None: method test_string_representation (line 102) | def test_string_representation(self) -> None: FILE: build_stream/tests/unit/orchestrator/catalog/test_generate_input_files_use_case.py function _make_command (line 57) | def _make_command() -> GenerateInputFilesCommand: function _build_use_case (line 64) | def _build_use_case( # pylint: disable=too-many-arguments,too-many-posi... function _seed_upstream_artifacts (line 99) | def _seed_upstream_artifacts( class TestStageGuards (line 145) | class TestStageGuards: method test_job_not_found (line 148) | def test_job_not_found( # pylint: disable=too-many-arguments,too-many... method test_job_in_terminal_state (line 165) | def test_job_in_terminal_state( # pylint: disable=too-many-arguments,... method test_stage_already_completed (line 188) | def test_stage_already_completed( # pylint: disable=too-many-argument... class TestUpstreamValidation (line 213) | class TestUpstreamValidation: method test_upstream_not_completed (line 216) | def test_upstream_not_completed( # pylint: disable=too-many-arguments... method test_upstream_artifact_not_found (line 241) | def test_upstream_artifact_not_found( # pylint: disable=too-many-argu... class TestHappyPath (line 281) | class TestHappyPath: method test_generates_and_stores_configs (line 284) | def test_generates_and_stores_configs( # pylint: disable=too-many-arg... method test_stage_fails_on_config_generation_error (line 356) | def test_stage_fails_on_config_generation_error( # pylint: disable=to... method test_audit_events_emitted (line 414) | def test_audit_events_emitted( # pylint: disable=too-many-arguments,t... class TestIdempotency (line 468) | class TestIdempotency: method test_idempotent_artifact_storage_returns_existing_artifact (line 471) | def test_idempotent_artifact_storage_returns_existing_artifact( # pyl... method test_stage_already_completed_prevents_rerun (line 561) | def test_stage_already_completed_prevents_rerun( # pylint: disable=to... FILE: build_stream/tests/unit/orchestrator/catalog/test_parse_catalog_command.py class TestParseCatalogCommand (line 29) | class TestParseCatalogCommand: method test_valid_command (line 32) | def test_valid_command(self) -> None: method test_empty_filename_raises (line 41) | def test_empty_filename_raises(self) -> None: method test_filename_too_long_raises (line 50) | def test_filename_too_long_raises(self) -> None: method test_empty_content_raises (line 59) | def test_empty_content_raises(self) -> None: method test_content_too_large_raises (line 68) | def test_content_too_large_raises(self) -> None: method test_immutable (line 77) | def test_immutable(self) -> None: FILE: build_stream/tests/unit/orchestrator/catalog/test_parse_catalog_use_case.py function _load_valid_catalog_bytes (line 48) | def _load_valid_catalog_bytes() -> bytes: function _make_command (line 64) | def _make_command( function _build_use_case (line 76) | def _build_use_case( class TestStageGuards (line 90) | class TestStageGuards: method test_job_not_found (line 93) | def test_job_not_found( method test_job_in_terminal_state (line 104) | def test_job_in_terminal_state( method test_stage_already_completed (line 121) | def test_stage_already_completed( method test_stage_in_progress_raises (line 136) | def test_stage_in_progress_raises( class TestValidation (line 153) | class TestValidation: method test_invalid_file_format (line 156) | def test_invalid_file_format( method test_invalid_json_content (line 188) | def test_invalid_json_content( method test_json_array_not_dict (line 214) | def test_json_array_not_dict( class TestHappyPath (line 241) | class TestHappyPath: method test_parse_catalog_stores_catalog_artifact (line 244) | def test_parse_catalog_stores_catalog_artifact( method test_stage_transitions_to_failed_on_error (line 278) | def test_stage_transitions_to_failed_on_error( method test_job_transitions_to_in_progress (line 304) | def test_job_transitions_to_in_progress( method test_audit_events_emitted (line 327) | def test_audit_events_emitted( FILE: build_stream/tests/unit/orchestrator/common/test_result_poller.py class MockResultService (line 34) | class MockResultService: method __init__ (line 35) | def __init__(self): method poll_results (line 39) | def poll_results(self, callback): class MockStageRepo (line 49) | class MockStageRepo: method __init__ (line 50) | def __init__(self): method save (line 53) | def save(self, stage): method find_by_job_and_name (line 57) | def find_by_job_and_name(self, job_id, stage_name): class MockAuditRepo (line 61) | class MockAuditRepo: method __init__ (line 62) | def __init__(self): method save (line 65) | def save(self, event): method find_by_job (line 68) | def find_by_job(self, job_id): class MockJobRepo (line 72) | class MockJobRepo: method __init__ (line 73) | def __init__(self): method find_by_id (line 76) | def find_by_id(self, job_id): method save (line 79) | def save(self, job): class MockUUIDGenerator (line 83) | class MockUUIDGenerator: method generate (line 84) | def generate(self): function mock_result_service (line 91) | def mock_result_service(): function mock_stage_repo (line 96) | def mock_stage_repo(): function mock_audit_repo (line 101) | def mock_audit_repo(): function mock_job_repo (line 106) | def mock_job_repo(): function mock_uuid_gen (line 111) | def mock_uuid_gen(): function result_poller (line 116) | def result_poller(mock_result_service, mock_job_repo, mock_stage_repo, m... class TestResultPoller (line 130) | class TestResultPoller: method test_start_starts_polling (line 134) | async def test_start_starts_polling(self, result_poller, mock_result_s... method test_stop_stops_polling (line 142) | async def test_stop_stops_polling(self, result_poller): method test_double_start_is_safe (line 149) | async def test_double_start_is_safe(self, result_poller): method test_stop_without_start_is_safe (line 157) | async def test_stop_without_start_is_safe(self, result_poller): method test_on_result_success (line 162) | def test_on_result_success( method test_on_result_failure (line 193) | def test_on_result_failure( method test_on_result_stage_not_found (line 225) | def test_on_result_stage_not_found( method test_backward_compatibility_alias (line 241) | def test_backward_compatibility_alias(self): FILE: build_stream/tests/unit/orchestrator/jobs/use_cases/conftest.py class FakeJobRepository (line 27) | class FakeJobRepository: method __init__ (line 29) | def __init__(self) -> None: method save (line 33) | def save(self, job: Job) -> None: method find_by_id (line 37) | def find_by_id(self, job_id: JobId) -> Optional[Job]: method exists (line 41) | def exists(self, job_id: JobId) -> bool: class FakeStageRepository (line 46) | class FakeStageRepository: method __init__ (line 48) | def __init__(self) -> None: method save (line 52) | def save(self, stage: Stage) -> None: method save_all (line 57) | def save_all(self, stages: List[Stage]) -> None: method find_by_job_and_name (line 62) | def find_by_job_and_name( method find_all_by_job (line 71) | def find_all_by_job(self, job_id: JobId) -> List[Stage]: class FakeIdempotencyRepository (line 79) | class FakeIdempotencyRepository: method __init__ (line 81) | def __init__(self) -> None: method save (line 85) | def save(self, record: IdempotencyRecord) -> None: method find_by_key (line 89) | def find_by_key(self, key: IdempotencyKey) -> Optional[IdempotencyReco... class FakeAuditEventRepository (line 94) | class FakeAuditEventRepository: method __init__ (line 96) | def __init__(self) -> None: method save (line 100) | def save(self, event: AuditEvent) -> None: method find_by_job (line 104) | def find_by_job(self, job_id: JobId) -> List[AuditEvent]: class FakeJobIdGenerator (line 112) | class FakeJobIdGenerator(JobIdGenerator): method __init__ (line 114) | def __init__(self): method generate (line 118) | def generate(self) -> JobId: class FakeUUIDGenerator (line 125) | class FakeUUIDGenerator(UUIDGenerator): method __init__ (line 127) | def __init__(self): method generate (line 131) | def generate(self) -> uuid.UUID: function job_repo (line 139) | def job_repo(): function stage_repo (line 145) | def stage_repo(): function idempotency_repo (line 151) | def idempotency_repo(): function audit_repo (line 157) | def audit_repo(): function job_id_generator (line 163) | def job_id_generator(): function _job_id_generator (line 169) | def _job_id_generator(): function uuid_generator (line 175) | def uuid_generator(): FILE: build_stream/tests/unit/orchestrator/jobs/use_cases/test_create_job.py class _DeterministicJobIdGenerator (line 38) | class _DeterministicJobIdGenerator: method __init__ (line 40) | def __init__(self, job_id: JobId): method generate (line 43) | def generate(self) -> JobId: class _SequenceJobIdGenerator (line 48) | class _SequenceJobIdGenerator: method __init__ (line 50) | def __init__(self, job_ids: list[JobId]): method generate (line 53) | def generate(self) -> JobId: class TestCreateJobUseCase (line 58) | class TestCreateJobUseCase: method test_create_job_success (line 61) | def test_create_job_success( method test_create_job_persists_job (line 95) | def test_create_job_persists_job( method test_create_job_creates_all_stages (line 128) | def test_create_job_creates_all_stages( method test_create_job_saves_idempotency_record (line 167) | def test_create_job_saves_idempotency_record( method test_create_job_emits_audit_event (line 200) | def test_create_job_emits_audit_event( method test_idempotent_retry_returns_existing_job (line 235) | def test_idempotent_retry_returns_existing_job( method test_idempotency_conflict_raises_error (line 271) | def test_idempotency_conflict_raises_error( method test_job_already_exists_raises_error (line 315) | def test_job_already_exists_raises_error( FILE: build_stream/tests/unit/orchestrator/local_repo/test_commands.py class TestCreateLocalRepoCommand (line 25) | class TestCreateLocalRepoCommand: method valid_command_data (line 29) | def valid_command_data(self): method test_create_command_with_valid_data (line 37) | def test_create_command_with_valid_data(self, valid_command_data): method test_command_is_immutable (line 45) | def test_command_is_immutable(self, valid_command_data): method test_command_equality (line 59) | def test_command_equality(self, valid_command_data): method test_command_inequality (line 67) | def test_command_inequality(self, valid_command_data): method test_command_repr (line 79) | def test_command_repr(self, valid_command_data): method test_command_with_none_correlation_id (line 89) | def test_command_with_none_correlation_id(self): method test_command_accepts_valid_value_objects (line 99) | def test_command_accepts_valid_value_objects(self, valid_command_data): FILE: build_stream/tests/unit/orchestrator/local_repo/test_dtos.py class TestLocalRepoResponse (line 25) | class TestLocalRepoResponse: method valid_response_data (line 29) | def valid_response_data(self): method test_create_response_with_valid_data (line 39) | def test_create_response_with_valid_data(self, valid_response_data): method test_response_is_immutable (line 49) | def test_response_is_immutable(self, valid_response_data): method test_response_equality (line 70) | def test_response_equality(self, valid_response_data): method test_response_inequality (line 78) | def test_response_inequality(self, valid_response_data): method test_response_from_domain_entities (line 90) | def test_response_from_domain_entities(self): method test_response_with_different_statuses (line 112) | def test_response_with_different_statuses(self, valid_response_data): method test_response_repr (line 119) | def test_response_repr(self, valid_response_data): FILE: build_stream/tests/unit/orchestrator/local_repo/test_result_poller.py function mock_result_service_fixture (line 34) | def mock_result_service_fixture(): function mock_stage_repo_fixture (line 42) | def mock_stage_repo_fixture(): function mock_audit_repo_fixture (line 49) | def mock_audit_repo_fixture(): function mock_uuid_generator_fixture (line 56) | def mock_uuid_generator_fixture(): function mock_job_repo_fixture (line 64) | def mock_job_repo_fixture(): function result_poller (line 71) | def result_poller( class TestLocalRepoResultPoller (line 86) | class TestLocalRepoResultPoller: method test_start_starts_polling (line 90) | async def test_start_starts_polling(self, result_poller, mock_result_s... method test_stop_stops_polling (line 99) | async def test_stop_stops_polling(self, result_poller, mock_result_ser... method test_poll_loop_calls_poll_results (line 108) | async def test_poll_loop_calls_poll_results(self, result_poller, mock_... method test_on_result_received_success (line 125) | def test_on_result_received_success(self, result_poller, mock_stage_re... method test_on_result_received_failure (line 160) | def test_on_result_received_failure(self, result_poller, mock_stage_re... method test_on_result_received_stage_not_found (line 198) | def test_on_result_received_stage_not_found(self, result_poller, mock_... method test_on_result_received_handles_exceptions (line 219) | def test_on_result_received_handles_exceptions(self, result_poller, mo... method test_poll_loop_handles_exceptions (line 241) | async def test_poll_loop_handles_exceptions(self, result_poller, mock_... FILE: build_stream/tests/unit/orchestrator/local_repo/test_use_case.py function job_id_fixture (line 39) | def job_id_fixture(): function client_id_fixture (line 45) | def client_id_fixture(): function correlation_id_fixture (line 51) | def correlation_id_fixture(): function job_fixture (line 57) | def job_fixture(job_id, client_id): function stage_fixture (line 67) | def stage_fixture(job_id): function command_fixture (line 76) | def command_fixture(job_id, client_id, correlation_id): function upstream_stage_fixture (line 86) | def upstream_stage_fixture(job_id): function use_case_fixture (line 98) | def use_case_fixture(job, stage, upstream_stage): class TestCreateLocalRepoUseCase (line 141) | class TestCreateLocalRepoUseCase: method test_execute_success (line 144) | def test_execute_success(self, use_case, command): method test_execute_updates_stage_to_running (line 153) | def test_execute_updates_stage_to_running(self, use_case, command): method test_execute_submits_request (line 158) | def test_execute_submits_request(self, use_case, command): method test_execute_emits_audit_event (line 163) | def test_execute_emits_audit_event(self, use_case, command): method test_execute_job_not_found (line 168) | def test_execute_job_not_found(self, use_case, command): method test_execute_tombstoned_job (line 175) | def test_execute_tombstoned_job(self, use_case, command, job): method test_execute_wrong_client (line 183) | def test_execute_wrong_client(self, use_case, command, job): method test_execute_stage_not_found (line 191) | def test_execute_stage_not_found(self, use_case, command, upstream_sta... method test_execute_input_files_missing (line 203) | def test_execute_input_files_missing(self, use_case, command): FILE: build_stream/tests/unit/orchestrator/validate/test_validate_image_on_test_use_case.py function _uuid (line 44) | def _uuid() -> str: function _make_job (line 48) | def _make_job(job_id: JobId, client_id: ClientId) -> Job: function _make_stage (line 58) | def _make_stage( function _make_command (line 71) | def _make_command( class MockJobRepo (line 85) | class MockJobRepo: method __init__ (line 89) | def __init__(self): method save (line 93) | def save(self, job: Job) -> None: method find_by_id (line 97) | def find_by_id(self, job_id): method exists (line 102) | def exists(self, job_id) -> bool: class MockStageRepo (line 108) | class MockStageRepo: method __init__ (line 112) | def __init__(self): method save (line 116) | def save(self, stage: Stage) -> None: method save_all (line 121) | def save_all(self, stages) -> None: method find_by_job_and_name (line 126) | def find_by_job_and_name(self, job_id, stage_name): method find_all_by_job (line 131) | def find_all_by_job(self, job_id): class MockAuditRepo (line 137) | class MockAuditRepo: method __init__ (line 141) | def __init__(self): method save (line 145) | def save(self, event) -> None: method find_by_job (line 149) | def find_by_job(self, job_id): class MockUUIDGenerator (line 155) | class MockUUIDGenerator: method generate (line 159) | def generate(self): class MockQueueService (line 164) | class MockQueueService: method __init__ (line 168) | def __init__(self, should_fail: bool = False): method submit_request (line 173) | def submit_request(self, request, correlation_id): function job_repo (line 183) | def job_repo(): function stage_repo (line 189) | def stage_repo(): function audit_repo (line 195) | def audit_repo(): function uuid_gen (line 201) | def uuid_gen(): function queue_service (line 207) | def queue_service(): function _build_use_case (line 212) | def _build_use_case(job_repo, stage_repo, audit_repo, queue_service, uui... class TestValidateImageOnTestUseCase (line 225) | class TestValidateImageOnTestUseCase: method test_execute_success (line 228) | def test_execute_success( method test_execute_with_aarch64_completed (line 261) | def test_execute_with_aarch64_completed( method test_execute_job_not_found (line 288) | def test_execute_job_not_found( method test_execute_client_mismatch (line 301) | def test_execute_client_mismatch( method test_execute_stage_not_found (line 318) | def test_execute_stage_not_found( method test_execute_stage_guard_violation_no_build_stages (line 336) | def test_execute_stage_guard_violation_no_build_stages( method test_execute_stage_guard_violation_build_pending (line 358) | def test_execute_stage_guard_violation_build_pending( method test_execute_queue_failure (line 385) | def test_execute_queue_failure( method test_execute_emits_audit_event (line 418) | def test_execute_emits_audit_event( method test_execute_starts_stage (line 447) | def test_execute_starts_stage( method test_execute_submits_correct_request (line 476) | def test_execute_submits_correct_request( FILE: build_stream/tests/utils/test_data.py function generate_secure_password (line 26) | def generate_secure_password(length: int = 16) -> str: function generate_password_pair (line 64) | def generate_password_pair(length: int = 16) -> Tuple[str, str]: function generate_test_string (line 83) | def generate_test_string(prefix: str = "test", length: int = 10) -> str: function generate_test_email (line 98) | def generate_test_email(domain: str = "example.com") -> str: function generate_test_client_name (line 111) | def generate_test_client_name() -> str: FILE: common/library/module_utils/build_image/common_functions.py function load_json_file (line 26) | def load_json_file(path, module): function load_yaml_file (line 48) | def load_yaml_file(path, module): function is_additional_packages_enabled (line 69) | def is_additional_packages_enabled(software_config): function is_admin_debug_enabled (line 85) | def is_admin_debug_enabled(software_config): function get_allowed_additional_subgroups (line 101) | def get_allowed_additional_subgroups(software_config): function extract_rpm_package_names (line 117) | def extract_rpm_package_names(cluster_items): function deduplicate_list (line 135) | def deduplicate_list(items): FILE: common/library/module_utils/discovery/standard_functions.py function create_directory (line 25) | def create_directory(path: str, mode: int) -> None: function render_template (line 32) | def render_template(src: str, dest: str, context: dict) -> None: function load_vars_file (line 45) | def load_vars_file(path: str) -> dict: function render_template_multi_pass (line 55) | def render_template_multi_pass(src: str, dest: str, context: dict, passe... function update_json (line 72) | def update_json(new_data, filepath): FILE: common/library/module_utils/input_validation/common_utils/config.py function get_vault_password (line 201) | def get_vault_password(yaml_file): FILE: common/library/module_utils/input_validation/common_utils/data_fetch.py function files_recursively (line 29) | def files_recursively(directory, file_type): function file_name_from_path (line 48) | def file_name_from_path(file_path): function json_line_number (line 59) | def json_line_number(file_path, json_path, module): function yml_line_number (line 88) | def yml_line_number(file_path, yml_path, omnia_base_dir, project_name): function input_data (line 128) | def input_data(input_file_path, omnia_base_dir, project_name, logger, mo... FILE: common/library/module_utils/input_validation/common_utils/data_validation.py function schema (line 26) | def schema(config): function logic (line 136) | def logic(config): FILE: common/library/module_utils/input_validation/common_utils/data_verification.py function file_exists (line 23) | def file_exists(file_path, module, logger): function directory_exists (line 44) | def directory_exists(directory_path, module, logger): FILE: common/library/module_utils/input_validation/common_utils/en_us_validation_msg.py function bmc_username_fail_msg (line 227) | def bmc_username_fail_msg(min_username_length, max_length): function switch_snmp3_username_fail_msg (line 241) | def switch_snmp3_username_fail_msg(min_username_length, max_length): function boolean_fail_msg (line 265) | def boolean_fail_msg(value): function os_version_fail_msg (line 297) | def os_version_fail_msg(cluster_os_type, min_version, max_version): function software_mandatory_fail_msg (line 303) | def software_mandatory_fail_msg(software_name): function json_file_mandatory (line 307) | def json_file_mandatory(file_path): function tls_ext_fail_msg (line 374) | def tls_ext_fail_msg(valid_extensions): function server_spec_network_key_fail_msg (line 393) | def server_spec_network_key_fail_msg(nic_device): function build_stream_host_ip_not_oim_ip_msg (line 461) | def build_stream_host_ip_not_oim_ip_msg(ip, allowed_ips): function restrict_softwares_fail_msg (line 522) | def restrict_softwares_fail_msg(software): function get_header (line 528) | def get_header(): function get_footer (line 532) | def get_footer(): function get_validation_initiated (line 536) | def get_validation_initiated(input_file_path): function get_schema_failed (line 540) | def get_schema_failed(input_file_path): function get_schema_success (line 544) | def get_schema_success(input_file_path): function get_logic_failed (line 548) | def get_logic_failed(input_file_path): function get_logic_success (line 552) | def get_logic_success(input_file_path): FILE: common/library/module_utils/input_validation/common_utils/logical_validation.py function validate_input_logic (line 33) | def validate_input_logic( FILE: common/library/module_utils/input_validation/common_utils/slurm_conf_utils.py class SlurmParserEnum (line 22) | class SlurmParserEnum(str, Enum): function validate_config_types (line 763) | def validate_config_types(conf_dict, conf_name, module): function parse_slurm_conf (line 839) | def parse_slurm_conf(file_path, conf_name, validate): function expand_hostlist (line 890) | def expand_hostlist(expr): FILE: common/library/module_utils/input_validation/common_utils/validation_utils.py function load_yaml_as_json (line 26) | def load_yaml_as_json(yaml_file, omnia_base_dir, project_name, logger, m... function create_error_msg (line 109) | def create_error_msg(key, value, msg): function create_file_path (line 123) | def create_file_path(input_file_path, other_file): function extract_arch_from_fg (line 139) | def extract_arch_from_fg(fg_name): function load_json (line 155) | def load_json(file_path): function contains_software (line 177) | def contains_software(softwares, name): function check_mandatory_fields (line 190) | def check_mandatory_fields(mandatory_fields, data, errors): function is_file_encrypted (line 213) | def is_file_encrypted(file_path): function process_encrypted_file (line 230) | def process_encrypted_file(yaml_file, omnia_base_dir, project_name, logg... function run_subprocess (line 265) | def run_subprocess(cmd): function encrypt_file (line 287) | def encrypt_file(omnia_base_dir, project_name, vault_file, vault_passwor... function decrypt_file (line 310) | def decrypt_file(omnia_base_dir, project_name, vault_file, vault_passwor... function is_string_empty (line 334) | def is_string_empty(value): function verify_path (line 350) | def verify_path(file_path): function validate_default_lease_time (line 364) | def validate_default_lease_time(default_lease_time): function is_valid_password (line 379) | def is_valid_password(password): function validate_username (line 399) | def validate_username(username, min_username_length, max_length): function check_overlap (line 422) | def check_overlap(ip_list): function key_value_exists (line 458) | def key_value_exists(list_of_dicts, key, value) -> bool: function validate_ipv4 (line 475) | def validate_ipv4(ip: str) -> bool: function validate_ipv4_range (line 491) | def validate_ipv4_range(ip_range) -> bool: function validate_netmask_bits (line 512) | def validate_netmask_bits(bits): function is_range_within_subnet (line 530) | def is_range_within_subnet(ip_range, reference_ip, netmask_bits): function check_bmc_static_range_overlap (line 554) | def check_bmc_static_range_overlap(static_range, static_range_group_mapp... function get_interface_ips_and_netmasks (line 577) | def get_interface_ips_and_netmasks(interface): function check_port_overlap (line 606) | def check_port_overlap(port_ranges) -> bool: function check_port_ranges (line 634) | def check_port_ranges(port_ranges) -> bool: function is_ip_within_range (line 652) | def is_ip_within_range(ip_range, ip): function is_ip_in_subnet (line 668) | def is_ip_in_subnet(admin_oim_ip, netmask_bits, vip_address): function flatten_sub_groups (line 685) | def flatten_sub_groups(sub_groups): function validate_cluster_items (line 701) | def validate_cluster_items(cluster_items, json_file_path): function validate_softwaresubgroup_entries (line 759) | def validate_softwaresubgroup_entries( FILE: common/library/module_utils/input_validation/validation_flows/build_stream_validation.py function get_ethernet_interface_ips (line 34) | def get_ethernet_interface_ips(logger): function validate_build_stream_config (line 101) | def validate_build_stream_config(input_file_path, data, FILE: common/library/module_utils/input_validation/validation_flows/common_validation.py function validate_software_config (line 57) | def validate_software_config( function is_version_valid (line 332) | def is_version_valid(actual_version, expected): function validate_versions (line 338) | def validate_versions(data): function validate_openldap_input_params (line 373) | def validate_openldap_input_params(authentication_type, mandatory_fields... function validate_freeapi_input_params (line 426) | def validate_freeapi_input_params(authentication_type, mandatory_fields,... function validate_security_config (line 457) | def validate_security_config( function validate_network_config (line 503) | def validate_network_config( function get_matching_clusters_for_nfs (line 534) | def get_matching_clusters_for_nfs(nfs_name, omnia_config): function validate_storage_config (line 555) | def validate_storage_config( function validate_roce_plugin_config (line 617) | def validate_roce_plugin_config( function validate_allowed_services (line 638) | def validate_allowed_services(data, errors, logger): function validate_alert_email_address (line 674) | def validate_alert_email_address(data, errors, logger): function validate_smtp_server (line 710) | def validate_smtp_server(data, errors, logger): function validate_login_node_security_config (line 756) | def validate_login_node_security_config( function validate_server_spec (line 795) | def validate_server_spec( function get_admin_networks (line 869) | def get_admin_networks( function is_ip_in_range (line 902) | def is_ip_in_range(ip_str, ip_range_str): function validate_k8s (line 917) | def validate_k8s(data, admin_networks, softwares, ha_config, tag_names, ... function validate_omnia_config (line 1047) | def validate_omnia_config( function check_is_service_cluster_functional_groups_defined (line 1175) | def check_is_service_cluster_functional_groups_defined( function check_is_slurm_cluster_functional_groups_defined (line 1281) | def check_is_slurm_cluster_functional_groups_defined( function validate_telemetry_config (line 1387) | def validate_telemetry_config( function validate_additional_software (line 1603) | def validate_additional_software( FILE: common/library/module_utils/input_validation/validation_flows/csi_driver_validation.py function validate_secret_isilon_clusters (line 32) | def validate_secret_isilon_clusters(data): function validate_value_file_inputs (line 103) | def validate_value_file_inputs(values_data): function encrypt_file (line 175) | def encrypt_file(secret_file_path, vault_secret_file_path): function decrypt_file (line 189) | def decrypt_file(secret_file_path, vault_secret_file_path): function process_encrypted_file (line 204) | def process_encrypted_file(secret_file_path,vault_secret_file_path,errors): function validate_powerscale_secret_and_values_file (line 228) | def validate_powerscale_secret_and_values_file( FILE: common/library/module_utils/input_validation/validation_flows/gitlab_validation.py function validate_gitlab_config (line 32) | def validate_gitlab_config(input_file_path, data, function _validate_gitlab_host (line 65) | def _validate_gitlab_host(data, gitlab_yml, errors, logger): function _validate_project_settings (line 84) | def _validate_project_settings(data, gitlab_yml, errors): function _validate_ports (line 105) | def _validate_ports(data, gitlab_yml, errors): function _validate_resource_requirements (line 126) | def _validate_resource_requirements(data, gitlab_yml, errors): function _validate_performance_tuning (line 147) | def _validate_performance_tuning(data, gitlab_yml, errors): function _validate_oim_settings (line 162) | def _validate_oim_settings(data, gitlab_yml, errors): FILE: common/library/module_utils/input_validation/validation_flows/high_availability_validation.py function get_roles_config_json (line 32) | def get_roles_config_json(input_file_path, logger, module, omnia_base_di... function check_and_validate_ha_role_in_roles_config (line 55) | def check_and_validate_ha_role_in_roles_config(errors, roles_config_json... function get_admin_static_dynamic_ranges (line 89) | def get_admin_static_dynamic_ranges(network_spec_json): function get_bmc_network (line 114) | def get_bmc_network(network_spec_json): function get_admin_netmaskbits (line 138) | def get_admin_netmaskbits(network_spec_json): function get_admin_uncorrelated_node_start_ip (line 156) | def get_admin_uncorrelated_node_start_ip(network_spec_json): function get_admin_nic_name (line 176) | def get_admin_nic_name(network_spec_json): function get_bmc_nic_name (line 194) | def get_bmc_nic_name(network_spec_json): function get_primary_oim_admin_ip (line 212) | def get_primary_oim_admin_ip(network_spec_json): function is_service_tag_present (line 230) | def is_service_tag_present(service_tags_list, input_service_tag): function validate_service_tag_presence (line 244) | def validate_service_tag_presence( function validate_vip_address (line 287) | def validate_vip_address( function validate_service_k8s_cluster_ha (line 362) | def validate_service_k8s_cluster_ha( function load_network_spec (line 435) | def load_network_spec(input_file_path): function validate_ha_config (line 460) | def validate_ha_config(ha_data, mandatory_fields, errors, config_type, function validate_high_availability_config (line 492) | def validate_high_availability_config( FILE: common/library/module_utils/input_validation/validation_flows/local_repo_validation.py function check_subscription_status (line 31) | def check_subscription_status(logger=None): function validate_local_repo_config (line 106) | def validate_local_repo_config(input_file_path, data, FILE: common/library/module_utils/input_validation/validation_flows/provision_validation.py function validate_functional_groups_separation (line 47) | def validate_functional_groups_separation(pxe_mapping_file_path): function validate_slurm_login_compiler_prefix (line 94) | def validate_slurm_login_compiler_prefix(pxe_mapping_file_path): function validate_duplicate_hostnames_in_mapping_file (line 153) | def validate_duplicate_hostnames_in_mapping_file(pxe_mapping_file_path): function validate_duplicate_service_tags_in_mapping_file (line 189) | def validate_duplicate_service_tags_in_mapping_file(pxe_mapping_file_path): function validate_duplicate_admin_ips_in_mapping_file (line 228) | def validate_duplicate_admin_ips_in_mapping_file(pxe_mapping_file_path): function validate_group_parent_service_tag_consistency_in_mapping_file (line 274) | def validate_group_parent_service_tag_consistency_in_mapping_file(pxe_ma... function validate_mapping_file_entries (line 320) | def validate_mapping_file_entries(mapping_file_path): function validate_functional_groups_in_mapping_file (line 427) | def validate_functional_groups_in_mapping_file(pxe_mapping_file_path): function validate_parent_service_tag_hierarchy (line 480) | def validate_parent_service_tag_hierarchy(pxe_mapping_file_path): function validate_admin_ips_against_network_spec (line 548) | def validate_admin_ips_against_network_spec(pxe_mapping_file_path, netwo... function validate_aarch64_local_path_compatibility (line 736) | def validate_aarch64_local_path_compatibility(pxe_mapping_file_path): function validate_provision_config (line 790) | def validate_provision_config( function validate_network_spec (line 902) | def validate_network_spec( function _validate_admin_network (line 981) | def _validate_admin_network(network): function validate_admin_bmc_ip_not_same (line 1070) | def validate_admin_bmc_ip_not_same(primary_oim_admin_ip, primary_oim_bmc... function validate_admin_bmc_ip_valid (line 1085) | def validate_admin_bmc_ip_valid(primary_oim_admin_ip, primary_oim_bmc_ip): function validate_admin_bmc_ip_not_in_dynamic_range (line 1108) | def validate_admin_bmc_ip_not_in_dynamic_range( function _validate_ip_ranges (line 1139) | def _validate_ip_ranges(dynamic_range, network_type, netmask_bits): FILE: common/library/module_utils/input_validation/validation_flows/scheduler_validation.py function validate_k8s_parameters (line 22) | def validate_k8s_parameters( FILE: common/library/module_utils/local_repo/common_functions.py function load_yaml_file (line 25) | def load_yaml_file(path): function get_repo_list (line 43) | def get_repo_list(config_file, repo_key): function is_file_exists (line 56) | def is_file_exists(file_path): function is_encrypted (line 68) | def is_encrypted(file_path): function run_vault_command (line 82) | def run_vault_command(command, file_path, vault_key): function process_file (line 103) | def process_file(file_path, vault_key, mode): function load_pulp_config (line 147) | def load_pulp_config(path): function generate_vault_key (line 176) | def generate_vault_key(key_path): function get_arch_from_sw_config (line 203) | def get_arch_from_sw_config(software_name, sw_config_data): function get_arch_from_functional_groups_config (line 230) | def get_arch_from_functional_groups_config(software_name, functional_gro... FILE: common/library/module_utils/local_repo/container_repo_utils.py function create_container_repository (line 32) | def create_container_repository(repo_name,logger): function extract_existing_tags (line 55) | def extract_existing_tags(remote_name, logger): function create_container_distribution (line 82) | def create_container_distribution(repo_name,package_content,logger): function sync_container_repository (line 108) | def sync_container_repository(repo_name, remote_name, package_content, l... FILE: common/library/module_utils/local_repo/download_common.py function download_file_distribution (line 52) | def download_file_distribution(distribution_name, dl_directory, relative... function wait_for_task (line 161) | def wait_for_task(task_href, base_url, username, password, logger, timeo... function handle_file_upload (line 204) | def handle_file_upload(repository_name, relative_path, file_url, timeout... function handle_post_request (line 276) | def handle_post_request(repository_name, relative_path, base_path, file_... function process_file (line 313) | def process_file(repository_name, output_file, relative_path, function process_file_without_download (line 388) | def process_file_without_download(repository_name, output_file, relative... function process_manifest (line 454) | def process_manifest(file,repo_store_path, status_file_path, cluster_os_... function process_git (line 502) | def process_git(file,repo_store_path, status_file_path, cluster_os_type,... function process_shell (line 577) | def process_shell(file,repo_store_path, status_file_path, cluster_os_ty... function process_ansible_galaxy_collection (line 623) | def process_ansible_galaxy_collection(file, repo_store_path, status_file... function process_tarball (line 716) | def process_tarball(package, repo_store_path, status_file_path, version_... function process_iso (line 821) | def process_iso(package, repo_store_path, status_file_path, function process_pip (line 927) | def process_pip(package, repo_store_path, status_file_path, cluster_os_... function process_rpm_file (line 1029) | def process_rpm_file(package, repo_store_path, status_file_path, cluster... FILE: common/library/module_utils/local_repo/download_image.py function create_container_remote_with_auth (line 42) | def create_container_remote_with_auth(remote_name, remote_url, package, ... function create_container_remote (line 107) | def create_container_remote(remote_name, remote_url, package, policy_typ... function create_container_remote_digest (line 169) | def create_container_remote_digest(remote_name, remote_url, package, pol... function get_repo_url_and_content (line 198) | def get_repo_url_and_content(package): function process_image (line 265) | def process_image(package, status_file_path, version_variables, FILE: common/library/module_utils/local_repo/download_rpm.py function process_rpm (line 31) | def process_rpm(package, repo_store_path, status_file_path, cluster_os_t... FILE: common/library/module_utils/local_repo/parse_and_download.py function mask_sensitive_data (line 30) | def mask_sensitive_data(cmd_string): function execute_command (line 39) | def execute_command(cmd_string, logger, type_json=False): function get_arch_from_status_path (line 102) | def get_arch_from_status_path(status_file_path): function _prefix_repo_name_with_arch (line 116) | def _prefix_repo_name_with_arch(repo_name: str, status_file_path: str, l... function _update_existing_line (line 138) | def _update_existing_line(line: str, package_name: str, package_type: st... function write_status_to_file (line 164) | def write_status_to_file(status_file_path, package_name, package_type, s... function _update_existing_file (line 199) | def _update_existing_file(status_file_path, package_name, package_type, ... function _create_new_file (line 226) | def _create_new_file(status_file_path, package_name, package_type, statu... FILE: common/library/module_utils/local_repo/process_metadata.py function load_yaml (line 26) | def load_yaml(path): function write_yaml (line 38) | def write_yaml(path, data): function load_config (line 48) | def load_config(config_path: str) -> dict: function generate_policy_dict (line 59) | def generate_policy_dict(repo_list, default_policy): function update_metadata_file (line 73) | def update_metadata_file(file_path: str, repo_src_name: str, new_policy:... function append_metadata_footer (line 89) | def append_metadata_footer(output_file: str, repo_mode: str): function deep_update (line 102) | def deep_update(orig_dict, new_dict): function get_diff (line 121) | def get_diff(base, other): function get_os_type (line 146) | def get_os_type(config): function handle_generate_metadata (line 170) | def handle_generate_metadata(sw_config,repo_data,output_file,sub_urls=No... function handle_compare_data (line 236) | def handle_compare_data(original_file,updated_file,ignore_keys): function handle_update_data (line 272) | def handle_update_data(original_file,updated_file,ignore_keys): FILE: common/library/module_utils/local_repo/process_parallel.py function load_docker_credentials (line 43) | def load_docker_credentials(vault_yml_path, vault_password_file): function log_table_output (line 132) | def log_table_output(table_output, log_file): function setup_logger (line 152) | def setup_logger(log_dir,log_file_path): function execute_task (line 176) | def execute_task(task, determine_function, user_data, version_variables,... function worker_process (line 266) | def worker_process(task, determine_function, user_data, version_variable... function execute_parallel (line 318) | def execute_parallel( FILE: common/library/module_utils/local_repo/registry_utils.py function is_https (line 21) | def is_https(host, timeout=1): function validate_user_registry (line 74) | def validate_user_registry(user_registry): function tcp_ping (line 138) | def tcp_ping(host, timeout=1): function check_reachability (line 161) | def check_reachability(user_registry, timeout=1): function find_invalid_cert_paths (line 180) | def find_invalid_cert_paths(user_registry): FILE: common/library/module_utils/local_repo/rest_client.py class RestClient (line 21) | class RestClient: method __init__ (line 32) | def __init__(self, base_url, username, password): method get_connection (line 43) | def get_connection(self): method post (line 61) | def post(self, uri, data): method get (line 84) | def get(self, uri): method raw_get (line 106) | def raw_get(self, uri): FILE: common/library/module_utils/local_repo/software_utils.py function load_json (line 49) | def load_json(file_path): function load_yaml (line 72) | def load_yaml(file_path): function get_json_file_path (line 89) | def get_json_file_path(software_name, cluster_os_type, function get_csv_file_path (line 112) | def get_csv_file_path(software_name, user_csv_dir, arch): function is_remote_url_reachable (line 132) | def is_remote_url_reachable(remote_url, timeout=10, function transform_package_dict (line 164) | def transform_package_dict(data, arch_val,logger): function resolve_pulp_policy (line 217) | def resolve_pulp_policy(policy_str, caching_val, logger=None): function parse_repo_urls (line 244) | def parse_repo_urls(repo_config, local_repo_config_path, function set_version_variables (line 459) | def set_version_variables(user_data, software_names, cluster_os_version,... function get_subgroup_dict (line 492) | def get_subgroup_dict(user_data,logger): function get_csv_software (line 515) | def get_csv_software(file_name): function get_failed_software (line 538) | def get_failed_software(file_path): function _sanitize_shell_arg (line 562) | def _sanitize_shell_arg(value, logger, field_name="value"): function check_additional_image_in_pulp (line 593) | def check_additional_image_in_pulp(image_entry, logger): function parse_json_data (line 673) | def parse_json_data(file_path, package_types,logger, failed_list=None, s... function check_csv_existence (line 738) | def check_csv_existence(path): function read_status_csv (line 751) | def read_status_csv(csv_path): function get_new_packages_not_in_status (line 757) | def get_new_packages_not_in_status(json_path, csv_path, subgroup_list,lo... function process_software (line 814) | def process_software(software, fresh_installation, json_path, csv_path, ... function get_software_names (line 867) | def get_software_names(json_file_path): function get_software_names_and_arch (line 874) | def get_software_names_and_arch(json_data, arch): function remove_duplicates_from_trans (line 887) | def remove_duplicates_from_trans(trans): function parse_additional_repos (line 943) | def parse_additional_repos(local_repo_config_path, repo_config, vault_ke... function validate_additional_repos_names (line 1034) | def validate_additional_repos_names(local_repo_config_path, logger): FILE: common/library/module_utils/local_repo/standard_logger.py function setup_standard_logger (line 25) | def setup_standard_logger(log_dir, log_filename="standard.log"): FILE: common/library/module_utils/local_repo/user_image_utility.py function check_image_in_registry (line 33) | def check_image_in_registry( function create_user_remote_container (line 114) | def create_user_remote_container( function process_user_registry (line 271) | def process_user_registry( function handle_user_image_registry (line 348) | def handle_user_image_registry(package, package_content, version_variabl... FILE: common/library/module_utils/local_repo/validate_utils.py function get_pem_files (line 22) | def get_pem_files(repo_cert_path): function validate_repo_certificates (line 36) | def validate_repo_certificates(repo_list, certs_path): function validate_certificates (line 88) | def validate_certificates(local_repo_config_path, certs_path, repo_key="... FILE: common/library/modules/additional_images_collector.py function extract_images_from_cluster (line 31) | def extract_images_from_cluster(cluster_items): function collect_additional_images (line 65) | def collect_additional_images(additional_json_path, software_config, mod... function run_module (line 124) | def run_module(): function main (line 158) | def main(): FILE: common/library/modules/base_image_package_collector.py function collect_default_packages (line 31) | def collect_default_packages(json_path, module): function collect_additional_global_packages (line 51) | def collect_additional_global_packages(json_path, module): function collect_admin_debug_packages (line 73) | def collect_admin_debug_packages(json_path, module): function run_module (line 93) | def run_module(): function main (line 148) | def main(): FILE: common/library/modules/cert_vault_handler.py function extract_repos_with_certs (line 28) | def extract_repos_with_certs(repo_entries, log): function main (line 53) | def main(): FILE: common/library/modules/check_user_registry.py function main (line 35) | def main(): FILE: common/library/modules/delete_idracips_from_mysqldb.py function load_kube_context (line 27) | def load_kube_context(): function run_mysql_query_in_pod (line 35) | def run_mysql_query_in_pod(namespace, pod, container, mysql_user, mysql_... function delete_idrac_from_mysql (line 108) | def delete_idrac_from_mysql( function main (line 167) | def main(): FILE: common/library/modules/disable_idrac_telemetry.py function disable_telemetry_on_idrac (line 27) | def disable_telemetry_on_idrac(idrac_ip, username, password, timeout=30): function main (line 127) | def main(): FILE: common/library/modules/enable_telemetry_service.py function get_report_definitions (line 53) | def get_report_definitions( function enable_report (line 80) | def enable_report( function enable_reports_parallel (line 105) | def enable_reports_parallel( function configure_server (line 138) | def configure_server( function run_parallel (line 215) | def run_parallel( function main (line 247) | def main(): FILE: common/library/modules/fetch_credential_rule.py function load_rules (line 25) | def load_rules(file_path): function fetch_rule (line 30) | def fetch_rule(field, rules): function main (line 38) | def main(): FILE: common/library/modules/fetch_idrac_ips.py function fetch_pod_to_idracips (line 30) | def fetch_pod_to_idracips(service_cluster_metadata, parent_to_bmc_ip_det... function main (line 66) | def main(): FILE: common/library/modules/fetch_mapping_details.py function fetch_mapping_details (line 20) | def fetch_mapping_details(groups_roles_info, csv_data): function main (line 67) | def main(): FILE: common/library/modules/fetch_roles_config.py function validate_roles (line 30) | def validate_roles(roles, layer, module, management_layer_roles=MANAGEME... function check_switch_required (line 103) | def check_switch_required(group_data, layer): function check_bmc_required (line 113) | def check_bmc_required(group_data): function filter_roles (line 121) | def filter_roles(roles_data, layer): function roles_groups_mapping (line 134) | def roles_groups_mapping(groups_data, roles_data, layer): function main (line 191) | def main(): FILE: common/library/modules/fetch_software_arch.py function main (line 29) | def main(): FILE: common/library/modules/fetch_telemetry_status.py function load_yaml (line 22) | def load_yaml(path): function main (line 40) | def main(): FILE: common/library/modules/functional_group_parser.py function normalize_functional_groups (line 7) | def normalize_functional_groups(data): function get_functional_groups (line 39) | def get_functional_groups(config_path): function main (line 45) | def main(): FILE: common/library/modules/generate_argon2_password.py function generate_argon2_hash (line 35) | def generate_argon2_hash(password): function main (line 52) | def main(): FILE: common/library/modules/generate_functional_groups.py function load_omnia_config (line 25) | def load_omnia_config(omnia_config_path, module): function parse_csv (line 56) | def parse_csv(filename, module): function build_yaml (line 92) | def build_yaml(new_groups, new_func_groups, kube_cluster_name, slurm_clu... function dump_yaml_with_comments (line 131) | def dump_yaml_with_comments(data, filename): function main (line 157) | def main(): FILE: common/library/modules/generate_ssha_password.py function generate_ssha (line 31) | def generate_ssha(password): function get_hash (line 46) | def get_hash(passwd): function main (line 59) | def main(): FILE: common/library/modules/generate_xname_in_mapping_file.py function generate_xname_in_mapping_file (line 21) | def generate_xname_in_mapping_file(mapping_file_path, module): function main (line 61) | def main(): FILE: common/library/modules/get_service_cluster_info.py function load_functional_groups_yaml (line 24) | def load_functional_groups_yaml(path, module): function get_service_cluster_node_details (line 33) | def get_service_cluster_node_details(nodes_info): function check_service_cluster_node_details (line 58) | def check_service_cluster_node_details(group, parent, service_cluster_no... function get_service_cluster_data (line 71) | def get_service_cluster_data(groups_info, service_cluster_node_details, ... function main (line 120) | def main(): FILE: common/library/modules/group_package_map.py function read_json_file (line 30) | def read_json_file(file_path, module): function read_functional_groups_config (line 52) | def read_functional_groups_config(file_path, module): function careful_merge (line 75) | def careful_merge(split_dict, split_key, value): function split_comma_keys (line 98) | def split_comma_keys(input_dict): function get_type_dict (line 116) | def get_type_dict(clust_list): function modify_addl_software (line 160) | def modify_addl_software(addl_dict): function main (line 179) | def main(): FILE: common/library/modules/idrac_telemetry_filter.py function get_bmc_license_info (line 29) | def get_bmc_license_info(bmc_ip, username, password, module): function get_bmc_firmware_info (line 92) | def get_bmc_firmware_info(bmc_ip, username, password, module, min_firmwa... function main (line 140) | def main(): FILE: common/library/modules/image_package_collector.py function get_additional_packages_for_role (line 29) | def get_additional_packages_for_role(additional_json_path, role_name, mo... function normalize_functional_groups (line 58) | def normalize_functional_groups(raw_fgs, module): function collect_packages_from_json (line 88) | def collect_packages_from_json(sw_data, fg_name=None, function process_functional_group (line 137) | def process_functional_group(fg_name, arch, os_version, input_project_dir, function run_module (line 186) | def run_module(): function main (line 290) | def main(): FILE: common/library/modules/insert_idracips_mysqldb.py function load_kube_context (line 28) | def load_kube_context(): function escape_single_quotes (line 35) | def escape_single_quotes(s): function run_mysql_insert (line 39) | def run_mysql_insert( function insert_idracs_to_mysql (line 114) | def insert_idracs_to_mysql( function main (line 169) | def main(): FILE: common/library/modules/localrepo_metadata_manager.py function main (line 39) | def main(): FILE: common/library/modules/parallel_file_copy.py function copy_single_file (line 46) | def copy_single_file(src_file, dest_dir, retry_count, delete_existing, s... function execute_parallel_copy (line 85) | def execute_parallel_copy(module, copy_pairs, max_workers, retry_count, ... function main (line 130) | def main(): FILE: common/library/modules/parallel_tasks.py function update_status_csv (line 63) | def update_status_csv(csv_dir, software, overall_status,slogger): function determine_function (line 130) | def determine_function( function generate_pretty_table (line 223) | def generate_pretty_table(task_results, total_duration, overall_status,s... function generate_software_status_table (line 258) | def generate_software_status_table(status_dict,slogger): function main (line 301) | def main(): FILE: common/library/modules/prepare_tasklist.py function main (line 52) | def main(): FILE: common/library/modules/process_rpm_config.py function validate_command_input (line 39) | def validate_command_input(value): function validate_pulp_href (line 65) | def validate_pulp_href(href): function execute_command (line 105) | def execute_command(cmd_string, log,type_json=None, seconds=None): function check_repository_synced (line 137) | def check_repository_synced(repo_name, log): function create_rpm_repository (line 170) | def create_rpm_repository(repo,log): function show_rpm_repository (line 201) | def show_rpm_repository(repo_name,log): function create_rpm_remote (line 224) | def create_rpm_remote(repo,log): function show_rpm_remote (line 280) | def show_rpm_remote(remote_name,log): function sync_rpm_repository (line 305) | def sync_rpm_repository(repo,log, resync_repos=None): function should_process_repo (line 386) | def should_process_repo(repo_name, resync_repos, log): function get_repo_version (line 414) | def get_repo_version(repo_name, log): function check_publication_exists (line 448) | def check_publication_exists(repo_name, log): function check_distribution_exists (line 469) | def check_distribution_exists(repo_name, log): function delete_old_publications (line 490) | def delete_old_publications(repo_name, log): function create_publication (line 547) | def create_publication(repo,log, resync_repos=None): function create_distribution (line 617) | def create_distribution(repo, log, resync_repos=None, cluster_os_version... function get_base_urls (line 663) | def get_base_urls(log): function create_yum_repo_file (line 699) | def create_yum_repo_file(distributions, log): function validate_resync_repos (line 752) | def validate_resync_repos(resync_repos, rpm_config, log): function process_sync_results (line 795) | def process_sync_results(sync_results, rpm_config, resync_repos, log): function delete_aggregated_repo (line 929) | def delete_aggregated_repo(arch, log): function create_aggregated_repository (line 958) | def create_aggregated_repository(arch, log): function create_aggregated_remote (line 986) | def create_aggregated_remote(repo_entry, arch, log): function sync_aggregated_repository (line 1037) | def sync_aggregated_repository(repo_name, remote_name, log): function create_aggregated_publication (line 1062) | def create_aggregated_publication(repo_name, log): function create_aggregated_distribution (line 1120) | def create_aggregated_distribution(arch, pub_href, log, cluster_os_versi... function manage_aggregated_repos (line 1178) | def manage_aggregated_repos(additional_repos_config, log, cluster_os_ver... function manage_rpm_repositories_multiprocess (line 1253) | def manage_rpm_repositories_multiprocess(rpm_config, log, sw_archs=None,... function main (line 1402) | def main(): FILE: common/library/modules/pulp_cleanup.py function format_pretty_table (line 53) | def format_pretty_table(results: List[Dict[str, Any]]) -> str: function run_cmd (line 92) | def run_cmd(cmd: str, logger) -> Dict[str, Any]: function safe_json_parse (line 102) | def safe_json_parse(data: str, default: Any = None) -> Any: function validate_container_format (line 122) | def validate_container_format(image_name: str) -> Tuple[bool, str]: function convert_to_pulp_container_name (line 154) | def convert_to_pulp_container_name(image_name: str) -> str: function detect_file_type (line 171) | def detect_file_type(name: str, base_path: str = "/opt/omnia/offline_rep... function repo_exists (line 210) | def repo_exists(name: str, logger) -> bool: function container_exists (line 217) | def container_exists(name: str, logger) -> bool: function file_exists_in_status (line 224) | def file_exists_in_status(name: str, base_path: str, logger) -> bool: function _list_pulp_repos (line 236) | def _list_pulp_repos(cmd: str, label: str, logger) -> List[str]: function get_all_repositories (line 246) | def get_all_repositories(logger) -> List[str]: function get_all_containers (line 251) | def get_all_containers(logger) -> List[str]: function get_all_file_repositories (line 256) | def get_all_file_repositories(logger) -> List[str]: function get_all_python_repositories (line 261) | def get_all_python_repositories(logger) -> List[str]: function cleanup_repository (line 270) | def cleanup_repository(name: str, base_path: str, logger) -> Dict[str, A... function cleanup_container (line 317) | def cleanup_container(user_input: str, base_path: str, logger) -> Dict[s... function cleanup_pip_module (line 412) | def cleanup_pip_module(name: str, base_path: str, repo_store_path: str, ... function get_pulp_file_repo_name (line 510) | def get_pulp_file_repo_name(name: str, file_type: str) -> str: function cleanup_file_repository (line 524) | def cleanup_file_repository(name: str, file_type: str, base_path: str, r... function parse_pulp_file_repo_name (line 625) | def parse_pulp_file_repo_name(repo_name: str) -> Tuple[str, str, str]: function cleanup_file (line 665) | def cleanup_file(name: str, base_path: str, repo_store_path: str, logger... function cleanup_content_directory (line 703) | def cleanup_content_directory(content_name: str, content_type: str, repo... function cleanup_all_file_content_directories (line 774) | def cleanup_all_file_content_directories(repo_store_path: str, logger) -... function remove_rpms_from_repository (line 843) | def remove_rpms_from_repository(repo_name: str, base_path: str, logger) ... function remove_from_status_files (line 915) | def remove_from_status_files(artifact_name: str, artifact_type: str, bas... function mark_software_partial (line 978) | def mark_software_partial(affected_software, base_path: str, logger, art... function software_has_type (line 1029) | def software_has_type(software_name: str, arch: str, base_path: str, log... function mark_all_software_partial_by_type (line 1054) | def mark_all_software_partial_by_type(base_path: str, logger, type_value... function remove_all_from_status_files (line 1097) | def remove_all_from_status_files(artifact_type: str, base_path: str, log... function write_cleanup_status (line 1149) | def write_cleanup_status(results: List[Dict], base_path: str): function update_metadata_after_cleanup (line 1162) | def update_metadata_after_cleanup(cleaned_repos: List[str], metadata_fil... function remove_repos_from_pulp_repo_file (line 1250) | def remove_repos_from_pulp_repo_file(cleaned_repos: List[str], pulp_repo... function run_module (line 1323) | def run_module(): FILE: common/library/modules/read_idracips_from_mysqldb.py function load_kube_context (line 24) | def load_kube_context(): function run_mysql_query_in_pod (line 33) | def run_mysql_query_in_pod(namespace, pod, container, mysql_user, mysql_... function main (line 94) | def main(): FILE: common/library/modules/slurm_conf.py function read_dict2ini (line 146) | def read_dict2ini(conf_dict): function slurm_conf_dict_merge (line 164) | def slurm_conf_dict_merge(conf_dict_list, conf_name, replace): function run_module (line 210) | def run_module(): FILE: common/library/modules/update_bmc_group_entry.py function is_bmc_reachable_or_auth (line 32) | def is_bmc_reachable_or_auth(ip, username, password, module): function read_entries_csv (line 71) | def read_entries_csv(csv_path, module): function write_entries_csv (line 103) | def write_entries_csv(csv_path, entries): function delete_bmc_entries (line 113) | def delete_bmc_entries(nodes, existing_entries, result): function add_bmc_entries (line 124) | def add_bmc_entries(nodes, existing_entries, bmc_creds, module, result): function verify_bmc_entries (line 152) | def verify_bmc_entries(nodes, bmc_creds, module, result): function main (line 173) | def main(): FILE: common/library/modules/validate_bmc_group_data.py function is_valid_ip (line 24) | def is_valid_ip(ip): function validate_bmc_group_data (line 34) | def validate_bmc_group_data(bmc_group_data, bmc_group_data_headers, bmc_... function main (line 97) | def main(): FILE: common/library/modules/validate_credentials.py function load_rules (line 28) | def load_rules(file_path): function validate_input (line 33) | def validate_input(field, value, rules): function main (line 44) | def main(): FILE: common/library/modules/validate_input.py function createlogger (line 40) | def createlogger(project_name, tag_name=None): function main (line 66) | def main(): FILE: common/library/modules/validate_user_repo.py function main (line 22) | def main(): FILE: discovery/roles/telemetry/files/nersc-ldms-aggr/make_host_map.dell.py function setup_logging (line 17) | def setup_logging(verbose=False): function load_config (line 22) | def load_config(config_path): class LdmsdManager (line 30) | class LdmsdManager: method __init__ (line 33) | def __init__(self, config=None): method main (line 38) | def main(self): function main (line 52) | def main(): FILE: discovery/roles/telemetry/files/nersc-ldms-aggr/mkmanifest.py class Error (line 15) | class Error(Exception): class NoMachineNameException (line 19) | class NoMachineNameException(Error): class NoScratchPathException (line 22) | class NoScratchPathException(Error): class NoManifestTemplateException (line 25) | class NoManifestTemplateException(Error): class FailedManifestCreateException (line 28) | class FailedManifestCreateException(Error): class NoIPException (line 31) | class NoIPException(Error): function remove_prefix (line 35) | def remove_prefix(input_string, prefix): function remove_suffix (line 41) | def remove_suffix(input_string, suffix): function safe_get (line 47) | def safe_get(dic, keys, default=None): function load_yaml_file (line 57) | def load_yaml_file(path, required=True): function load_json_file (line 69) | def load_json_file(path, required=True): function harvest_cluster_info (line 81) | def harvest_cluster_info(cluster_file): function harvest_network_vars (line 93) | def harvest_network_vars(vars_file): function harvest_replica_info (line 126) | def harvest_replica_info(map_file): function harvest_sys_config (line 162) | def harvest_sys_config(sys_conf_path): function update_manifest (line 205) | def update_manifest(manifest, aggs, store_stateful_replicas, replicas_ex... function write_yaml_file (line 303) | def write_yaml_file(path, data, description=None): function main (line 314) | def main(): # pylint: disable=too-many-locals FILE: discovery/roles/telemetry/files/nersc-ldms-aggr/nersc_ldms_make_ldms_config.py function setup_logging (line 15) | def setup_logging(verbose_mode=False): function load_config (line 20) | def load_config(config_path): function str_presenter (line 27) | def str_presenter(dumper, data): class LdmsdManager (line 33) | class LdmsdManager: # pylint: disable=too-many-instance-attributes method __init__ (line 36) | def __init__(self, config=None): method main (line 55) | def main(self): method make_munge_configs (line 72) | def make_munge_configs(self): method make_agg_configs (line 105) | def make_agg_configs(self): # pylint: disable=too-many-locals method make_store_configs (line 174) | def make_store_configs(self): # pylint: disable=too-many-locals method create_env_json (line 380) | def create_env_json(self): method create_env_yaml (line 386) | def create_env_yaml(self): method create_ldms_env (line 395) | def create_ldms_env(self, out_file, data): method asseble_configmap_data (line 401) | def asseble_configmap_data(self, files_list): method create_configmaps (line 411) | def create_configmaps(self): method copy_configmaps_to_helm (line 437) | def copy_configmaps_to_helm(self): method create_configmap_yaml (line 444) | def create_configmap_yaml(self, name, namespace, data, out_filename): method split_list (line 461) | def split_list(self, input_list, group_size): method make_config_agg (line 466) | def make_config_agg(self, ldmsd_conf, nodes, out_file): method make_config_store (line 524) | def make_config_store(self, ldmsd_name, ldmsd_agg_name, ldmsd_agg_port... method make_config_stream2 (line 570) | def make_config_stream2(self, out_file): # pylint: disable=too-many-l...