SYMBOL INDEX (1205 symbols across 77 files) FILE: devtools/debug_trace_deployment.py function main (line 20) | def main(): FILE: docs/config/pre-build/section_toc.py function slugify (line 8) | def slugify(title): function get_section_order (line 31) | def get_section_order(nav, current_dir_str): function on_page_markdown (line 52) | def on_page_markdown(markdown, page, config, files): FILE: docs/config/pre-build/update_item_types.py function on_page_markdown (line 10) | def on_page_markdown(markdown, **kwargs): FILE: docs/config/pre-build/update_python_version.py function on_page_markdown (line 9) | def on_page_markdown(markdown, **kwargs): FILE: sample/workspace/SampleUserDataFunction.UserDataFunction/function_app.py function hello_fabric (line 8) | def hello_fabric(name: str) -> str: FILE: src/fabric_cicd/__init__.py function append_feature_flag (line 22) | def append_feature_flag(feature: str) -> None: function change_log_level (line 37) | def change_log_level(level: str = "DEBUG") -> None: function configure_external_file_logging (line 56) | def configure_external_file_logging(external_logger: logging.Logger) -> ... function disable_file_logging (line 113) | def disable_file_logging() -> None: function configure_fabric_fqdn (line 136) | def configure_fabric_fqdn(workspace_id: str) -> None: FILE: src/fabric_cicd/_common/_check_utils.py function check_file_type (line 19) | def check_file_type(file_path: Path) -> str: function check_regex (line 40) | def check_regex(regex: str) -> re.Pattern: function check_valid_json_content (line 55) | def check_valid_json_content(content: str) -> bool: function check_valid_yaml_content (line 72) | def check_valid_yaml_content(content: str) -> bool: FILE: src/fabric_cicd/_common/_color.py class Fore (line 1) | class Fore: class Back (line 13) | class Back: class Style (line 25) | class Style: FILE: src/fabric_cicd/_common/_config_utils.py function load_config_file (line 17) | def load_config_file(config_file_path: str, environment: str, config_ove... function get_config_value (line 32) | def get_config_value(config_section: dict, key: str, environment: str) -... function update_setting (line 54) | def update_setting( function extract_workspace_settings (line 82) | def extract_workspace_settings(config: dict, environment: str) -> dict: function extract_publish_settings (line 107) | def extract_publish_settings(config: dict, environment: str) -> dict: function extract_unpublish_settings (line 131) | def extract_unpublish_settings(config: dict, environment: str) -> dict: function config_overrides_scope (line 153) | def config_overrides_scope(config: dict, environment: str) -> Generator[... FILE: src/fabric_cicd/_common/_config_validator.py class ConfigValidationError (line 20) | class ConfigValidationError(InputError): method __init__ (line 23) | def __init__(self, errors: list[str], logger_instance: logging.Logger)... class ConfigValidator (line 32) | class ConfigValidator: method __init__ (line 35) | def __init__(self) -> None: method validate_config_file (line 43) | def validate_config_file( method _validate_file_existence (line 93) | def _validate_file_existence(self, config_file_path: str) -> Path: method _validate_yaml_content (line 116) | def _validate_yaml_content(self, config_path: Optional[Path]) -> Optio... method _apply_and_validate_overrides (line 148) | def _apply_and_validate_overrides(self) -> None: method _valid_override_section (line 165) | def _valid_override_section(self, section: str, value: any) -> bool: method _merge_overrides (line 205) | def _merge_overrides(self, section: str, value: Union[dict, list]) -> ... method _validate_config_structure (line 281) | def _validate_config_structure(self) -> None: method _validate_config_sections (line 298) | def _validate_config_sections(self) -> None: method _validate_environment_exists (line 340) | def _validate_environment_exists(self) -> None: method _validate_environment_mapping (line 387) | def _validate_environment_mapping(self, field_value: dict, field_name:... method _validate_workspace_field (line 428) | def _validate_workspace_field(self, core: dict, field_name: str) -> bool: method _validate_workspace_value (line 461) | def _validate_workspace_value(self, value: str, field_name: str, conte... method _validate_repository_directory (line 468) | def _validate_repository_directory(self, core: dict) -> None: method _validate_item_types_in_scope (line 496) | def _validate_item_types_in_scope(self, core: dict[str, Any]) -> None: method _validate_item_types (line 527) | def _validate_item_types(self, item_types: list, env_context: Optional... method _validate_parameter_field (line 558) | def _validate_parameter_field(self, core: dict) -> None: method _resolve_path_field (line 580) | def _resolve_path_field( method _resolve_repository_path (line 672) | def _resolve_repository_path(self) -> None: method _resolve_parameter_path (line 678) | def _resolve_parameter_path(self) -> None: method _validate_operation_section (line 687) | def _validate_operation_section(self, section: dict[str, Any], section... method _validate_regex (line 890) | def _validate_regex(self, regex: str, section_name: str) -> None: method _validate_items_list (line 899) | def _validate_items_list(self, items_list: list, context: str) -> None: method _validate_folders_list (line 911) | def _validate_folders_list(self, folders_list: list, context: str) -> ... method _validate_mutually_exclusive_fields (line 927) | def _validate_mutually_exclusive_fields(self, section: dict, field1: s... method _validate_features_section (line 965) | def _validate_features_section(self, features: any) -> None: method _validate_features_list (line 989) | def _validate_features_list(self, features_list: list, context: str) -... method _validate_constants_section (line 1001) | def _validate_constants_section(self, constants_section: any) -> None: method _validate_single_constant (line 1040) | def _validate_single_constant(self, key: str, value: any, context: str... function _get_config_fields (line 1052) | def _get_config_fields(config: dict) -> list[tuple[dict, str, str, bool,... function _find_git_root (line 1085) | def _find_git_root(path: Path) -> Optional[Path]: function _validate_guid_format (line 1095) | def _validate_guid_format(guid: str) -> bool: FILE: src/fabric_cicd/_common/_deployment_result.py class DeploymentStatus (line 11) | class DeploymentStatus(str, Enum): class DeploymentResult (line 21) | class DeploymentResult: FILE: src/fabric_cicd/_common/_exceptions.py class BaseCustomError (line 10) | class BaseCustomError(Exception): method __init__ (line 11) | def __init__(self, message: str, logger: Logger, additional_info: Opti... class ParsingError (line 25) | class ParsingError(BaseCustomError): class InputError (line 29) | class InputError(BaseCustomError): class TokenError (line 33) | class TokenError(BaseCustomError): class InvokeError (line 37) | class InvokeError(BaseCustomError): class ItemDependencyError (line 41) | class ItemDependencyError(BaseCustomError): class FileTypeError (line 45) | class FileTypeError(BaseCustomError): class ParameterFileError (line 49) | class ParameterFileError(BaseCustomError): class FailedPublishedItemStatusError (line 53) | class FailedPublishedItemStatusError(BaseCustomError): class PublishError (line 57) | class PublishError(BaseCustomError): method __init__ (line 64) | def __init__(self, errors: list[tuple[str, Exception]], logger: Logger... FILE: src/fabric_cicd/_common/_fabric_endpoint.py class FabricEndpoint (line 26) | class FabricEndpoint: method __init__ (line 29) | def __init__( method invoke (line 51) | def invoke( method _refresh_token (line 150) | def _refresh_token(self) -> None: function _handle_response (line 173) | def _handle_response( function handle_retry (line 332) | def handle_retry( function _format_invoke_log (line 376) | def _format_invoke_log(response: requests.Response, method: str, url: st... FILE: src/fabric_cicd/_common/_file.py class File (line 19) | class File: method __setattr__ (line 28) | def __setattr__(self, key: str, value: any) -> None: method __post_init__ (line 46) | def __post_init__(self) -> None: method name (line 73) | def name(self) -> str: method relative_path (line 78) | def relative_path(self) -> str: method base64_payload (line 83) | def base64_payload(self) -> dict: FILE: src/fabric_cicd/_common/_file_lock.py class FileLock (line 14) | class FileLock: method __init__ (line 17) | def __init__(self, lock_file: str) -> None: method __enter__ (line 21) | def __enter__(self) -> "FileLock": method __exit__ (line 33) | def __exit__( method run_with_lock (line 52) | def run_with_lock(lock_file: str, func: Callable[[], T]) -> T: FILE: src/fabric_cicd/_common/_git_diff_utils.py function _find_platform_item (line 15) | def _find_platform_item(file_path: Path, repo_root: Path) -> Optional[tu... function _resolve_git_diff_path (line 46) | def _resolve_git_diff_path( function get_changed_items (line 98) | def get_changed_items( function _resolve_changed_items (line 141) | def _resolve_changed_items( FILE: src/fabric_cicd/_common/_http_tracer.py function _trace_default (line 26) | def _trace_default(obj: object) -> str: class HTTPRequest (line 41) | class HTTPRequest: method to_b64 (line 50) | def to_b64(self) -> str: method from_b64 (line 56) | def from_b64(cls, b64_str: str) -> "HTTPRequest": method get_unique_signature (line 62) | def get_unique_signature(self) -> str: method get_route_key (line 67) | def get_route_key(self) -> str: class HTTPResponse (line 80) | class HTTPResponse: method to_b64 (line 88) | def to_b64(self) -> str: method from_b64 (line 94) | def from_b64(cls, b64_str: str) -> "HTTPResponse": method get_unique_signature (line 100) | def get_unique_signature(self) -> str: class HTTPTracer (line 106) | class HTTPTracer(Protocol): method capture_request (line 109) | def capture_request(self, method: str, url: str, headers: dict, body: ... method capture_response (line 113) | def capture_response(self, response: requests.Response) -> None: method save (line 117) | def save(self) -> None: class NoOpTracer (line 122) | class NoOpTracer: method capture_request (line 125) | def capture_request(self, method: str, url: str, headers: dict, body: ... method capture_response (line 129) | def capture_response(self, response: requests.Response) -> None: method save (line 133) | def save(self) -> None: class FileTracer (line 138) | class FileTracer: method __init__ (line 141) | def __init__(self, output_file: Optional[str] = None) -> None: method capture_request (line 157) | def capture_request(self, method: str, url: str, headers: dict, body: ... method capture_response (line 178) | def capture_response(self, response: requests.Response) -> None: method save (line 205) | def save(self) -> None: method _flush_traces_to_file (line 215) | def _flush_traces_to_file(self) -> None: class HTTPTracerFactory (line 249) | class HTTPTracerFactory: method create (line 253) | def create() -> HTTPTracer: FILE: src/fabric_cicd/_common/_item.py class Item (line 15) | class Item: method __setattr__ (line 30) | def __setattr__(self, key: str, value: any) -> None: method relative_path (line 44) | def relative_path(self) -> str: method collect_item_files (line 48) | def collect_item_files(self) -> None: FILE: src/fabric_cicd/_common/_logging.py class CustomFormatter (line 21) | class CustomFormatter(logging.Formatter): method format (line 30) | def format(self, record: LogRecord) -> str: class PackageFilter (line 62) | class PackageFilter(logging.Filter): method __init__ (line 70) | def __init__(self, debug_only: bool = False) -> None: method filter (line 74) | def filter(self, record: LogRecord) -> bool: function _cleanup_external_handler_filters (line 89) | def _cleanup_external_handler_filters(root_logger: logging.Logger) -> None: function _cleanup_managed_handlers (line 103) | def _cleanup_managed_handlers(*loggers: logging.Logger) -> None: function _mark_handler (line 116) | def _mark_handler(handler: logging.Handler) -> logging.Handler: function _mark_external_handler (line 122) | def _mark_external_handler(handler: logging.Handler) -> logging.Handler: function _configure_default_file_handler (line 128) | def _configure_default_file_handler() -> logging.Handler: function _configure_external_file_handler (line 141) | def _configure_external_file_handler( function _configure_console_handler (line 166) | def _configure_console_handler(level: int) -> logging.StreamHandler: function _build_console_message (line 179) | def _build_console_message(exception: BaseException, file_handler: Optio... function _build_file_message (line 190) | def _build_file_message(exception: BaseException) -> str: function get_file_handler (line 201) | def get_file_handler( function configure_logger (line 230) | def configure_logger( function exception_handler (line 285) | def exception_handler(exception_type: type[BaseException], exception: Ba... function log_header (line 318) | def log_header(logger: logging.Logger, message: str) -> None: FILE: src/fabric_cicd/_common/_validate_env_vars.py function validate_api_url (line 27) | def validate_api_url(url: str, label: str) -> str: function validate_env_var_api_url (line 64) | def validate_env_var_api_url(env_var_name: str, default_value: str) -> str: function _get_fabric_fqdn_url (line 80) | def _get_fabric_fqdn_url(workspace_id: str) -> str: FILE: src/fabric_cicd/_common/_validate_input.py function validate_data_type (line 25) | def validate_data_type(expected_type: str, variable_name: str, input_val... function validate_item_type_in_scope (line 52) | def validate_item_type_in_scope(input_value: Optional[list]) -> list: function validate_repository_directory (line 75) | def validate_repository_directory(input_value: str) -> Path: function validate_workspace_id (line 98) | def validate_workspace_id(input_value: str) -> str: function validate_workspace_name (line 114) | def validate_workspace_name(input_value: str) -> str: function validate_environment (line 126) | def validate_environment(input_value: str) -> str: function validate_fabric_workspace_obj (line 138) | def validate_fabric_workspace_obj(input_value: FabricWorkspace) -> Fabri... function validate_token_credential (line 150) | def validate_token_credential(input_value: TokenCredential) -> TokenCred... function validate_experimental_param (line 162) | def validate_experimental_param( function validate_items_to_include (line 194) | def validate_items_to_include(items_to_include: Optional[list[str]], ope... function validate_folder_path_exclude_regex (line 213) | def validate_folder_path_exclude_regex(folder_path_exclude_regex: Option... function validate_folder_path_to_include (line 239) | def validate_folder_path_to_include(folder_path_to_include: Optional[lis... function validate_shortcut_exclude_regex (line 265) | def validate_shortcut_exclude_regex(shortcut_exclude_regex: Optional[str... function validate_git_compare_ref (line 283) | def validate_git_compare_ref(git_compare_ref: str) -> str: FILE: src/fabric_cicd/_items/_activator.py class ActivatorPublisher (line 10) | class ActivatorPublisher(ItemPublisher): FILE: src/fabric_cicd/_items/_apacheairflowjob.py class ApacheAirflowJobPublisher (line 10) | class ApacheAirflowJobPublisher(ItemPublisher): FILE: src/fabric_cicd/_items/_base_publisher.py class ParallelConfig (line 21) | class ParallelConfig: class Publisher (line 41) | class Publisher(ABC): method __init__ (line 44) | def __init__(self, fabric_workspace_obj: "FabricWorkspace") -> None: method publish_one (line 54) | def publish_one(self, name: str, obj: object) -> None: method publish_all (line 65) | def publish_all(self) -> None: class ItemPublisher (line 70) | class ItemPublisher(Publisher): method __init__ (line 117) | def __init__(self, fabric_workspace_obj: "FabricWorkspace") -> None: method create (line 127) | def create(item_type: ItemType, fabric_workspace_obj: "FabricWorkspace... method get_item_types_to_publish (line 207) | def get_item_types_to_publish(fabric_workspace_obj: "FabricWorkspace")... method get_item_types_to_unpublish (line 232) | def get_item_types_to_unpublish(fabric_workspace_obj: "FabricWorkspace... method get_orphaned_items (line 265) | def get_orphaned_items( method publish_all (line 305) | def publish_all(self) -> None: method publish_one (line 354) | def publish_one(self, item_name: str, _item: "Item") -> None: method get_items_to_publish (line 367) | def get_items_to_publish(self) -> dict[str, "Item"]: method get_unpublish_order (line 398) | def get_unpublish_order(self, items_to_unpublish: list[str]) -> list[s... method pre_publish_all (line 413) | def pre_publish_all(self) -> None: method post_publish_all (line 422) | def post_publish_all(self) -> None: method post_publish_all_check (line 431) | def post_publish_all_check(self) -> None: method _publish_items_parallel (line 448) | def _publish_items_parallel(self, items: dict[str, "Item"]) -> list[tu... method _publish_items_sequential (line 477) | def _publish_items_sequential(self, items: dict[str, "Item"]) -> list[... method _publish_items_ordered (line 498) | def _publish_items_ordered(self, items: dict[str, "Item"], order: list... FILE: src/fabric_cicd/_items/_copyjob.py class CopyJobPublisher (line 10) | class CopyJobPublisher(ItemPublisher): FILE: src/fabric_cicd/_items/_dataagent.py class DataAgentPublisher (line 15) | class DataAgentPublisher(ItemPublisher): method publish_one (line 20) | def publish_one(self, item_name: str, _item: Item) -> None: FILE: src/fabric_cicd/_items/_databuildtooljob.py class DataBuildToolJobPublisher (line 10) | class DataBuildToolJobPublisher(ItemPublisher): FILE: src/fabric_cicd/_items/_dataflowgen2.py function set_dataflow_publish_order (line 25) | def set_dataflow_publish_order(workspace_obj: FabricWorkspace, item_type... function contains_source_dataflow (line 118) | def contains_source_dataflow(file_content: str) -> bool: function get_source_dataflow_ids (line 129) | def get_source_dataflow_ids(file_content: str, item_name: str) -> tuple[... function get_source_dataflow_name (line 156) | def get_source_dataflow_name( function func_process_file (line 196) | def func_process_file(workspace_obj: FabricWorkspace, item_obj: Item, fi... function replace_source_dataflow_ids (line 209) | def replace_source_dataflow_ids(workspace_obj: FabricWorkspace, item_obj... function _get_dataflow_publish_order (line 247) | def _get_dataflow_publish_order(publisher: "DataflowPublisher") -> list[... class DataflowPublisher (line 252) | class DataflowPublisher(ItemPublisher): method publish_one (line 260) | def publish_one(self, item_name: str, _item: Item) -> None: FILE: src/fabric_cicd/_items/_datapipeline.py function find_referenced_datapipelines (line 20) | def find_referenced_datapipelines(fabric_workspace_obj: FabricWorkspace,... function _get_datapipeline_publish_order (line 50) | def _get_datapipeline_publish_order(publisher: "DataPipelinePublisher") ... class DataPipelinePublisher (line 55) | class DataPipelinePublisher(ItemPublisher): method get_unpublish_order (line 64) | def get_unpublish_order(self, items_to_unpublish: list[str]) -> list[s... method publish_one (line 78) | def publish_one(self, item_name: str, _item: Item) -> None: method pre_publish_all (line 82) | def pre_publish_all(self) -> None: FILE: src/fabric_cicd/_items/_environment.py function _process_environment_file (line 23) | def _process_environment_file( function _replace_instance_pool_id (line 63) | def _replace_instance_pool_id(fabric_workspace_obj: FabricWorkspace, yam... function _resolve_pool_id (line 109) | def _resolve_pool_id(pools: list[dict], pool_name: str, pool_type: str) ... function _check_environment_publish_state (line 136) | def _check_environment_publish_state(fabric_workspace_obj: FabricWorkspa... function _submit_environment_publish (line 206) | def _submit_environment_publish(fabric_workspace_obj: FabricWorkspace, i... class EnvironmentPublisher (line 231) | class EnvironmentPublisher(ItemPublisher): method publish_one (line 237) | def publish_one(self, item_name: str, item: Item) -> None: method pre_publish_all (line 249) | def pre_publish_all(self) -> None: method post_publish_all_check (line 253) | def post_publish_all_check(self) -> None: FILE: src/fabric_cicd/_items/_eventhouse.py class EventhousePublisher (line 15) | class EventhousePublisher(ItemPublisher): method publish_one (line 20) | def publish_one(self, item_name: str, _item: Item) -> None: FILE: src/fabric_cicd/_items/_eventstream.py class EventstreamPublisher (line 10) | class EventstreamPublisher(ItemPublisher): FILE: src/fabric_cicd/_items/_graphqlapi.py class GraphQLApiPublisher (line 10) | class GraphQLApiPublisher(ItemPublisher): FILE: src/fabric_cicd/_items/_kqldashboard.py function func_process_file (line 19) | def func_process_file(workspace_obj: FabricWorkspace, item_obj: Item, fi... function replace_cluster_uri (line 36) | def replace_cluster_uri(fabric_workspace_obj: FabricWorkspace, file_obj:... class KQLDashboardPublisher (line 82) | class KQLDashboardPublisher(ItemPublisher): method publish_one (line 87) | def publish_one(self, item_name: str, _item: Item) -> None: method pre_publish_all (line 93) | def pre_publish_all(self) -> None: FILE: src/fabric_cicd/_items/_kqldatabase.py class KQLDatabasePublisher (line 10) | class KQLDatabasePublisher(ItemPublisher): FILE: src/fabric_cicd/_items/_kqlqueryset.py function func_process_file (line 19) | def func_process_file(workspace_obj: FabricWorkspace, item_obj: Item, fi... function replace_cluster_uri (line 35) | def replace_cluster_uri(fabric_workspace_obj: FabricWorkspace, file_obj:... class KQLQuerysetPublisher (line 91) | class KQLQuerysetPublisher(ItemPublisher): method publish_one (line 96) | def publish_one(self, item_name: str, _item: Item) -> None: method pre_publish_all (line 102) | def pre_publish_all(self) -> None: FILE: src/fabric_cicd/_items/_lakehouse.py function check_sqlendpoint_provision_status (line 21) | def check_sqlendpoint_provision_status(fabric_workspace_obj: FabricWorks... function list_deployed_shortcuts (line 60) | def list_deployed_shortcuts(fabric_workspace_obj: FabricWorkspace, item_... function replace_default_lakehouse_id (line 84) | def replace_default_lakehouse_id(shortcut: dict, item_obj: Item) -> dict: class LakehousePublisher (line 99) | class LakehousePublisher(ItemPublisher): method publish_one (line 104) | def publish_one(self, item_name: str, item: Item) -> None: method post_publish_all (line 130) | def post_publish_all(self) -> None: class ShortcutPublisher (line 140) | class ShortcutPublisher(Publisher): method __init__ (line 143) | def __init__(self, fabric_workspace_obj: FabricWorkspace, item_obj: It... method _unpublish_shortcuts (line 154) | def _unpublish_shortcuts(self, shortcut_paths: list) -> None: method publish_one (line 168) | def publish_one(self, _shortcut_name: str, shortcut: dict) -> None: method publish_all (line 195) | def publish_all(self) -> None: FILE: src/fabric_cicd/_items/_manage_dependencies.py function set_publish_order (line 19) | def set_publish_order( function set_unpublish_order (line 50) | def set_unpublish_order( function sort_items (line 89) | def sort_items( FILE: src/fabric_cicd/_items/_mirroreddatabase.py class MirroredDatabasePublisher (line 10) | class MirroredDatabasePublisher(ItemPublisher): FILE: src/fabric_cicd/_items/_mlexperiment.py class MLExperimentPublisher (line 10) | class MLExperimentPublisher(ItemPublisher): FILE: src/fabric_cicd/_items/_mounteddatafactory.py class MountedDataFactoryPublisher (line 10) | class MountedDataFactoryPublisher(ItemPublisher): FILE: src/fabric_cicd/_items/_notebook.py class NotebookPublisher (line 11) | class NotebookPublisher(ItemPublisher): method publish_one (line 16) | def publish_one(self, item_name: str, item: Item) -> None: FILE: src/fabric_cicd/_items/_ontology.py class OntologyPublisher (line 10) | class OntologyPublisher(ItemPublisher): FILE: src/fabric_cicd/_items/_report.py function func_process_file (line 19) | def func_process_file(workspace_obj: FabricWorkspace, item_obj: Item, fi... class ReportPublisher (line 62) | class ReportPublisher(ItemPublisher): method publish_one (line 67) | def publish_one(self, item_name: str, _item: Item) -> None: FILE: src/fabric_cicd/_items/_semanticmodel.py function build_binding_mapping_legacy (line 17) | def build_binding_mapping_legacy(fabric_workspace_obj: FabricWorkspace, ... function build_binding_mapping (line 65) | def build_binding_mapping( function get_connections (line 134) | def get_connections(fabric_workspace_obj: FabricWorkspace) -> dict: function bind_semanticmodel_to_connection (line 167) | def bind_semanticmodel_to_connection( function build_request_body (line 245) | def build_request_body(body: dict) -> dict: class SemanticModelPublisher (line 270) | class SemanticModelPublisher(ItemPublisher): method publish_one (line 275) | def publish_one(self, item_name: str, _item: Item) -> None: method post_publish_all (line 281) | def post_publish_all(self) -> None: FILE: src/fabric_cicd/_items/_sparkjobdefinition.py class SparkJobDefinitionPublisher (line 15) | class SparkJobDefinitionPublisher(ItemPublisher): method publish_one (line 20) | def publish_one(self, item_name: str, _item: Item) -> None: FILE: src/fabric_cicd/_items/_sqldatabase.py class SQLDatabasePublisher (line 16) | class SQLDatabasePublisher(ItemPublisher): method publish_one (line 21) | def publish_one(self, item_name: str, item: Item) -> None: FILE: src/fabric_cicd/_items/_userdatafunction.py class UserDataFunctionPublisher (line 10) | class UserDataFunctionPublisher(ItemPublisher): FILE: src/fabric_cicd/_items/_variablelibrary.py function activate_value_set (line 17) | def activate_value_set(fabric_workspace_obj: FabricWorkspace, item_obj: ... class VariableLibraryPublisher (line 49) | class VariableLibraryPublisher(ItemPublisher): method publish_one (line 54) | def publish_one(self, item_name: str, item: Item) -> None: FILE: src/fabric_cicd/_items/_warehouse.py class WarehousePublisher (line 17) | class WarehousePublisher(ItemPublisher): method publish_one (line 22) | def publish_one(self, item_name: str, item: Item) -> None: FILE: src/fabric_cicd/_parameter/_parameter.py class Parameter (line 26) | class Parameter: method __init__ (line 56) | def __init__( method _set_parameter_file_path (line 84) | def _set_parameter_file_path(self) -> None: method _refresh_parameter_file (line 128) | def _refresh_parameter_file(self) -> None: method _validate_parameter_file_exists (line 138) | def _validate_parameter_file_exists(self) -> bool: method _validate_load_parameters_to_dict (line 145) | def _validate_load_parameters_to_dict(self) -> tuple[bool, dict]: method _process_template_parameters (line 174) | def _process_template_parameters(self, base_parameter_dict: dict) -> d... method _load_template_parameter_file (line 251) | def _load_template_parameter_file(self, file_path: Path) -> dict: method _merge_template_dict (line 274) | def _merge_template_dict(self, base_dict: dict, template_dict: dict) -... method _validate_parameter_load (line 309) | def _validate_parameter_load(self) -> tuple[bool, str]: method _validate_parameter_file (line 324) | def _validate_parameter_file(self) -> bool: method _handle_gateway_binding_parameter (line 368) | def _handle_gateway_binding_parameter(self) -> None: method _validate_parameter_structure (line 397) | def _validate_parameter_structure(self) -> tuple[bool, str]: method _validate_parameter_names (line 404) | def _validate_parameter_names(self) -> tuple[bool, str]: method _validate_parameter (line 413) | def _validate_parameter(self, param_name: str) -> tuple[bool, str]: method _validate_semantic_model_binding_parameter (line 496) | def _validate_semantic_model_binding_parameter( method _validate_connection_id (line 618) | def _validate_connection_id( method _check_duplicate_semantic_model_names (line 662) | def _check_duplicate_semantic_model_names(self, param_value: any, is_n... method _validate_parameter_keys (line 685) | def _validate_parameter_keys(self, param_name: str, param_keys: list) ... method _validate_required_values (line 699) | def _validate_required_values(self, param_name: str, param_dict: dict)... method _validate_key_value_find_key (line 723) | def _validate_key_value_find_key(self, param_dict: dict) -> tuple[bool... method _validate_find_regex (line 743) | def _validate_find_regex(self, param_name: str, param_dict: dict) -> t... method _validate_replace_value (line 767) | def _validate_replace_value(self, param_name: str, replace_value: dict... method _validate_find_replace_replace_value (line 784) | def _validate_find_replace_replace_value(self, replace_value: dict) ->... method _validate_key_value_replace_replace_value (line 797) | def _validate_key_value_replace_replace_value(self, replace_value: dic... method _validate_spark_pool_replace_value (line 830) | def _validate_spark_pool_replace_value(self, replace_value: dict) -> t... method _validate_optional_values (line 864) | def _validate_optional_values( method _validate_data_type (line 906) | def _validate_data_type( method _validate_environment (line 922) | def _validate_environment(self, replace_value: dict) -> tuple[bool, str]: method _validate_item_type (line 941) | def _validate_item_type(self, input_type: str) -> tuple[bool, str]: method _validate_item_name (line 948) | def _validate_item_name(self, input_name: str) -> tuple[bool, str]: method _validate_file_path (line 969) | def _validate_file_path(self, input_path: list[str]) -> tuple[bool, str]: class _DuplicateKeyLoader (line 986) | class _DuplicateKeyLoader(yaml.SafeLoader): function _collect_duplicate_key_errors (line 992) | def _collect_duplicate_key_errors(root_node: yaml.MappingNode, loader: _... function _check_duplicate_keys_constructor (line 1031) | def _check_duplicate_keys_constructor(loader: _DuplicateKeyLoader, node:... FILE: src/fabric_cicd/_parameter/_utils.py function _validate_regex_structure (line 32) | def _validate_regex_structure(pattern: re.Pattern, find_value: str) -> N... function _validate_regex_pattern (line 50) | def _validate_regex_pattern(matches: list, find_value: str) -> None: function extract_find_value (line 69) | def extract_find_value(param_dict: dict, file_content: str, filter_match... function extract_replace_value (line 119) | def extract_replace_value(workspace_obj: FabricWorkspace, replace_value:... function _extract_workspace_id (line 146) | def _extract_workspace_id(workspace_obj: FabricWorkspace, replace_value:... function _extract_item_attribute (line 240) | def _extract_item_attribute(workspace_obj: FabricWorkspace, variable: st... function extract_parameter_filters (line 367) | def extract_parameter_filters(workspace_obj: FabricWorkspace, param_dict... function process_environment_key (line 376) | def process_environment_key(environment: str, replace_value_dict: dict) ... function replace_key_value (line 391) | def replace_key_value( function replace_variables_in_parameter_file (line 440) | def replace_variables_in_parameter_file(raw_file: str) -> str: function validate_parameter_file (line 466) | def validate_parameter_file( function is_valid_structure (line 505) | def is_valid_structure(param_dict: dict, param_name: Optional[str] = Non... function _check_parameter_structure (line 543) | def _check_parameter_structure(param_value: any) -> bool: function _check_semantic_model_binding_structure (line 548) | def _check_semantic_model_binding_structure(param_value: any) -> tuple[b... function process_input_path (line 570) | def process_input_path( function _process_regular_path (line 612) | def _process_regular_path( function _process_wildcard_path (line 628) | def _process_wildcard_path( function _set_wildcard_path_pattern (line 656) | def _set_wildcard_path_pattern(wildcard_path: str, repository_directory:... function _resolve_file_path (line 683) | def _resolve_file_path( function _validate_wildcard_syntax (line 727) | def _validate_wildcard_syntax(pattern: str, log_func: logging.Logger) ->... function _validate_nested_brackets_braces (line 797) | def _validate_nested_brackets_braces(pattern: str, log_func: logging.Log... function check_replacement (line 827) | def check_replacement( function _find_match (line 871) | def _find_match( FILE: src/fabric_cicd/constants.py class EnvVar (line 20) | class EnvVar(str, Enum): class ItemType (line 43) | class ItemType(str, Enum): class FeatureFlag (line 108) | class FeatureFlag(str, Enum): class OperationType (line 145) | class OperationType(str, Enum): FILE: src/fabric_cicd/fabric_workspace.py class FabricWorkspace (line 28) | class FabricWorkspace: method __init__ (line 31) | def __init__( method base_api_url (line 181) | def base_api_url(self) -> str: method _resolve_workspace_id (line 185) | def _resolve_workspace_id(self, workspace_name: str) -> str: method _resolve_workspace_name (line 194) | def _resolve_workspace_name(self) -> str: method _lookup_item_attribute (line 202) | def _lookup_item_attribute(self, workspace_id: str, item_type: str, it... method _get_item_attribute (line 218) | def _get_item_attribute( method _get_workspace_pools (line 267) | def _get_workspace_pools(self) -> list[dict]: method _refresh_parameter_file (line 292) | def _refresh_parameter_file(self) -> None: method _refresh_repository_items (line 314) | def _refresh_repository_items(self) -> None: method _refresh_deployed_items (line 411) | def _refresh_deployed_items(self) -> None: method _replace_logical_ids (line 467) | def _replace_logical_ids(self, raw_file: str) -> str: method _replace_parameters (line 491) | def _replace_parameters(self, file_obj: object, item_obj: object) -> str: method _replace_workspace_ids (line 568) | def _replace_workspace_ids(self, raw_file: str) -> str: method _convert_id_to_name (line 587) | def _convert_id_to_name(self, item_type: str, generic_id: str, lookup_... method _convert_path_to_id (line 605) | def _convert_path_to_id(self, item_type: str, path: str) -> str: method _publish_item (line 620) | def _publish_item( method _unpublish_item (line 804) | def _unpublish_item(self, item_name: str, item_type: str) -> None: method _refresh_deployed_folders (line 839) | def _refresh_deployed_folders(self) -> None: method _refresh_repository_folders (line 886) | def _refresh_repository_folders(self) -> None: method _publish_folders (line 922) | def _publish_folders(self) -> None: method _unpublish_folders (line 988) | def _unpublish_folders(self) -> None: FILE: src/fabric_cicd/publish.py function publish_all_items (line 38) | def publish_all_items( function unpublish_all_orphan_items (line 269) | def unpublish_all_orphan_items( function deploy_with_config (line 401) | def deploy_with_config( function _collect_responses (line 580) | def _collect_responses(workspace: Optional[FabricWorkspace], responses_e... FILE: tests/fixtures/credentials.py function create_dummy_jwt (line 15) | def create_dummy_jwt(expiry_timestamp: int) -> str: class DummyTokenCredential (line 39) | class DummyTokenCredential(TokenCredential): method __init__ (line 42) | def __init__(self, expiry_days: int = 365): method get_token (line 53) | def get_token(self, *scopes: str, **kwargs: Any) -> AccessToken: # no... method get_expire (line 58) | def get_expire(self) -> int: FILE: tests/fixtures/mock_fabric_server.py class TraceIndex (line 42) | class TraceIndex: method __init__ (line 48) | def __init__(self): method normalize_route (line 54) | def normalize_route(route: str) -> str: method extract_content_key (line 59) | def extract_content_key(body: Any, method: str) -> Optional[tuple[str,... method add_trace (line 65) | def add_trace(self, request: HTTPRequest, response: HTTPResponse): class MockFabricAPIHandler (line 91) | class MockFabricAPIHandler(BaseHTTPRequestHandler): method log_message (line 99) | def log_message(self, format, *args): # noqa: A002 method do_GET (line 102) | def do_GET(self): # noqa: N802 method do_POST (line 105) | def do_POST(self): # noqa: N802 method do_PATCH (line 108) | def do_PATCH(self): # noqa: N802 method do_DELETE (line 111) | def do_DELETE(self): # noqa: N802 method _read_request_body (line 114) | def _read_request_body(self) -> Optional[dict]: method _handle_request (line 123) | def _handle_request(self, method: str): method _find_matching_response (line 149) | def _find_matching_response(self, method: str, route: str, request_bod... method _handle_item_creation (line 176) | def _handle_item_creation(self, content_key: tuple[str, str, str]) -> ... method _handle_operation_request (line 197) | def _handle_operation_request(self, operation_id: str, is_result: bool... method _send_response (line 236) | def _send_response(self, response: HTTPResponse, route_key: str): method load_trace_data (line 262) | def load_trace_data(cls, trace_file: Path): class MockFabricServer (line 298) | class MockFabricServer: method __init__ (line 303) | def __init__(self, trace_file: Path, port: int = MOCK_SERVER_PORT): method start (line 309) | def start(self): method stop (line 317) | def stop(self): FILE: tests/test__check_utils.py function text_file (line 12) | def text_file(tmp_path): function binary_file (line 19) | def binary_file(tmp_path): function image_file (line 28) | def image_file(tmp_path): function test_check_file_type_text (line 34) | def test_check_file_type_text(text_file): function test_check_file_type_binary (line 38) | def test_check_file_type_binary(binary_file): function test_check_file_type_image (line 42) | def test_check_file_type_image(image_file): function real_schedules_file (line 47) | def real_schedules_file(tmp_path): function test_schedules_file_json_validation_and_structure (line 76) | def test_schedules_file_json_validation_and_structure(real_schedules_file): function test_schedules_file_jsonpath_compatibility (line 103) | def test_schedules_file_jsonpath_compatibility(real_schedules_file): function test_real_sample_schedules_file (line 127) | def test_real_sample_schedules_file(): function test_check_valid_json_content_with_valid_json (line 148) | def test_check_valid_json_content_with_valid_json(): function test_check_valid_json_content_with_invalid_json (line 154) | def test_check_valid_json_content_with_invalid_json(): function test_check_valid_json_content_with_empty_string (line 160) | def test_check_valid_json_content_with_empty_string(): function test_check_valid_json_content_with_schedules_structure (line 165) | def test_check_valid_json_content_with_schedules_structure(): function test_check_valid_yaml_content_with_valid_yaml (line 173) | def test_check_valid_yaml_content_with_valid_yaml(): function test_check_valid_yaml_content_with_invalid_yaml (line 183) | def test_check_valid_yaml_content_with_invalid_yaml(): function test_check_valid_yaml_content_with_empty_string (line 189) | def test_check_valid_yaml_content_with_empty_string(): function test_check_valid_yaml_content_with_spark_compute_structure (line 195) | def test_check_valid_yaml_content_with_spark_compute_structure(): function test_check_valid_yaml_content_with_complex_structure (line 212) | def test_check_valid_yaml_content_with_complex_structure(): function test_check_valid_yaml_content_vs_json_content (line 234) | def test_check_valid_yaml_content_vs_json_content(): function test_check_valid_yaml_content_with_notebook_py_content (line 250) | def test_check_valid_yaml_content_with_notebook_py_content(): function test_check_valid_yaml_content_with_kql_content (line 269) | def test_check_valid_yaml_content_with_kql_content(): function test_check_valid_yaml_content_with_plain_python_content (line 280) | def test_check_valid_yaml_content_with_plain_python_content(): FILE: tests/test__fabric_endpoint.py class DummyLogger (line 16) | class DummyLogger: method __init__ (line 17) | def __init__(self): method info (line 20) | def info(self, message): method debug (line 23) | def debug(self, message): class DummyCredential (line 27) | class DummyCredential: method __init__ (line 28) | def __init__(self, token, expires_on=9999999999): method get_token (line 33) | def get_token(self, *_, **__): function setup_mocks (line 40) | def setup_mocks(monkeypatch, mocker): function generate_mock_token (line 51) | def generate_mock_token(): function test_integration (line 55) | def test_integration(setup_mocks): function test_performance (line 68) | def test_performance(setup_mocks): function test_invoke (line 93) | def test_invoke(setup_mocks, method, url, body, files): function test_invoke_token_expired (line 106) | def test_invoke_token_expired(setup_mocks, monkeypatch): function test_invoke_exception (line 127) | def test_invoke_exception(setup_mocks): function test_invoke_poll_long_running_false_with_202 (line 138) | def test_invoke_poll_long_running_false_with_202(setup_mocks): function test_invoke_poll_long_running_true_with_202 (line 157) | def test_invoke_poll_long_running_true_with_202(setup_mocks, monkeypatch): function test_invoke_poll_long_running_default_with_202 (line 191) | def test_invoke_poll_long_running_default_with_202(setup_mocks, monkeypa... function test_refresh_token (line 226) | def test_refresh_token(setup_mocks): function test_refresh_token_exceptions (line 244) | def test_refresh_token_exceptions(raise_exception, expected_msg): function test_handle_response (line 278) | def test_handle_response( function test_handle_response_longrunning_exception (line 314) | def test_handle_response_longrunning_exception(exception_match, response... function test_handle_response_exceptions (line 402) | def test_handle_response_exceptions( function test_handle_response_feature_not_available (line 427) | def test_handle_response_feature_not_available(): function test_handle_response_item_display_name_already_in_use (line 441) | def test_handle_response_item_display_name_already_in_use(setup_mocks, m... function test_handle_response_environment_libraries_not_found (line 457) | def test_handle_response_environment_libraries_not_found(setup_mocks): function test_format_invoke_log (line 473) | def test_format_invoke_log(): FILE: tests/test__file.py function text_file (line 16) | def text_file(tmp_path): function image_file (line 25) | def image_file(tmp_path): function test_file_text_initialization (line 33) | def test_file_text_initialization(text_file): function test_file_text_payload (line 39) | def test_file_text_payload(text_file): function test_file_text_set_contents (line 48) | def test_file_text_set_contents(text_file): function test_file_image_immutable_fields (line 53) | def test_file_image_immutable_fields(image_file): function test_file_image_payload (line 62) | def test_file_image_payload(image_file): function test_file_text_special_characters (line 71) | def test_file_text_special_characters(tmp_path): FILE: tests/test_config_validator.py class TestConfigValidator (line 16) | class TestConfigValidator: method setup_method (line 19) | def setup_method(self): method test_init (line 23) | def test_init(self): method test_validate_file_existence_valid_file (line 30) | def test_validate_file_existence_valid_file(self, tmp_path): method test_validate_file_existence_missing_file (line 40) | def test_validate_file_existence_missing_file(self): method test_validate_file_existence_empty_or_none_path (line 51) | def test_validate_file_existence_empty_or_none_path(self, path_value): method test_validate_file_existence_directory_instead_of_file (line 59) | def test_validate_file_existence_directory_instead_of_file(self, tmp_p... method test_validate_file_existence_invalid_path_os_error (line 67) | def test_validate_file_existence_invalid_path_os_error(self): method test_validate_yaml_content_valid_yaml (line 79) | def test_validate_yaml_content_valid_yaml(self, tmp_path): method test_validate_yaml_content_invalid_yaml (line 91) | def test_validate_yaml_content_invalid_yaml(self, tmp_path): method test_validate_yaml_content_unicode_decode_error (line 104) | def test_validate_yaml_content_unicode_decode_error(self, tmp_path): method test_validate_yaml_content_permission_error (line 116) | def test_validate_yaml_content_permission_error(self, tmp_path): method test_validate_yaml_content_unexpected_error (line 129) | def test_validate_yaml_content_unexpected_error(self, tmp_path): method test_validate_yaml_content_non_dict_yaml (line 142) | def test_validate_yaml_content_non_dict_yaml(self, tmp_path): method test_validate_yaml_content_none_path (line 154) | def test_validate_yaml_content_none_path(self): method test_validate_yaml_content_empty_file (line 161) | def test_validate_yaml_content_empty_file(self, tmp_path): method test_validate_config_structure_valid (line 173) | def test_validate_config_structure_valid(self): method test_validate_config_structure_non_dict_or_none (line 182) | def test_validate_config_structure_non_dict_or_none(self, config_value): method test_validate_config_structure_missing_core (line 192) | def test_validate_config_structure_missing_core(self): method test_validate_config_structure_core_not_dict (line 201) | def test_validate_config_structure_core_not_dict(self): method test_validate_workspace_field_valid_string (line 210) | def test_validate_workspace_field_valid_string(self): method test_validate_workspace_field_valid_workspace_id_guid (line 219) | def test_validate_workspace_field_valid_workspace_id_guid(self): method test_validate_workspace_field_invalid_workspace_id_guid (line 228) | def test_validate_workspace_field_invalid_workspace_id_guid(self): method test_validate_workspace_field_valid_dict (line 238) | def test_validate_workspace_field_valid_dict(self): method test_validate_workspace_field_valid_workspace_id_dict (line 247) | def test_validate_workspace_field_valid_workspace_id_dict(self): method test_validate_workspace_field_invalid_workspace_id_dict (line 261) | def test_validate_workspace_field_invalid_workspace_id_dict(self): method test_validate_workspace_field_missing (line 272) | def test_validate_workspace_field_missing(self): method test_validate_workspace_field_empty_string (line 281) | def test_validate_workspace_field_empty_string(self): method test_validate_workspace_field_invalid_type (line 293) | def test_validate_workspace_field_invalid_type(self): method test_validate_environment_mapping_valid (line 303) | def test_validate_environment_mapping_valid(self): method test_validate_environment_mapping_empty (line 312) | def test_validate_environment_mapping_empty(self): method test_validate_environment_mapping_invalid_env_key (line 322) | def test_validate_environment_mapping_invalid_env_key(self): method test_validate_environment_mapping_wrong_value_type (line 332) | def test_validate_environment_mapping_wrong_value_type(self): method test_validate_environment_mapping_empty_string_value (line 342) | def test_validate_environment_mapping_empty_string_value(self): method test_validate_environment_mapping_empty_list_value (line 352) | def test_validate_environment_mapping_empty_list_value(self): method test_validate_repository_directory_empty_string (line 362) | def test_validate_repository_directory_empty_string(self): method test_validate_repository_directory_valid_string (line 374) | def test_validate_repository_directory_valid_string(self): method test_validate_repository_directory_missing (line 382) | def test_validate_repository_directory_missing(self): method test_validate_repository_directory_invalid_type (line 391) | def test_validate_repository_directory_invalid_type(self): method test_validate_repository_directory_valid_env_mapping (line 400) | def test_validate_repository_directory_valid_env_mapping(self): method test_validate_repository_directory_invalid_env_mapping (line 408) | def test_validate_repository_directory_invalid_env_mapping(self): method test_validate_item_types_valid_list (line 420) | def test_validate_item_types_valid_list(self): method test_validate_item_types_empty_list (line 428) | def test_validate_item_types_empty_list(self): method test_validate_item_types_invalid_type (line 437) | def test_validate_item_types_invalid_type(self): method test_validate_item_types_unknown_item_type (line 446) | def test_validate_item_types_unknown_item_type(self): method test_validate_item_types_with_env_context (line 456) | def test_validate_item_types_with_env_context(self): method test_validate_item_types_in_scope_invalid_env_mapping (line 465) | def test_validate_item_types_in_scope_invalid_env_mapping(self): method test_validate_regex_valid (line 477) | def test_validate_regex_valid(self): method test_validate_regex_invalid (line 483) | def test_validate_regex_invalid(self): method test_validate_items_list_valid (line 490) | def test_validate_items_list_valid(self): method test_validate_items_list_invalid_type (line 498) | def test_validate_items_list_invalid_type(self): method test_validate_items_list_empty_item (line 507) | def test_validate_items_list_empty_item(self): method test_validate_features_list_valid (line 519) | def test_validate_features_list_valid(self): method test_validate_features_list_invalid_type (line 527) | def test_validate_features_list_invalid_type(self): method test_validate_features_list_empty_feature (line 536) | def test_validate_features_list_empty_feature(self): method test_validate_constants_dict_invalid_or_empty_key (line 549) | def test_validate_constants_dict_invalid_or_empty_key(self, key_value): method test_validate_constants_dict_unknown_constant (line 558) | def test_validate_constants_dict_unknown_constant(self): method test_validate_constants_dict_valid_various_types (line 567) | def test_validate_constants_dict_valid_various_types(self): method test_validate_constants_dict_url_constant_non_string_type (line 578) | def test_validate_constants_dict_url_constant_non_string_type(self): method test_validate_constants_dict_url_constant_invalid_hostname (line 587) | def test_validate_constants_dict_url_constant_invalid_hostname(self): method test_validate_constants_dict_url_constant_http_scheme (line 596) | def test_validate_constants_dict_url_constant_http_scheme(self): method test_validate_constants_dict_url_constant_with_path (line 605) | def test_validate_constants_dict_url_constant_with_path(self): method test_validate_constants_dict_url_constant_valid_powerbi (line 614) | def test_validate_constants_dict_url_constant_valid_powerbi(self): method test_validate_constants_dict_non_url_constant_skips_url_validation (line 622) | def test_validate_constants_dict_non_url_constant_skips_url_validation... method test_validate_item_types_in_scope_valid_list (line 630) | def test_validate_item_types_in_scope_valid_list(self): method test_validate_item_types_in_scope_empty_list (line 638) | def test_validate_item_types_in_scope_empty_list(self): method test_validate_item_types_in_scope_environment_mapping (line 647) | def test_validate_item_types_in_scope_environment_mapping(self): method test_validate_item_types_in_scope_invalid_type (line 655) | def test_validate_item_types_in_scope_invalid_type(self): method test_validate_item_types_in_scope_missing_field (line 664) | def test_validate_item_types_in_scope_missing_field(self): method test_resolve_repository_path_absolute_path (line 672) | def test_resolve_repository_path_absolute_path(self, tmp_path): method test_resolve_repository_path_relative_path (line 686) | def test_resolve_repository_path_relative_path(self, tmp_path): method test_resolve_repository_path_nonexistent_directory (line 704) | def test_resolve_repository_path_nonexistent_directory(self, tmp_path): method test_resolve_repository_path_file_instead_of_directory (line 714) | def test_resolve_repository_path_file_instead_of_directory(self, tmp_p... method test_resolve_repository_path_environment_mapping (line 728) | def test_resolve_repository_path_environment_mapping(self, tmp_path): method test_validate_parameter_field_valid_configurations (line 746) | def test_validate_parameter_field_valid_configurations(self): method test_validate_parameter_field_invalid_configurations (line 761) | def test_validate_parameter_field_invalid_configurations(self): method test_validate_parameter_field_invalid_env_mapping (line 781) | def test_validate_parameter_field_invalid_env_mapping(self): method test_resolve_parameter_path_basic_functionality (line 793) | def test_resolve_parameter_path_basic_functionality(self, tmp_path): method test_resolve_path_field_directory_relative_path (line 816) | def test_resolve_path_field_directory_relative_path(self, tmp_path): method test_resolve_path_field_file_absolute_path (line 833) | def test_resolve_path_field_file_absolute_path(self, tmp_path): method test_resolve_path_field_git_repo_mismatch (line 850) | def test_resolve_path_field_git_repo_mismatch(self, tmp_path): method test_resolve_path_field_file_type_but_is_directory (line 867) | def test_resolve_path_field_file_type_but_is_directory(self, tmp_path): method test_resolve_path_field_os_error (line 880) | def test_resolve_path_field_os_error(self, tmp_path): method test_resolve_path_field_environment_mapping (line 893) | def test_resolve_path_field_environment_mapping(self, tmp_path): method test_resolve_path_field_environment_not_in_mapping (line 919) | def test_resolve_path_field_environment_not_in_mapping(self, tmp_path): method test_resolve_path_field_nonexistent_path (line 941) | def test_resolve_path_field_nonexistent_path(self, tmp_path): method test_resolve_path_field_wrong_type_file_vs_directory (line 951) | def test_resolve_path_field_wrong_type_file_vs_directory(self, tmp_path): method test_resolve_path_field_no_config_path (line 965) | def test_resolve_path_field_no_config_path(self): method test_environment_exists_valid (line 977) | def test_environment_exists_valid(self): method test_environment_exists_missing_environment (line 986) | def test_environment_exists_missing_environment(self): method test_environment_exists_no_environment_with_mapping (line 996) | def test_environment_exists_no_environment_with_mapping(self): method test_environment_exists_no_environment_no_mapping (line 1006) | def test_environment_exists_no_environment_no_mapping(self): method test_valid_override_section (line 1058) | def test_valid_override_section(self, section, value, expected_result,... method test_merge_overrides_basic_sections (line 1130) | def test_merge_overrides_basic_sections(self, section, initial_config,... method test_merge_overrides_core_section (line 1225) | def test_merge_overrides_core_section( method test_merge_overrides_workspace_identifiers (line 1308) | def test_merge_overrides_workspace_identifiers( method test_apply_and_validate_overrides (line 1385) | def test_apply_and_validate_overrides( method test_validate_config_file_with_overrides_integration (line 1407) | def test_validate_config_file_with_overrides_integration(self, tmp_path): method test_validate_config_file_with_invalid_overrides_integration (line 1434) | def test_validate_config_file_with_invalid_overrides_integration(self,... class TestConfigValidatorUtilityFunctions (line 1458) | class TestConfigValidatorUtilityFunctions: method test_find_git_root_with_git_repo (line 1461) | def test_find_git_root_with_git_repo(self, tmp_path): method test_find_git_root_no_git_repo (line 1479) | def test_find_git_root_no_git_repo(self, tmp_path): method test_validate_guid_format_valid (line 1486) | def test_validate_guid_format_valid(self): method test_validate_guid_format_invalid (line 1499) | def test_validate_guid_format_invalid(self): method test_get_config_fields_complete_config (line 1515) | def test_get_config_fields_complete_config(self): class TestConfigValidatorIntegration (line 1566) | class TestConfigValidatorIntegration: method test_validate_config_file_complete_success (line 1569) | def test_validate_config_file_complete_success(self, tmp_path): method test_validate_config_file_accumulates_errors (line 1597) | def test_validate_config_file_accumulates_errors(self, tmp_path): method test_validate_config_file_stops_at_yaml_parse_error (line 1623) | def test_validate_config_file_stops_at_yaml_parse_error(self, tmp_path): method test_validate_config_file_catches_guid_and_constants_errors (line 1636) | def test_validate_config_file_catches_guid_and_constants_errors(self, ... class TestConfigSectionValidation (line 1669) | class TestConfigSectionValidation: method setup_method (line 1672) | def setup_method(self): method test_validate_config_sections_missing_core (line 1676) | def test_validate_config_sections_missing_core(self): method test_validate_config_sections_core_not_dict (line 1685) | def test_validate_config_sections_core_not_dict(self): method test_validate_config_sections_core_only (line 1694) | def test_validate_config_sections_core_only(self): method test_validate_config_sections_with_optional_sections (line 1704) | def test_validate_config_sections_with_optional_sections(self): method test_validate_config_sections_missing_workspace_identifier (line 1719) | def test_validate_config_sections_missing_workspace_identifier(self): class TestOperationSectionValidation (line 1729) | class TestOperationSectionValidation: method setup_method (line 1732) | def setup_method(self): method test_validate_operation_section_valid_basic (line 1736) | def test_validate_operation_section_valid_basic(self): method test_validate_operation_section_not_dict (line 1748) | def test_validate_operation_section_not_dict(self): method test_validate_operation_section_valid_regex_field (line 1760) | def test_validate_operation_section_valid_regex_field(self, regex_field): method test_validate_operation_section_invalid_regex_field (line 1769) | def test_validate_operation_section_invalid_regex_field(self, regex_fi... method test_validate_operation_section_empty_regex_field (line 1786) | def test_validate_operation_section_empty_regex_field(self, regex_fiel... method test_validate_operation_section_regex_field_invalid_type (line 1796) | def test_validate_operation_section_regex_field_invalid_type(self, reg... method test_validate_operation_section_regex_field_environment_mapping (line 1806) | def test_validate_operation_section_regex_field_environment_mapping(se... method test_validate_operation_section_regex_field_invalid_env_mapping (line 1815) | def test_validate_operation_section_regex_field_invalid_env_mapping(se... method test_validate_operation_section_regex_field_rejected_in_unpublish (line 1826) | def test_validate_operation_section_regex_field_rejected_in_unpublish(... method test_validate_operation_section_empty_items_to_include (line 1836) | def test_validate_operation_section_empty_items_to_include(self): method test_validate_operation_section_items_to_include_valid_env_mapping (line 1848) | def test_validate_operation_section_items_to_include_valid_env_mapping... method test_validate_operation_section_items_to_include_invalid_env_mapping (line 1856) | def test_validate_operation_section_items_to_include_invalid_env_mappi... method test_validate_operation_section_items_to_include_invalid_type (line 1866) | def test_validate_operation_section_items_to_include_invalid_type(self): method test_validate_operation_section_skip_boolean (line 1880) | def test_validate_operation_section_skip_boolean(self): method test_validate_operation_section_skip_environment_mapping (line 1888) | def test_validate_operation_section_skip_environment_mapping(self): method test_validate_operation_section_skip_invalid_type (line 1896) | def test_validate_operation_section_skip_invalid_type(self): method test_validate_operation_section_skip_invalid_env_mapping (line 1910) | def test_validate_operation_section_skip_invalid_env_mapping(self): method test_validate_operation_section_folder_path_to_include_valid_list (line 1922) | def test_validate_operation_section_folder_path_to_include_valid_list(... method test_validate_operation_section_folder_path_to_include_valid_env_mapping (line 1930) | def test_validate_operation_section_folder_path_to_include_valid_env_m... method test_validate_operation_section_folder_path_to_include_empty_list (line 1938) | def test_validate_operation_section_folder_path_to_include_empty_list(... method test_validate_operation_section_folder_path_to_include_invalid_type (line 1950) | def test_validate_operation_section_folder_path_to_include_invalid_typ... method test_validate_operation_section_folder_path_to_include_unsupported_in_unpublish (line 1962) | def test_validate_operation_section_folder_path_to_include_unsupported... method test_validate_operation_section_folder_path_to_include_entry_not_string (line 1976) | def test_validate_operation_section_folder_path_to_include_entry_not_s... method test_validate_operation_section_folder_path_to_include_empty_string_entry (line 1990) | def test_validate_operation_section_folder_path_to_include_empty_strin... method test_validate_operation_section_folder_path_to_include_missing_prefix (line 2004) | def test_validate_operation_section_folder_path_to_include_missing_pre... method test_validate_operation_section_folder_path_to_include_env_mapping_empty_list (line 2018) | def test_validate_operation_section_folder_path_to_include_env_mapping... method test_validate_operation_section_folder_path_to_include_env_mapping_invalid_entry (line 2032) | def test_validate_operation_section_folder_path_to_include_env_mapping... method test_validate_operation_section_folder_path_to_include_nested_path (line 2046) | def test_validate_operation_section_folder_path_to_include_nested_path... method test_validate_operation_section_folder_path_to_include_whitespace_entry (line 2054) | def test_validate_operation_section_folder_path_to_include_whitespace_... method test_validate_operation_section_mutually_exclusive_both_direct_values (line 2070) | def test_validate_operation_section_mutually_exclusive_both_direct_val... method test_validate_operation_section_mutually_exclusive_both_env_mapped_overlapping (line 2084) | def test_validate_operation_section_mutually_exclusive_both_env_mapped... method test_validate_operation_section_mutually_exclusive_both_env_mapped_no_overlap (line 2102) | def test_validate_operation_section_mutually_exclusive_both_env_mapped... method test_validate_operation_section_mutually_exclusive_direct_and_env_mapped_conflict (line 2118) | def test_validate_operation_section_mutually_exclusive_direct_and_env_... method test_validate_operation_section_mutually_exclusive_direct_and_env_mapped_no_conflict (line 2136) | def test_validate_operation_section_mutually_exclusive_direct_and_env_... method test_validate_operation_section_mutually_exclusive_env_mapped_and_direct_conflict (line 2152) | def test_validate_operation_section_mutually_exclusive_env_mapped_and_... method test_validate_operation_section_mutually_exclusive_only_one_field_present (line 2170) | def test_validate_operation_section_mutually_exclusive_only_one_field_... class TestFeaturesSectionValidation (line 2182) | class TestFeaturesSectionValidation: method setup_method (line 2185) | def setup_method(self): method test_validate_features_section_list (line 2189) | def test_validate_features_section_list(self): method test_validate_features_section_empty_list (line 2197) | def test_validate_features_section_empty_list(self): method test_validate_features_section_environment_mapping (line 2206) | def test_validate_features_section_environment_mapping(self): method test_validate_features_section_invalid_type (line 2214) | def test_validate_features_section_invalid_type(self): method test_validate_features_section_env_mapping_empty_list_for_env (line 2223) | def test_validate_features_section_env_mapping_empty_list_for_env(self): class TestConstantsSectionValidation (line 2236) | class TestConstantsSectionValidation: method setup_method (line 2239) | def setup_method(self): method test_validate_constants_section_dict (line 2243) | def test_validate_constants_section_dict(self): method test_validate_constants_section_not_dict (line 2252) | def test_validate_constants_section_not_dict(self): method test_validate_constants_section_environment_mapping (line 2261) | def test_validate_constants_section_environment_mapping(self): method test_validate_constants_section_rejects_env_at_top_format (line 2274) | def test_validate_constants_section_rejects_env_at_top_format(self): method test_validate_constants_section_env_mapping_invalid_env_key (line 2287) | def test_validate_constants_section_env_mapping_invalid_env_key(self): method test_validate_constants_section_env_mapping_url_validation (line 2304) | def test_validate_constants_section_env_mapping_url_validation(self): method test_validate_constants_section_env_mapping_non_string_url (line 2318) | def test_validate_constants_section_env_mapping_non_string_url(self): class TestEnvironmentMismatchValidation (line 2332) | class TestEnvironmentMismatchValidation: method setup_method (line 2335) | def setup_method(self): method test_environment_mismatch_in_workspace_id (line 2339) | def test_environment_mismatch_in_workspace_id(self): method test_environment_mismatch_in_multiple_fields (line 2352) | def test_environment_mismatch_in_multiple_fields(self): method test_environment_mapping_vs_basic_values_mixed (line 2373) | def test_environment_mapping_vs_basic_values_mixed(self): method test_environment_mapping_vs_basic_values_mismatch (line 2395) | def test_environment_mapping_vs_basic_values_mismatch(self): method test_environment_mismatch_optional_fields_log_only (line 2419) | def test_environment_mismatch_optional_fields_log_only(self): method test_environment_mismatch_required_fields_error (line 2452) | def test_environment_mismatch_required_fields_error(self): method test_environment_exists_constants_per_key_env_missing (line 2470) | def test_environment_exists_constants_per_key_env_missing(self): method test_environment_exists_constants_per_key_env_present (line 2494) | def test_environment_exists_constants_per_key_env_present(self): method test_environment_exists_constants_flat_value_no_env_check (line 2513) | def test_environment_exists_constants_flat_value_no_env_check(self): method test_environment_na_with_constants_env_mapping_no_error (line 2530) | def test_environment_na_with_constants_env_mapping_no_error(self): FILE: tests/test_deploy_with_config.py class TestConfigFileLoading (line 24) | class TestConfigFileLoading: method test_load_valid_config_file (line 27) | def test_load_valid_config_file(self, tmp_path): method test_load_config_file_with_override (line 52) | def test_load_config_file_with_override(self, tmp_path): method test_load_nonexistent_config_file (line 87) | def test_load_nonexistent_config_file(self): method test_load_invalid_yaml_syntax (line 92) | def test_load_invalid_yaml_syntax(self, tmp_path): method test_load_non_dict_yaml (line 100) | def test_load_non_dict_yaml(self, tmp_path): method test_load_config_missing_core_section (line 108) | def test_load_config_missing_core_section(self, tmp_path): class TestWorkspaceSettingsExtraction (line 119) | class TestWorkspaceSettingsExtraction: method test_extract_workspace_id_by_environment (line 122) | def test_extract_workspace_id_by_environment(self): method test_extract_workspace_name_by_environment (line 138) | def test_extract_workspace_name_by_environment(self): method test_extract_single_workspace_id (line 151) | def test_extract_single_workspace_id(self, tmp_path): method test_extract_missing_environment (line 170) | def test_extract_missing_environment(self, tmp_path): method test_extract_missing_workspace_config (line 187) | def test_extract_missing_workspace_config(self, tmp_path): method test_extract_missing_repository_directory (line 200) | def test_extract_missing_repository_directory(self, tmp_path): method test_extract_optional_item_types (line 213) | def test_extract_optional_item_types(self): method test_extract_parameter_file_path_string (line 226) | def test_extract_parameter_file_path_string(self): method test_extract_parameter_file_path_environment_mapping (line 239) | def test_extract_parameter_file_path_environment_mapping(self): method test_extract_parameter_file_path_missing (line 258) | def test_extract_parameter_file_path_missing(self): class TestPublishSettingsExtraction (line 271) | class TestPublishSettingsExtraction: method testextract_publish_settings_with_skip (line 274) | def testextract_publish_settings_with_skip(self): method testextract_publish_settings_with_items_to_include (line 290) | def testextract_publish_settings_with_items_to_include(self): method testextract_publish_settings_no_config (line 301) | def testextract_publish_settings_no_config(self): method testextract_publish_settings_single_skip_value (line 308) | def testextract_publish_settings_single_skip_value(self): method test_extract_publish_settings_with_shortcut_exclude_regex (line 319) | def test_extract_publish_settings_with_shortcut_exclude_regex(self): method test_extract_publish_settings_with_environment_specific_shortcut_exclude_regex (line 330) | def test_extract_publish_settings_with_environment_specific_shortcut_e... class TestUnpublishSettingsExtraction (line 345) | class TestUnpublishSettingsExtraction: method testextract_unpublish_settings_with_skip (line 348) | def testextract_unpublish_settings_with_skip(self): method testextract_unpublish_settings_no_config (line 364) | def testextract_unpublish_settings_no_config(self): class TestConfigOverrides (line 372) | class TestConfigOverrides: method test_feature_flags_applied_within_scope (line 375) | def test_feature_flags_applied_within_scope(self): method test_feature_flags_restored_after_scope (line 390) | def test_feature_flags_restored_after_scope(self): method test_constants_overrides_applied_within_scope (line 402) | def test_constants_overrides_applied_within_scope(self): method test_constants_overrides_restored_after_scope (line 413) | def test_constants_overrides_restored_after_scope(self): method test_user_constants_preserved_across_scope (line 423) | def test_user_constants_preserved_across_scope(self): method test_user_constant_same_key_restored_after_scope (line 441) | def test_user_constant_same_key_restored_after_scope(self): method test_no_overrides_does_not_error (line 456) | def test_no_overrides_does_not_error(self): method test_overrides_restored_on_exception (line 466) | def test_overrides_restored_on_exception(self): method test_user_flags_preserved_across_scope (line 482) | def test_user_flags_preserved_across_scope(self): method test_environment_specific_feature_flags (line 500) | def test_environment_specific_feature_flags(self): method test_environment_specific_constants (line 516) | def test_environment_specific_constants(self): class TestConfigOverridesIntegration (line 534) | class TestConfigOverridesIntegration: method test_response_collection_via_config_features (line 540) | def test_response_collection_via_config_features(self, mock_unpublish,... method test_failure_with_partial_responses_via_config_features (line 575) | def test_failure_with_partial_responses_via_config_features( class TestDeployWithConfig (line 613) | class TestDeployWithConfig: method test_deploy_with_config_full_deployment (line 619) | def test_deploy_with_config_full_deployment(self, mock_unpublish, mock... method test_deploy_with_config_skip_operations (line 682) | def test_deploy_with_config_skip_operations(self, mock_unpublish, mock... method test_deploy_with_config_missing_file (line 719) | def test_deploy_with_config_missing_file(self): method test_deploy_with_config_with_token_credential (line 727) | def test_deploy_with_config_with_token_credential(self, mock_unpublish... method test_deploy_with_config_with_config_override (line 770) | def test_deploy_with_config_with_config_override(self, mock_unpublish,... method test_deploy_with_config_shortcut_exclude_regex (line 821) | def test_deploy_with_config_shortcut_exclude_regex(self, mock_unpublis... method test_folder_path_to_include_passed_to_publish (line 864) | def test_folder_path_to_include_passed_to_publish(self, _mock_unpublis... method test_folder_path_to_include_defaults_to_none (line 891) | def test_folder_path_to_include_defaults_to_none(self, _mock_unpublish... method test_folder_path_to_include_environment_specific (line 915) | def test_folder_path_to_include_environment_specific(self, _mock_unpub... method test_deploy_with_config_skips_parameterization_when_parameter_absent (line 942) | def test_deploy_with_config_skips_parameterization_when_parameter_abse... method test_deploy_with_config_loads_parameter_when_field_present (line 979) | def test_deploy_with_config_loads_parameter_when_field_present(self, t... class TestConfigIntegration (line 1012) | class TestConfigIntegration: method test_sample_config_file_structure (line 1015) | def test_sample_config_file_structure(self): method test_config_validation_comprehensive (line 1048) | def test_config_validation_comprehensive(self, tmp_path): class TestConfigUtilsExtractSettings (line 1101) | class TestConfigUtilsExtractSettings: method test_extract_publish_settings_with_folder_exclude_regex (line 1104) | def test_extract_publish_settings_with_folder_exclude_regex(self): method test_extract_publish_settings_with_environment_specific_folder_exclude_regex (line 1115) | def test_extract_publish_settings_with_environment_specific_folder_exc... method test_extract_publish_settings_missing_environment_skips_setting (line 1129) | def test_extract_publish_settings_missing_environment_skips_setting(se... method test_extract_unpublish_settings_missing_environment_skips_setting (line 1143) | def test_extract_unpublish_settings_missing_environment_skips_setting(... method test_extract_publish_settings_skip_defaults_false_when_env_missing (line 1157) | def test_extract_publish_settings_skip_defaults_false_when_env_missing... method test_extract_unpublish_settings_skip_defaults_false_when_env_missing (line 1169) | def test_extract_unpublish_settings_skip_defaults_false_when_env_missi... method test_extract_workspace_settings_optional_fields_missing_environment (line 1181) | def test_extract_workspace_settings_optional_fields_missing_environmen... method test_extract_publish_settings_shortcut_exclude_regex_missing_environment (line 1200) | def test_extract_publish_settings_shortcut_exclude_regex_missing_envir... method test_extract_publish_settings_items_to_include_missing_environment (line 1212) | def test_extract_publish_settings_items_to_include_missing_environment... method test_extract_publish_settings_folder_path_to_include_list (line 1224) | def test_extract_publish_settings_folder_path_to_include_list(self): method test_extract_publish_settings_folder_path_to_include_env_specific (line 1234) | def test_extract_publish_settings_folder_path_to_include_env_specific(... method test_extract_publish_settings_folder_path_to_include_missing (line 1244) | def test_extract_publish_settings_folder_path_to_include_missing(self): method test_extract_publish_settings_no_publish_section_folder_path_to_include (line 1254) | def test_extract_publish_settings_no_publish_section_folder_path_to_in... class TestGetConfigValue (line 1261) | class TestGetConfigValue: method test_get_config_value_key_not_present (line 1264) | def test_get_config_value_key_not_present(self): method test_get_config_value_simple_value (line 1272) | def test_get_config_value_simple_value(self): method test_get_config_value_dict_with_environment (line 1280) | def test_get_config_value_dict_with_environment(self): method test_get_config_value_dict_missing_environment (line 1288) | def test_get_config_value_dict_missing_environment(self): method test_get_config_value_list_value (line 1296) | def test_get_config_value_list_value(self): method test_get_config_value_bool_value (line 1304) | def test_get_config_value_bool_value(self): class TestDeploymentResult (line 1313) | class TestDeploymentResult: method test_deployment_status_completed_value (line 1316) | def test_deployment_status_completed_value(self): method test_deployment_status_failed_value (line 1320) | def test_deployment_status_failed_value(self): method test_deployment_status_string_comparison (line 1324) | def test_deployment_status_string_comparison(self): method test_deployment_result_structure (line 1329) | def test_deployment_result_structure(self): method test_deployment_result_responses_defaults_to_none (line 1338) | def test_deployment_result_responses_defaults_to_none(self): method test_deployment_result_with_responses (line 1346) | def test_deployment_result_with_responses(self): class TestDeployWithConfigReturnValue (line 1359) | class TestDeployWithConfigReturnValue: method test_deploy_with_config_returns_deployment_result (line 1366) | def test_deploy_with_config_returns_deployment_result(self, mock_unpub... method test_deploy_with_config_returns_completed_when_skipping_operations (line 1403) | def test_deploy_with_config_returns_completed_when_skipping_operations( class TestDeployWithConfigFailures (line 1444) | class TestDeployWithConfigFailures: method test_deploy_with_config_invalid_yaml_raises_input_error (line 1447) | def test_deploy_with_config_invalid_yaml_raises_input_error(self, tmp_... method test_deploy_with_config_missing_core_raises_config_validation_error (line 1455) | def test_deploy_with_config_missing_core_raises_config_validation_erro... method test_deploy_with_config_missing_environment_raises_config_validation_error (line 1465) | def test_deploy_with_config_missing_environment_raises_config_validati... method test_deploy_with_config_missing_workspace_id_raises_config_validation_error (line 1483) | def test_deploy_with_config_missing_workspace_id_raises_config_validat... method test_deploy_with_config_publish_error_propagates (line 1500) | def test_deploy_with_config_publish_error_propagates(self, mock_unpubl... method test_deploy_with_config_workspace_creation_error_propagates (line 1529) | def test_deploy_with_config_workspace_creation_error_propagates( method test_deploy_with_config_unpublish_error_propagates (line 1560) | def test_deploy_with_config_unpublish_error_propagates( class TestDeployWithConfigExceptionAttributes (line 1587) | class TestDeployWithConfigExceptionAttributes: method test_exception_has_deployment_status_and_message (line 1593) | def test_exception_has_deployment_status_and_message(self, mock_unpubl... method test_exception_has_partial_responses_when_enabled (line 1628) | def test_exception_has_partial_responses_when_enabled(self, mock_unpub... method test_exception_no_responses_when_flag_disabled (line 1662) | def test_exception_no_responses_when_flag_disabled(self, mock_unpublis... method test_pre_workspace_failure_has_deployment_attributes (line 1689) | def test_pre_workspace_failure_has_deployment_attributes(self, tmp_path): class TestDeployWithConfigResponseCollection (line 1704) | class TestDeployWithConfigResponseCollection: method test_result_responses_is_dict_when_enabled (line 1714) | def test_result_responses_is_dict_when_enabled(self, mock_unpublish, m... method test_result_responses_contains_both_publish_and_unpublish (line 1750) | def test_result_responses_contains_both_publish_and_unpublish( method test_result_responses_is_none_when_disabled (line 1790) | def test_result_responses_is_none_when_disabled(self, mock_unpublish, ... class TestCollectResponses (line 1817) | class TestCollectResponses: method test_returns_none_when_responses_disabled (line 1820) | def test_returns_none_when_responses_disabled(self): method test_returns_none_when_workspace_is_none (line 1827) | def test_returns_none_when_workspace_is_none(self): method test_returns_none_when_both_responses_empty_dict (line 1832) | def test_returns_none_when_both_responses_empty_dict(self): method test_returns_none_when_both_responses_none (line 1840) | def test_returns_none_when_both_responses_none(self): method test_returns_none_when_responses_empty_and_unpublish_none (line 1848) | def test_returns_none_when_responses_empty_and_unpublish_none(self): method test_returns_none_when_responses_none_and_unpublish_empty (line 1856) | def test_returns_none_when_responses_none_and_unpublish_empty(self): method test_returns_publish_only_when_publish_available (line 1864) | def test_returns_publish_only_when_publish_available(self): method test_returns_unpublish_only_when_unpublish_available (line 1873) | def test_returns_unpublish_only_when_unpublish_available(self): method test_returns_both_when_both_available (line 1882) | def test_returns_both_when_both_available(self): FILE: tests/test_environment_publish.py class DummyFile (line 9) | class DummyFile: method __init__ (line 10) | def __init__(self, file_path): class DummyItem (line 24) | class DummyItem: method __init__ (line 25) | def __init__(self, name, file_paths): function test_process_environment_file_non_sparkcompute (line 44) | def test_process_environment_file_non_sparkcompute(tmp_path): function test_process_environment_file_no_instance_pool (line 55) | def test_process_environment_file_no_instance_pool(tmp_path): function test_process_environment_file_replaces_instance_pool (line 71) | def test_process_environment_file_replaces_instance_pool(tmp_path): function test_process_environment_file_pool_with_item_name_filter (line 105) | def test_process_environment_file_pool_with_item_name_filter(tmp_path): function test_process_environment_file_pool_no_match (line 135) | def test_process_environment_file_pool_no_match(tmp_path): function test_process_environment_file_no_spark_pool_param (line 160) | def test_process_environment_file_no_spark_pool_param(tmp_path): function test_resolve_pool_id_success (line 182) | def test_resolve_pool_id_success(): function test_resolve_pool_id_not_found (line 192) | def test_resolve_pool_id_not_found(): function test_publish_environments_passes_func_process_file (line 205) | def test_publish_environments_passes_func_process_file(tmp_path): function test_end_to_end_environment_setting_only (line 246) | def test_end_to_end_environment_setting_only(tmp_path): function test_end_to_end_environment_with_libraries (line 302) | def test_end_to_end_environment_with_libraries(tmp_path): FILE: tests/test_fabric_workspace.py function mock_endpoint (line 19) | def mock_endpoint(): function temp_workspace_dir (line 44) | def temp_workspace_dir(): function valid_workspace_id (line 51) | def valid_workspace_id(): function utf8_test_chars (line 57) | def utf8_test_chars(): function create_parameter_file (line 62) | def create_parameter_file(dir_path, utf8_chars): function create_platform_metadata (line 83) | def create_platform_metadata(dir_path, utf8_chars): function patched_fabric_workspace (line 107) | def patched_fabric_workspace(mock_endpoint): function test_parameter_file_with_utf8_chars (line 138) | def test_parameter_file_with_utf8_chars( function test_platform_metadata_with_utf8_chars (line 160) | def test_platform_metadata_with_utf8_chars( function test_environment_param_with_utf8_chars (line 181) | def test_environment_param_with_utf8_chars( function test_workspace_id_replacement_in_json (line 196) | def test_workspace_id_replacement_in_json(patched_fabric_workspace, vali... function test_workspace_id_replacement_in_python (line 229) | def test_workspace_id_replacement_in_python(patched_fabric_workspace, va... function test_workspace_id_replacement_eventstream_json (line 257) | def test_workspace_id_replacement_eventstream_json(patched_fabric_worksp... function test_workspace_id_replacement_yaml_format (line 302) | def test_workspace_id_replacement_yaml_format(patched_fabric_workspace, ... function test_workspace_id_replacement_mixed_formats (line 330) | def test_workspace_id_replacement_mixed_formats(patched_fabric_workspace... function test_workspace_id_replacement_whitespace_variations (line 360) | def test_workspace_id_replacement_whitespace_variations( function test_workspace_id_replacement_non_default_values_preserved (line 395) | def test_workspace_id_replacement_non_default_values_preserved( function test_workspace_id_replacement_edge_cases (line 438) | def test_workspace_id_replacement_edge_cases(patched_fabric_workspace, v... function test_workspace_id_replacement_comprehensive_item_types (line 478) | def test_workspace_id_replacement_comprehensive_item_types( function test_environment_parameter_replacement_issue (line 533) | def test_environment_parameter_replacement_issue(patched_fabric_workspac... function test_empty_logical_id_validation (line 604) | def test_empty_logical_id_validation(temp_workspace_dir, patched_fabric_... function test_whitespace_only_logical_id_validation (line 642) | def test_whitespace_only_logical_id_validation(temp_workspace_dir, patch... function test_valid_logical_id_works_correctly (line 679) | def test_valid_logical_id_works_correctly(temp_workspace_dir, patched_fa... function test_empty_logical_id_validation_during_publish (line 715) | def test_empty_logical_id_validation_during_publish(temp_workspace_dir, ... function test_multiple_empty_logical_ids_validation (line 753) | def test_multiple_empty_logical_ids_validation(temp_workspace_dir, patch... function test_single_empty_logical_id_validation_message (line 799) | def test_single_empty_logical_id_validation_message(temp_workspace_dir, ... function test_fabric_workspace_with_none_item_types_defaults_to_all (line 839) | def test_fabric_workspace_with_none_item_types_defaults_to_all( function test_parameter_file_path_types (line 883) | def test_parameter_file_path_types(temp_workspace_dir, patched_fabric_wo... function test_parameter_file_path_none (line 917) | def test_parameter_file_path_none(temp_workspace_dir, patched_fabric_wor... function test_skip_parameterization_prevents_parameter_yml_auto_discovery (line 930) | def test_skip_parameterization_prevents_parameter_yml_auto_discovery( function test_skip_parameterization_false_loads_explicit_parameter_file (line 951) | def test_skip_parameterization_false_loads_explicit_parameter_file( function test_parameter_file_path_with_environment (line 971) | def test_parameter_file_path_with_environment(temp_workspace_dir, patche... function test_parameter_file_path_backward_compatibility (line 992) | def test_parameter_file_path_backward_compatibility(temp_workspace_dir, ... function test_parameter_file_path_integration_with_parameter_class (line 1007) | def test_parameter_file_path_integration_with_parameter_class( function test_parameter_file_path_invalid_type_rejected (line 1037) | def test_parameter_file_path_invalid_type_rejected(temp_workspace_dir, p... function test_no_token_credential_raises_error (line 1053) | def test_no_token_credential_raises_error(temp_workspace_dir, valid_work... function test_base_api_url_kwarg_raises_error (line 1076) | def test_base_api_url_kwarg_raises_error(temp_workspace_dir, valid_works... function test_resolve_workspace_name (line 1108) | def test_resolve_workspace_name(patched_fabric_workspace, valid_workspac... function test_resolve_workspace_name_not_found (line 1129) | def test_resolve_workspace_name_not_found(patched_fabric_workspace, vali... function test_lookup_item_attribute (line 1147) | def test_lookup_item_attribute(patched_fabric_workspace, valid_workspace... function test_kqldatabase_folder_regex_root_eventhouse (line 1208) | def test_kqldatabase_folder_regex_root_eventhouse(): function test_kqldatabase_folder_regex_nested_subfolder (line 1217) | def test_kqldatabase_folder_regex_nested_subfolder(): function test_kqldatabase_folder_regex_no_match_edge_case (line 1226) | def test_kqldatabase_folder_regex_no_match_edge_case(): function test_get_item_attribute_caching_basic (line 1239) | def test_get_item_attribute_caching_basic(patched_fabric_workspace, vali... function test_get_item_attribute_caching_prevents_api_call (line 1275) | def test_get_item_attribute_caching_prevents_api_call(patched_fabric_wor... function test_get_item_attribute_different_cache_keys (line 1316) | def test_get_item_attribute_different_cache_keys(patched_fabric_workspac... function test_get_item_attribute_edge_cases (line 1420) | def test_get_item_attribute_edge_cases(patched_fabric_workspace, valid_w... function test_multiple_items_with_default_guid_logical_id (line 1480) | def test_multiple_items_with_default_guid_logical_id(temp_workspace_dir,... function test_duplicate_non_default_logical_id_raises_error (line 1519) | def test_duplicate_non_default_logical_id_raises_error( function test_replace_logical_ids_skips_default_guid (line 1557) | def test_replace_logical_ids_skips_default_guid(temp_workspace_dir, patc... function test_replace_logical_ids_replaces_non_default_guid (line 1599) | def test_replace_logical_ids_replaces_non_default_guid( function test_mix_of_default_and_non_default_logical_ids (line 1634) | def test_mix_of_default_and_non_default_logical_ids(temp_workspace_dir, ... function test_publish_variable_library_only_calls_replace_parameters (line 1688) | def test_publish_variable_library_only_calls_replace_parameters( function test_publish_non_variable_library_calls_all_replacements (line 1729) | def test_publish_non_variable_library_calls_all_replacements( function test_api_root_url_snapshot_is_not_retargeted_by_second_configure_call (line 1769) | def test_api_root_url_snapshot_is_not_retargeted_by_second_configure_call( FILE: tests/test_fqdn_workspace_id.py class TestGetFabricFqdnUrl (line 12) | class TestGetFabricFqdnUrl: method test_produces_correct_fqdn_url (line 15) | def test_produces_correct_fqdn_url(self): method test_rejects_workspace_id_without_dashes (line 19) | def test_rejects_workspace_id_without_dashes(self): class TestConfigureFabricFqdn (line 24) | class TestConfigureFabricFqdn: method test_globals_updated (line 27) | def test_globals_updated(self, monkeypatch): method test_overwrite_warning_on_second_call (line 37) | def test_overwrite_warning_on_second_call(self, monkeypatch, mocker): FILE: tests/test_git_diff_utils.py class TestValidateGitCompareRef (line 19) | class TestValidateGitCompareRef: method test_accepts_common_valid_refs (line 20) | def test_accepts_common_valid_refs(self): method test_rejects_empty_string (line 26) | def test_rejects_empty_string(self): method test_rejects_whitespace_only (line 30) | def test_rejects_whitespace_only(self): method test_rejects_dash_prefixed (line 34) | def test_rejects_dash_prefixed(self): method test_rejects_invalid_characters (line 40) | def test_rejects_invalid_characters(self): method test_rejects_shell_metacharacters (line 44) | def test_rejects_shell_metacharacters(self): method test_rejects_non_string_input (line 50) | def test_rejects_non_string_input(self): method test_accepts_advanced_git_ref_syntax (line 57) | def test_accepts_advanced_git_ref_syntax(self): class TestResolveGitDiffPath (line 72) | class TestResolveGitDiffPath: method test_rejects_absolute_paths (line 75) | def test_rejects_absolute_paths(self, tmp_path): method test_rejects_path_traversal (line 79) | def test_rejects_path_traversal(self, tmp_path): method test_rejects_null_bytes (line 83) | def test_rejects_null_bytes(self, tmp_path): method test_accepts_valid_relative_path (line 87) | def test_accepts_valid_relative_path(self, tmp_path): method test_rejects_path_outside_repo_directory (line 94) | def test_rejects_path_outside_repo_directory(self, tmp_path): class TestFindPlatformItem (line 107) | class TestFindPlatformItem: method test_finds_platform_in_same_directory (line 110) | def test_finds_platform_in_same_directory(self, tmp_path): method test_returns_none_when_no_platform_file (line 121) | def test_returns_none_when_no_platform_file(self, tmp_path): method test_returns_none_for_malformed_platform_json (line 129) | def test_returns_none_for_malformed_platform_json(self, tmp_path): method test_returns_none_when_metadata_missing_type (line 138) | def test_returns_none_when_metadata_missing_type(self, tmp_path): class TestGetChangedItems (line 156) | class TestGetChangedItems: method _make_git_diff_output (line 159) | def _make_git_diff_output(self, lines: list[str]) -> str: method test_returns_changed_items_from_git_diff (line 162) | def test_returns_changed_items_from_git_diff(self, tmp_path): method test_returns_empty_list_when_no_changes (line 190) | def test_returns_empty_list_when_no_changes(self, tmp_path): method test_returns_empty_list_when_git_root_not_found (line 205) | def test_returns_empty_list_when_git_root_not_found(self, tmp_path): method test_returns_empty_list_when_git_diff_fails (line 214) | def test_returns_empty_list_when_git_diff_fails(self, tmp_path): method test_uses_custom_git_compare_ref (line 228) | def test_uses_custom_git_compare_ref(self, tmp_path): method test_excludes_files_outside_repository_directory (line 244) | def test_excludes_files_outside_repository_directory(self, tmp_path): method test_deduplicates_multiple_files_in_same_item (line 267) | def test_deduplicates_multiple_files_in_same_item(self, tmp_path): method test_handles_renamed_files (line 295) | def test_handles_renamed_files(self, tmp_path): method test_returns_empty_list_on_timeout (line 319) | def test_returns_empty_list_on_timeout(self, tmp_path): method test_multiple_distinct_items (line 333) | def test_multiple_distinct_items(self, tmp_path): method test_rejects_dangerous_git_compare_ref (line 361) | def test_rejects_dangerous_git_compare_ref(self, tmp_path): FILE: tests/test_hard_delete.py function mock_endpoint (line 20) | def mock_endpoint(): function test_workspace (line 40) | def test_workspace(mock_endpoint): function _clear_feature_flags (line 82) | def _clear_feature_flags(): function test_unpublish_item_without_hard_delete_flag (line 89) | def test_unpublish_item_without_hard_delete_flag(test_workspace, mock_en... function test_unpublish_item_with_hard_delete_flag (line 104) | def test_unpublish_item_with_hard_delete_flag(test_workspace, mock_endpo... function test_hard_delete_flag_via_append_feature_flag (line 119) | def test_hard_delete_flag_via_append_feature_flag(test_workspace, mock_e... FILE: tests/test_integration_publish.py function allow_localhost_http_for_integration (line 23) | def allow_localhost_http_for_integration(monkeypatch: pytest.MonkeyPatch): function mock_fabric_api_server (line 44) | def mock_fabric_api_server(allow_localhost_http_for_integration): # noq... function test_publish_all_items_integration (line 101) | def test_publish_all_items_integration(mock_fabric_api_server): # noqa:... FILE: tests/test_logging.py function _close_all_file_handlers (line 40) | def _close_all_file_handlers(): function _reset_logger (line 50) | def _reset_logger(logger_name: str) -> None: function _clean_logging_state (line 57) | def _clean_logging_state(): function temp_log_dir (line 69) | def temp_log_dir(): function external_rotating_handler (line 78) | def external_rotating_handler(temp_log_dir): function external_logger_with_handler (line 88) | def external_logger_with_handler(temp_log_dir): class TestCustomFormatter (line 104) | class TestCustomFormatter: method test_format_levels (line 117) | def test_format_levels(self, level, level_name, message): method test_format_with_indent (line 133) | def test_format_with_indent(self): class TestPackageFilter (line 151) | class TestPackageFilter: method test_namespace_filtering (line 165) | def test_namespace_filtering(self, logger_name, expected): method test_debug_only_mode (line 183) | def test_debug_only_mode(self, level, expected): method test_debug_only_still_checks_namespace (line 191) | def test_debug_only_still_checks_namespace(self): method test_default_allows_all_levels_from_package (line 199) | def test_default_allows_all_levels_from_package(self): class TestMarkHandler (line 210) | class TestMarkHandler: method test_mark_handler (line 213) | def test_mark_handler(self): method test_mark_external_handler (line 220) | def test_mark_external_handler(self): class TestCleanupManagedHandlers (line 229) | class TestCleanupManagedHandlers: method test_removes_managed_preserves_external (line 232) | def test_removes_managed_preserves_external(self): method test_cleanup_multiple_loggers (line 247) | def test_cleanup_multiple_loggers(self): method test_cleanup_external_handler_removes_filters (line 264) | def test_cleanup_external_handler_removes_filters(self, temp_log_dir): class TestConfigureDefaultFileHandler (line 289) | class TestConfigureDefaultFileHandler: method test_default_file_handler_configuration (line 292) | def test_default_file_handler_configuration(self): class TestConfigureExternalFileHandler (line 310) | class TestConfigureExternalFileHandler: method test_reuses_handler_directly (line 313) | def test_reuses_handler_directly(self, temp_log_dir): method test_preserves_caller_formatter (line 335) | def test_preserves_caller_formatter(self, temp_log_dir): method test_info_level_ignores_debug_only (line 354) | def test_info_level_ignores_debug_only(self, temp_log_dir): method test_works_with_regular_file_handler (line 365) | def test_works_with_regular_file_handler(self, temp_log_dir): class TestConfigureConsoleHandler (line 382) | class TestConfigureConsoleHandler: method test_console_handler_configuration (line 385) | def test_console_handler_configuration(self): class TestGetFileHandler (line 394) | class TestGetFileHandler: method test_returns_none_when_no_file_handler (line 397) | def test_returns_none_when_no_file_handler(self): method test_returns_managed_file_handler_from_root (line 401) | def test_returns_managed_file_handler_from_root(self): method test_ignores_unmanaged_file_handler_on_root (line 414) | def test_ignores_unmanaged_file_handler_on_root(self): method test_ignores_external_file_handler_on_root (line 426) | def test_ignores_external_file_handler_on_root(self): method test_returns_any_file_handler_from_provided_logger (line 438) | def test_returns_any_file_handler_from_provided_logger(self): class TestBuildConsoleMessage (line 452) | class TestBuildConsoleMessage: method test_no_file_handler (line 455) | def test_no_file_handler(self): method test_with_default_file_handler (line 461) | def test_with_default_file_handler(self): method test_with_non_default_file_handler (line 473) | def test_with_non_default_file_handler(self, temp_log_dir): class TestBuildFileMessage (line 487) | class TestBuildFileMessage: method test_file_message (line 497) | def test_file_message(self, additional_info, expected_in_result): class TestConfigureLogger (line 512) | class TestConfigureLogger: method test_logger_levels (line 522) | def test_logger_levels(self, level, expected_package_level, expected_r... method test_default_includes_file_handler (line 529) | def test_default_includes_file_handler(self): method test_disable_file_logging (line 536) | def test_disable_file_logging(self): method test_with_external_file_handler (line 543) | def test_with_external_file_handler(self, external_rotating_handler, t... method test_suppress_debug_console (line 565) | def test_suppress_debug_console(self): method test_console_only_logger_configured (line 574) | def test_console_only_logger_configured(self): method test_preserves_unmanaged_handlers (line 585) | def test_preserves_unmanaged_handlers(self): method test_package_logger_propagates (line 597) | def test_package_logger_propagates(self): class TestLogHeader (line 603) | class TestLogHeader: method test_logs_expected_messages (line 606) | def test_logs_expected_messages(self, caplog): class TestWrapperFunctions (line 618) | class TestWrapperFunctions: method _clear_feature_flags (line 622) | def _clear_feature_flags(self): method test_append_feature_flag (line 627) | def test_append_feature_flag(self): method test_change_log_level (line 638) | def test_change_log_level(self, level_input): method test_change_log_level_unsupported (line 643) | def test_change_log_level_unsupported(self, capsys): method test_disable_file_logging (line 651) | def test_disable_file_logging(self): class TestConfigureExternalFileLogging (line 662) | class TestConfigureExternalFileLogging: method test_configures_correctly (line 665) | def test_configures_correctly(self, external_logger_with_handler): method test_raises_without_handler (line 692) | def test_raises_without_handler(self): method test_writes_only_debug_logs (line 700) | def test_writes_only_debug_logs(self, external_logger_with_handler): class TestExceptionHandler (line 724) | class TestExceptionHandler: method test_handles_custom_exception (line 727) | def test_handles_custom_exception(self): method test_falls_back_for_standard_exception (line 740) | def test_falls_back_for_standard_exception(self): method test_writes_to_console_only_logger (line 747) | def test_writes_to_console_only_logger(self): method test_removes_console_handler_when_using_default_file (line 762) | def test_removes_console_handler_when_using_default_file(self): class TestFileLoggingIntegration (line 779) | class TestFileLoggingIntegration: method test_default_file_handler_writes_logs (line 782) | def test_default_file_handler_writes_logs(self, temp_log_dir): method test_file_not_created_until_log_written (line 807) | def test_file_not_created_until_log_written(self, temp_log_dir): method test_external_handler_writes_fabric_cicd_logs (line 823) | def test_external_handler_writes_fabric_cicd_logs(self, external_logge... method test_console_only_logger_does_not_propagate_to_file (line 843) | def test_console_only_logger_does_not_propagate_to_file(self, external... class TestExternalHandlerReconfiguration (line 861) | class TestExternalHandlerReconfiguration: method test_debug_to_non_debug_cleans_up_filter (line 864) | def test_debug_to_non_debug_cleans_up_filter(self, external_logger_wit... method test_non_debug_to_debug_adds_filter (line 877) | def test_non_debug_to_debug_adds_filter(self, external_logger_with_han... method test_multiple_debug_runs_no_filter_accumulation (line 890) | def test_multiple_debug_runs_no_filter_accumulation(self, external_log... method test_handler_not_closed_on_disable (line 901) | def test_handler_not_closed_on_disable(self, external_logger_with_hand... method test_rotating_handler_preserves_rotation_settings (line 914) | def test_rotating_handler_preserves_rotation_settings(self, external_l... FILE: tests/test_parameter.py function item_type_in_scope (line 311) | def item_type_in_scope(): function target_environment (line 316) | def target_environment(): function repository_directory (line 321) | def repository_directory(tmp_path): function parameter_object (line 390) | def parameter_object(repository_directory, item_type_in_scope, target_en... function test_parameter_class_initialization (line 400) | def test_parameter_class_initialization(parameter_object, repository_dir... function test_parameter_file_validation (line 412) | def test_parameter_file_validation(parameter_object): function test_multiple_parameter_validation (line 430) | def test_multiple_parameter_validation(repository_directory, item_type_i... function test_validate_parameter_keys (line 459) | def test_validate_parameter_keys(parameter_object, param_name, param_val... function test_validate_parameter (line 469) | def test_validate_parameter(parameter_object, param_name): function test_validate_find_replace_replace_value (line 498) | def test_validate_find_replace_replace_value(parameter_object, replace_v... function test_validate_key_value_replace_replace_value (line 566) | def test_validate_key_value_replace_replace_value(parameter_object, repl... function test_validate_spark_pool_replace_value (line 633) | def test_validate_spark_pool_replace_value(parameter_object, replace_val... function test_validate_data_type (line 656) | def test_validate_data_type(parameter_object): function test_validate_yaml_content_empty (line 719) | def test_validate_yaml_content_empty(): function test_utf8_validation_at_file_read (line 744) | def test_utf8_validation_at_file_read(): function test_validate_yaml_content_duplicate_keys (line 782) | def test_validate_yaml_content_duplicate_keys(): function test_duplicate_keys_single_duplicate (line 815) | def test_duplicate_keys_single_duplicate(repository_directory, item_type... function test_duplicate_keys_multiple_duplicates (line 832) | def test_duplicate_keys_multiple_duplicates(repository_directory, item_t... function test_duplicate_keys_no_duplicates (line 849) | def test_duplicate_keys_no_duplicates(parameter_object): function test_duplicate_keys_ignores_comments (line 858) | def test_duplicate_keys_ignores_comments(): function test_duplicate_keys_nested_keys_not_flagged (line 896) | def test_duplicate_keys_nested_keys_not_flagged(): function test_duplicate_keys_nested_duplicate_detected (line 1039) | def test_duplicate_keys_nested_duplicate_detected(content, duplicate_keys): function test_duplicate_keys_triple_occurrence (line 1066) | def test_duplicate_keys_triple_occurrence(repository_directory, item_typ... function test_validate_parameter_file_structure (line 1083) | def test_validate_parameter_file_structure(repository_directory, item_ty... function test_validate_optional_values (line 1094) | def test_validate_optional_values(parameter_object): function test_validate_parameter_environment_and_filters (line 1127) | def test_validate_parameter_environment_and_filters(parameter_object, pa... function test_validate_item_name_with_accented_characters (line 1148) | def test_validate_item_name_with_accented_characters(repository_director... function test_validate_invalid_parameters (line 1200) | def test_validate_invalid_parameters( function test_validate_file_path_scenarios (line 1295) | def test_validate_file_path_scenarios(parameter_object): function test_validate_all_environment_key_valid (line 1385) | def test_validate_all_environment_key_valid(): function test_validate_all_environment_key_invalid (line 1454) | def test_validate_all_environment_key_invalid(): function test_validate_all_environment_key_with_logging (line 1526) | def test_validate_all_environment_key_with_logging(): function test_parameter_file_path_absolute (line 1601) | def test_parameter_file_path_absolute(): function test_parameter_file_path_relative (line 1630) | def test_parameter_file_path_relative(): function test_parameter_file_path_none (line 1690) | def test_parameter_file_path_none(): function test_parameter_file_path_and_name_inputs (line 1719) | def test_parameter_file_path_and_name_inputs(): function test_no_provided_parameter_file_path (line 1760) | def test_no_provided_parameter_file_path(): function test_parameter_file_path_nonexistent (line 1789) | def test_parameter_file_path_nonexistent(): function test_validate_parameter_file_exists_none (line 1809) | def test_validate_parameter_file_exists_none(): function test_parameter_file_path_invalid_type (line 1829) | def test_parameter_file_path_invalid_type(): function test_set_parameter_file_path_error_handling (line 1848) | def test_set_parameter_file_path_error_handling(): function test_basic_template_processing (line 1869) | def test_basic_template_processing(tmp_path): function test_missing_templates_directory (line 1921) | def test_missing_templates_directory(tmp_path): function test_nested_template_prevention (line 1948) | def test_nested_template_prevention(tmp_path): function test_template_path_resolution (line 2002) | def test_template_path_resolution(tmp_path): function test_missing_template_files (line 2058) | def test_missing_template_files(tmp_path): function test_template_merge_validation (line 2092) | def test_template_merge_validation(tmp_path): function test_template_duplicate_keys_detected (line 2153) | def test_template_duplicate_keys_detected(tmp_path): function test_circular_template_reference (line 2195) | def test_circular_template_reference(tmp_path): function test_multiple_template_references (line 2247) | def test_multiple_template_references(tmp_path): function test_template_merge_behavior (line 2408) | def test_template_merge_behavior(tmp_path): function test_template_reference_handling (line 2474) | def test_template_reference_handling(tmp_path): function empty_parameter (line 2556) | def empty_parameter(tmp_path): function test_validate_key_value_find_key_valid_dot_notation (line 2561) | def test_validate_key_value_find_key_valid_dot_notation(empty_parameter): function test_validate_key_value_find_key_valid_filter_syntax (line 2568) | def test_validate_key_value_find_key_valid_filter_syntax(empty_parameter): function test_validate_key_value_find_key_missing_key (line 2575) | def test_validate_key_value_find_key_missing_key(empty_parameter): function test_validate_key_value_find_key_non_string (line 2582) | def test_validate_key_value_find_key_non_string(empty_parameter): function test_validate_key_value_find_key_empty_string (line 2589) | def test_validate_key_value_find_key_empty_string(empty_parameter): function test_validate_key_value_find_key_requires_root (line 2596) | def test_validate_key_value_find_key_requires_root(empty_parameter): function test_validate_key_value_find_key_unbalanced_filter (line 2603) | def test_validate_key_value_find_key_unbalanced_filter(empty_parameter): function test_validate_key_value_find_key_unsupported_regex_operator (line 2610) | def test_validate_key_value_find_key_unsupported_regex_operator(empty_pa... function test_validate_required_values_integration_calls_find_key_validator (line 2618) | def test_validate_required_values_integration_calls_find_key_validator(e... function test_validate_and_evaluate_bracket_key_with_yaml (line 2626) | def test_validate_and_evaluate_bracket_key_with_yaml(empty_parameter): function test_yaml_boolean_filter_evaluation (line 2647) | def test_yaml_boolean_filter_evaluation(empty_parameter): function test_yaml_no_match_is_no_op (line 2672) | def test_yaml_no_match_is_no_op(empty_parameter): function test_semantic_model_binding_validation (line 2874) | def test_semantic_model_binding_validation(empty_parameter, param_value,... function test_validate_connection_id (line 2938) | def test_validate_connection_id( function test_semantic_model_binding_new_format_models_invalid_connection_guid (line 2949) | def test_semantic_model_binding_new_format_models_invalid_connection_gui... function test_semantic_model_binding_legacy_format_mixed_with_new_keys (line 2961) | def test_semantic_model_binding_legacy_format_mixed_with_new_keys(empty_... function test_check_duplicate_semantic_model_names (line 3055) | def test_check_duplicate_semantic_model_names(empty_parameter, param_val... FILE: tests/test_parameter_utils.py function temp_repository (line 28) | def temp_repository(): class TestParameterUtilities (line 72) | class TestParameterUtilities: method mock_workspace (line 76) | def mock_workspace(self): method test_extract_find_value (line 127) | def test_extract_find_value(self): method test_extract_find_value_valid_regex (line 136) | def test_extract_find_value_valid_regex(self): method test_extract_find_value_invalid_regex (line 150) | def test_extract_find_value_invalid_regex(self): method test_extract_find_value_multiple_matches (line 178) | def test_extract_find_value_multiple_matches(self): method test_extract_replace_value_default (line 194) | def test_extract_replace_value_default(self, mock_workspace): method test_extract_replace_value_get_dataflow_name (line 219) | def test_extract_replace_value_get_dataflow_name(self, mock_workspace): method test_extract_item_attribute_valid (line 247) | def test_extract_item_attribute_valid(self, mock_workspace): method test_extract_item_attribute_invalid (line 285) | def test_extract_item_attribute_invalid(self, mock_workspace): method test_extract_item_attribute_get_dataflow_name (line 301) | def test_extract_item_attribute_get_dataflow_name(self, mock_workspace): method test_extract_workspace_id_direct (line 319) | def test_extract_workspace_id_direct(self, mock_workspace): method test_extract_workspace_id_resolve (line 330) | def test_extract_workspace_id_resolve(self, mock_workspace): method test_extract_workspace_id_with_workspace_name_variable (line 347) | def test_extract_workspace_id_with_workspace_name_variable(self, mock_... method test_extract_workspace_id_name_encoded (line 357) | def test_extract_workspace_id_name_encoded(self, mock_workspace): method test_extract_workspace_id_resolve_error (line 367) | def test_extract_workspace_id_resolve_error(self, mock_workspace): method test_extract_workspace_id_general_error (line 378) | def test_extract_workspace_id_general_error(self, mock_workspace): method test_extract_item_attribute_null_return (line 389) | def test_extract_item_attribute_null_return(self, mock_workspace): method test_extract_item_attribute_invalid_attribute (line 399) | def test_extract_item_attribute_invalid_attribute(self, mock_workspace): method test_extract_workspace_id_with_item_lookup (line 409) | def test_extract_workspace_id_with_item_lookup(self, mock_workspace): method test_extract_workspace_id_with_item_lookup_not_found (line 429) | def test_extract_workspace_id_with_item_lookup_not_found(self, mock_wo... method test_extract_workspace_id_with_item_lookup_invalid_format (line 459) | def test_extract_workspace_id_with_item_lookup_invalid_format(self, mo... method test_extract_workspace_id_with_item_lookup_sqlendpoint (line 467) | def test_extract_workspace_id_with_item_lookup_sqlendpoint(self, mock_... method test_extract_workspace_id_with_item_lookup_queryserviceuri (line 484) | def test_extract_workspace_id_with_item_lookup_queryserviceuri(self, m... method test_extract_workspace_id_with_item_lookup_sqlendpointid (line 501) | def test_extract_workspace_id_with_item_lookup_sqlendpointid(self, moc... method test_extract_replace_value_workspace_name (line 518) | def test_extract_replace_value_workspace_name(self, mock_workspace): method test_extract_parameter_filters (line 536) | def test_extract_parameter_filters(self, mock_workspace): method test_check_parameter_structure (line 564) | def test_check_parameter_structure(self): method test_is_valid_structure (line 576) | def test_is_valid_structure(self): method test_is_valid_structure_semantic_model_binding_new_format (line 606) | def test_is_valid_structure_semantic_model_binding_new_format(self): method test_validate_parameter_file (line 660) | def test_validate_parameter_file(self, mock_validate_env, mock_validat... method test_validate_parameter_file_with_custom_file_name (line 696) | def test_validate_parameter_file_with_custom_file_name( method test_validate_parameter_file_with_custom_file_path (line 735) | def test_validate_parameter_file_with_custom_file_path( method test_validate_parameter_file_with_both_custom_name_and_path (line 774) | def test_validate_parameter_file_with_both_custom_name_and_path( method test_validate_parameter_file_with_none_item_type_in_scope (line 814) | def test_validate_parameter_file_with_none_item_type_in_scope( method test_find_match (line 851) | def test_find_match(self): method test_check_replacement (line 872) | def test_check_replacement(self, temp_repository): method test_replace_key_value_valid_json (line 891) | def test_replace_key_value_valid_json(self, mock_workspace): method test_replace_key_value_environment_not_found (line 911) | def test_replace_key_value_environment_not_found(self, mock_workspace): method test_replace_key_value_invalid_json (line 924) | def test_replace_key_value_invalid_json(self, mock_workspace): method test_replace_key_value (line 933) | def test_replace_key_value(self, mock_workspace): method test_replace_key_value_with_items_notation (line 958) | def test_replace_key_value_with_items_notation(self, mock_workspace): method test_replace_key_value_with_items_notation_and_non_string_values (line 1012) | def test_replace_key_value_with_items_notation_and_non_string_values(s... method test_replace_key_value_yaml_valid (line 1060) | def test_replace_key_value_yaml_valid(self, mock_workspace): method test_replace_key_value_yaml_environment_not_found (line 1083) | def test_replace_key_value_yaml_environment_not_found(self, mock_works... method test_replace_key_value_yaml_invalid (line 1099) | def test_replace_key_value_yaml_invalid(self, mock_workspace): method test_replace_key_value_yaml_empty_content (line 1108) | def test_replace_key_value_yaml_empty_content(self, mock_workspace): method test_replace_key_value_yaml_nested_structure (line 1117) | def test_replace_key_value_yaml_nested_structure(self, mock_workspace): method test_replace_key_value_yaml_with_items_notation (line 1152) | def test_replace_key_value_yaml_with_items_notation(self, mock_workspa... method test_replace_key_value_yaml_with_non_string_values (line 1186) | def test_replace_key_value_yaml_with_non_string_values(self, mock_work... method test_replace_variables_in_parameter_file (line 1228) | def test_replace_variables_in_parameter_file(self, monkeypatch): method test_replace_variables_in_parameter_file_feature_disabled (line 1255) | def test_replace_variables_in_parameter_file_feature_disabled(self, mo... method test_replace_env_variables_in_content (line 1287) | def test_replace_env_variables_in_content(self, monkeypatch): method test_process_environment_key (line 1315) | def test_process_environment_key(self, mock_workspace): method test_validate_item_type_in_scope_with_none (line 1371) | def test_validate_item_type_in_scope_with_none(self): method test_validate_item_type_in_scope_with_valid_list (line 1384) | def test_validate_item_type_in_scope_with_valid_list(self): method test_validate_item_type_in_scope_with_invalid_type (line 1393) | def test_validate_item_type_in_scope_with_invalid_type(self): class TestPathUtilities (line 1403) | class TestPathUtilities: method test_process_input_path_none (line 1406) | def test_process_input_path_none(self, temp_repository): method test_process_input_path_string (line 1411) | def test_process_input_path_string(self, temp_repository, monkeypatch): method test_process_input_path_list (line 1443) | def test_process_input_path_list(self, temp_repository, monkeypatch): method test_process_input_path_has_magic_exception (line 1478) | def test_process_input_path_has_magic_exception(self, temp_repository,... method test_resolve_input_path_with_invalid_wildcard_syntax (line 1514) | def test_resolve_input_path_with_invalid_wildcard_syntax(self, temp_re... method test_process_input_path_some_invalid (line 1532) | def test_process_input_path_some_invalid(self, temp_repository, monkey... method test_process_wildcard_path (line 1574) | def test_process_wildcard_path(self, temp_repository, monkeypatch): method test_process_regular_path (line 1627) | def test_process_regular_path(self, temp_repository, monkeypatch): method test_resolve_nonexistent_file_path (line 1659) | def test_resolve_nonexistent_file_path(self, temp_repository): method test_resolve_directory_file_path (line 1666) | def test_resolve_directory_file_path(self, temp_repository): method test_resolve_input_path_absolute_path (line 1673) | def test_resolve_input_path_absolute_path(self): method test_resolve_outside_repo_file_path (line 1690) | def test_resolve_outside_repo_file_path(self, temp_repository): method test_resolve_invalid_file_path (line 1704) | def test_resolve_invalid_file_path(self, temp_repository, monkeypatch): method test_validate_wildcard_syntax_invalid (line 1720) | def test_validate_wildcard_syntax_invalid(self): method test_valid_wildcard_syntax (line 1738) | def test_valid_wildcard_syntax(self): method test_invalid_wildcard_syntax (line 1758) | def test_invalid_wildcard_syntax(self): method test_validate_nested_brackets_braces (line 1812) | def test_validate_nested_brackets_braces(self): FILE: tests/test_publish.py function mock_endpoint (line 29) | def mock_endpoint(): function temp_workspace_dir (line 49) | def temp_workspace_dir(): function experimental_feature_flags (line 56) | def experimental_feature_flags(): function create_test_item (line 68) | def create_test_item(base_path: Path, folder: Optional[str], name: str, ... function test_publish_only_existing_item_types (line 109) | def test_publish_only_existing_item_types(mock_endpoint, temp_workspace_... function test_publish_ontology_item (line 140) | def test_publish_ontology_item(mock_endpoint, temp_workspace_dir): function test_publish_data_build_tool_job_item (line 167) | def test_publish_data_build_tool_job_item(mock_endpoint, temp_workspace_... function test_default_none_item_type_in_scope_includes_all_types (line 194) | def test_default_none_item_type_in_scope_includes_all_types(mock_endpoin... function test_empty_item_type_in_scope_list (line 213) | def test_empty_item_type_in_scope_list(mock_endpoint, temp_workspace_dir): function test_invalid_item_types_in_scope (line 230) | def test_invalid_item_types_in_scope(mock_endpoint, temp_workspace_dir): function test_multiple_invalid_item_types_in_scope (line 244) | def test_multiple_invalid_item_types_in_scope(mock_endpoint, temp_worksp... function test_mixed_valid_and_invalid_item_types_in_scope (line 258) | def test_mixed_valid_and_invalid_item_types_in_scope(mock_endpoint, temp... function test_unpublish_feature_flag_warnings (line 277) | def test_unpublish_feature_flag_warnings(mock_endpoint, temp_workspace_d... function test_unpublish_with_feature_flags_enabled (line 324) | def test_unpublish_with_feature_flags_enabled(mock_endpoint, temp_worksp... function test_unpublish_orphan_item_is_deleted (line 365) | def test_unpublish_orphan_item_is_deleted(mock_endpoint, temp_workspace_... function test_unpublish_orphan_excluded_by_regex (line 413) | def test_unpublish_orphan_excluded_by_regex(mock_endpoint, temp_workspac... function test_unpublish_orphan_filtered_by_items_to_include (line 463) | def test_unpublish_orphan_filtered_by_items_to_include(mock_endpoint, te... function test_unpublish_no_orphans_no_deletion (line 512) | def test_unpublish_no_orphans_no_deletion(mock_endpoint, temp_workspace_... function test_mirrored_database_published_before_lakehouse (line 558) | def test_mirrored_database_published_before_lakehouse(mock_endpoint, tem... function test_folder_exclusion_with_regex (line 611) | def test_folder_exclusion_with_regex(mock_endpoint, temp_workspace_dir): function test_folder_exclusion_with_anchored_regex (line 646) | def test_folder_exclusion_with_anchored_regex(mock_endpoint, temp_worksp... function test_item_name_exclusion_still_works (line 675) | def test_item_name_exclusion_still_works(mock_endpoint, temp_workspace_d... function test_folder_inclusion_with_folder_path_to_include (line 707) | def test_folder_inclusion_with_folder_path_to_include(mock_endpoint, tem... function test_folder_inclusion_and_exclusion_together (line 751) | def test_folder_inclusion_and_exclusion_together(mock_endpoint, temp_wor... function test_empty_folder_path_to_include_raises_error (line 781) | def test_empty_folder_path_to_include_raises_error(mock_endpoint, temp_w... function test_folder_exclusion_with_items_to_include (line 807) | def test_folder_exclusion_with_items_to_include(mock_endpoint, temp_work... function test_folder_inclusion_with_item_exclusion (line 841) | def test_folder_inclusion_with_item_exclusion(mock_endpoint, temp_worksp... function test_folder_inclusion_with_items_to_include (line 871) | def test_folder_inclusion_with_items_to_include(mock_endpoint, temp_work... function test_all_filters_combined (line 905) | def test_all_filters_combined(mock_endpoint, temp_workspace_dir): class TestNotebookPublisher (line 947) | class TestNotebookPublisher: method mock_workspace (line 951) | def mock_workspace(self): method publisher (line 958) | def publisher(self, mock_workspace): method _create_mock_item (line 964) | def _create_mock_item(self, file_suffix: str) -> MagicMock: method test_publish_ipynb_includes_api_format (line 972) | def test_publish_ipynb_includes_api_format(self, publisher, mock_works... method test_publish_non_ipynb_excludes_api_format (line 985) | def test_publish_non_ipynb_excludes_api_format(self, publisher, mock_w... method test_publish_mixed_files_with_ipynb (line 996) | def test_publish_mixed_files_with_ipynb(self, publisher, mock_workspace): method test_item_type_is_notebook (line 1015) | def test_item_type_is_notebook(self, publisher): method test_files_sorted_same_stem_content_before_settings (line 1019) | def test_files_sorted_same_stem_content_before_settings(self, publisher): method test_files_sorted_with_unknown_extension (line 1037) | def test_files_sorted_with_unknown_extension(self, publisher): FILE: tests/test_response_collection.py function mock_endpoint (line 21) | def mock_endpoint(): function test_workspace_with_notebook (line 56) | def test_workspace_with_notebook(mock_endpoint): function test_responses_initialized_as_none (line 129) | def test_responses_initialized_as_none(test_workspace_with_notebook): function test_publish_item_without_response_collection (line 141) | def test_publish_item_without_response_collection(test_workspace_with_no... function test_publish_item_with_response_collection (line 155) | def test_publish_item_with_response_collection(test_workspace_with_noteb... function test_publish_all_items_no_feature_flag (line 180) | def test_publish_all_items_no_feature_flag(test_workspace_with_notebook): function test_publish_all_items_with_feature_flag (line 190) | def test_publish_all_items_with_feature_flag(test_workspace_with_notebook): function test_workspace_responses_access_pattern (line 206) | def test_workspace_responses_access_pattern(test_workspace_with_notebook): function test_publish_item_skipped_no_response_stored (line 228) | def test_publish_item_skipped_no_response_stored(test_workspace_with_not... function test_append_feature_flag_enables_response_collection (line 245) | def test_append_feature_flag_enables_response_collection(test_workspace_... function test_unpublish_item_without_response_collection (line 266) | def test_unpublish_item_without_response_collection(test_workspace_with_... function test_unpublish_item_with_response_collection (line 276) | def test_unpublish_item_with_response_collection(test_workspace_with_not... function test_unpublish_item_does_not_write_to_publish_responses (line 294) | def test_unpublish_item_does_not_write_to_publish_responses(test_workspa... function test_unpublish_item_failure_does_not_store_response (line 314) | def test_unpublish_item_failure_does_not_store_response(test_workspace_w... function test_unpublish_all_orphan_items_no_feature_flag (line 344) | def test_unpublish_all_orphan_items_no_feature_flag(test_workspace_with_... function test_unpublish_all_orphan_items_with_feature_flag (line 355) | def test_unpublish_all_orphan_items_with_feature_flag(test_workspace_wit... function test_unpublish_all_orphan_items_empty_returns_none (line 391) | def test_unpublish_all_orphan_items_empty_returns_none(test_workspace_wi... function test_unpublish_does_not_modify_publish_responses (line 414) | def test_unpublish_does_not_modify_publish_responses(test_workspace_with... function test_publish_does_not_modify_unpublish_responses (line 435) | def test_publish_does_not_modify_unpublish_responses(test_workspace_with... function test_publish_and_unpublish_responses_are_separate_dicts (line 455) | def test_publish_and_unpublish_responses_are_separate_dicts(test_workspa... FILE: tests/test_semantic_model_exclude.py function _make_sm (line 26) | def _make_sm(name: str, guid: str = "", skip_publish: bool = False) -> I... function _make_connections (line 33) | def _make_connections(*conn_ids: str) -> dict: function test_bind_skips_model_with_skip_publish_true (line 46) | def test_bind_skips_model_with_skip_publish_true(): function test_bind_skips_model_without_guid (line 84) | def test_bind_skips_model_without_guid(): function test_bind_processes_included_models_normally (line 115) | def test_bind_processes_included_models_normally(): function test_post_publish_all_skips_excluded_semantic_models (line 146) | def test_post_publish_all_skips_excluded_semantic_models(): FILE: tests/test_shortcut_exclude.py function mock_fabric_workspace (line 19) | def mock_fabric_workspace(): function mock_item (line 45) | def mock_item(): function create_shortcut_file (line 53) | def create_shortcut_file(shortcuts_data): function test_process_shortcuts_with_exclude_regex_filters_shortcuts (line 61) | def test_process_shortcuts_with_exclude_regex_filters_shortcuts(mock_fab... function test_process_shortcuts_without_exclude_regex_publishes_all (line 132) | def test_process_shortcuts_without_exclude_regex_publishes_all(mock_fabr... function test_process_shortcuts_exclude_regex_excludes_all_matching (line 186) | def test_process_shortcuts_exclude_regex_excludes_all_matching(mock_fabr... function test_process_shortcuts_with_complex_regex_pattern (line 240) | def test_process_shortcuts_with_complex_regex_pattern(mock_fabric_worksp... function shortcut_publish_enabled (line 317) | def shortcut_publish_enabled(): function _make_item (line 326) | def _make_item(name: str, guid: str = "") -> Item: function test_excluded_lakehouses_marked_skip_publish_with_items_to_include (line 331) | def test_excluded_lakehouses_marked_skip_publish_with_items_to_include(): function test_lakehouses_without_guid_are_not_shortcut_published (line 366) | def test_lakehouses_without_guid_are_not_shortcut_published(): function test_publish_all_marks_excluded_items_skip_publish (line 395) | def test_publish_all_marks_excluded_items_skip_publish(): FILE: tests/test_subfolders.py function mock_endpoint (line 18) | def mock_endpoint(): function temp_workspace_dir (line 26) | def temp_workspace_dir(tmp_path): function valid_workspace_id (line 33) | def valid_workspace_id(): function create_platform_file (line 38) | def create_platform_file(item_path, item_type="Notebook", item_name="Tes... function repository_with_subfolders (line 63) | def repository_with_subfolders(tmp_path): function patched_fabric_workspace (line 99) | def patched_fabric_workspace(mock_endpoint): function test_refresh_repository_folders (line 120) | def test_refresh_repository_folders(repository_with_subfolders, patched_... function test_publish_folders_hierarchy (line 147) | def test_publish_folders_hierarchy(repository_with_subfolders, patched_f... function test_folder_hierarchy_preservation (line 181) | def test_folder_hierarchy_preservation(repository_with_subfolders, patch... function test_item_folder_association (line 229) | def test_item_folder_association(repository_with_subfolders, valid_works... function test_deeply_nested_subfolders (line 296) | def test_deeply_nested_subfolders(tmp_path, patched_fabric_workspace, va... function test_folder_rename_operations (line 367) | def test_folder_rename_operations(tmp_path, patched_fabric_workspace, va... function test_special_character_handling (line 435) | def test_special_character_handling(tmp_path, patched_fabric_workspace, ... function test_parent_folder_with_only_subfolder_containing_items (line 499) | def test_parent_folder_with_only_subfolder_containing_items(tmp_path, pa... function test_large_number_of_folders_and_items (line 558) | def test_large_number_of_folders_and_items(tmp_path, patched_fabric_work... FILE: tests/test_validate_env_vars.py class TestValidHostnameRegex (line 16) | class TestValidHostnameRegex: method test_valid_hostnames (line 49) | def test_valid_hostnames(self, hostname): method test_invalid_hostnames (line 80) | def test_invalid_hostnames(self, hostname): class TestValidateApiUrl (line 84) | class TestValidateApiUrl: method test_accepts_valid_fabric_url (line 87) | def test_accepts_valid_fabric_url(self): method test_accepts_valid_powerbi_url (line 91) | def test_accepts_valid_powerbi_url(self): method test_strips_trailing_slash (line 95) | def test_strips_trailing_slash(self): method test_label_appears_in_error_message (line 99) | def test_label_appears_in_error_message(self): method test_rejects_empty_string (line 103) | def test_rejects_empty_string(self): method test_rejects_whitespace_only (line 107) | def test_rejects_whitespace_only(self): method test_rejects_http_scheme (line 111) | def test_rejects_http_scheme(self): method test_rejects_invalid_hostname (line 115) | def test_rejects_invalid_hostname(self): method test_rejects_path_components (line 119) | def test_rejects_path_components(self): method test_accepts_private_link_url (line 123) | def test_accepts_private_link_url(self): class TestValidateApiUrlHostname (line 129) | class TestValidateApiUrlHostname: method test_returns_default_when_env_not_set (line 132) | def test_returns_default_when_env_not_set(self): method test_returns_default_powerbi_url_when_env_not_set (line 138) | def test_returns_default_powerbi_url_when_env_not_set(self): method test_returns_env_value_when_set (line 144) | def test_returns_env_value_when_set(self, monkeypatch): method test_rejects_path_components (line 149) | def test_rejects_path_components(self, monkeypatch): method test_raises_on_invalid_hostname (line 154) | def test_raises_on_invalid_hostname(self, monkeypatch): method test_raises_on_empty_hostname (line 159) | def test_raises_on_empty_hostname(self, monkeypatch): method test_prefixed_hostname_accepted (line 164) | def test_prefixed_hostname_accepted(self, monkeypatch): method test_workspace_id_pattern_accepted (line 169) | def test_workspace_id_pattern_accepted(self, monkeypatch): method test_dotted_prefix_hostname_accepted (line 175) | def test_dotted_prefix_hostname_accepted(self, monkeypatch): method test_hostname_without_scheme_rejected (line 180) | def test_hostname_without_scheme_rejected(self, monkeypatch): method test_rejects_http_scheme (line 185) | def test_rejects_http_scheme(self, monkeypatch): method test_rejects_ftp_scheme (line 190) | def test_rejects_ftp_scheme(self, monkeypatch): method test_raises_on_whitespace_only (line 195) | def test_raises_on_whitespace_only(self, monkeypatch): method test_strips_trailing_slash (line 200) | def test_strips_trailing_slash(self, monkeypatch): method test_rejects_url_with_no_authority (line 205) | def test_rejects_url_with_no_authority(self, monkeypatch):