From 381af3ce68868a123d28c5bc6ac01376da6eb99b Mon Sep 17 00:00:00 2001 From: Lulzim Bilali Date: Thu, 27 Nov 2025 12:00:24 +0100 Subject: [PATCH 1/4] create a shortcut pointing to warehouse tables --- src/sempy_labs/_helper_functions.py | 23 +++++++++++++++++++++++ src/sempy_labs/lakehouse/_shortcuts.py | 23 +++++++++++++++++------ 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/src/sempy_labs/_helper_functions.py b/src/sempy_labs/_helper_functions.py index 4c82e544..1726169c 100644 --- a/src/sempy_labs/_helper_functions.py +++ b/src/sempy_labs/_helper_functions.py @@ -1747,6 +1747,29 @@ def resolve_warehouse_id( return resolve_item_id(item=warehouse, type="Warehouse", workspace=workspace) +def resolve_warehouse_name_and_id( + warehouse: Optional[str | UUID] = None, workspace: Optional[str | UUID] = None +) -> Tuple[str, UUID]: + + workspace_id = resolve_workspace_id(workspace) + type = "Warehouse" + + if warehouse is None: + warehouse_id = _get_fabric_context_setting(name="trident.warehouse.id") + if warehouse_id == "": + raise ValueError( + f"{icons.red_dot} Cannot resolve a warehouse. Please enter a valid warehouse or make sure a warehouse is attached to the notebook." + ) + (warehouse_name, warehouse_id) = resolve_item_name_and_id( + item=warehouse_id, type=type, workspace=workspace_id + ) + + else: + (warehouse_name, warehouse_id) = resolve_item_name_and_id( + item=warehouse, type=type, workspace=workspace_id + ) + + return warehouse_name, warehouse_id def get_language_codes(languages: str | List[str]): diff --git a/src/sempy_labs/lakehouse/_shortcuts.py b/src/sempy_labs/lakehouse/_shortcuts.py index 103f67d1..83879cbe 100644 --- a/src/sempy_labs/lakehouse/_shortcuts.py +++ b/src/sempy_labs/lakehouse/_shortcuts.py @@ -2,6 +2,7 @@ import pandas as pd from sempy_labs._helper_functions import ( resolve_lakehouse_name_and_id, + resolve_warehouse_name_and_id, resolve_workspace_id, resolve_workspace_name_and_id, _base_api, @@ -39,9 +40,9 @@ def create_shortcut_onelake( table_name : str The table name for which a shortcut will be created. source_lakehouse : str | uuid.UUID - The Fabric lakehouse in which the table resides. + The Fabric lakehouse or warehouse in which the table resides. source_workspace : str | uuid.UUID - The name or ID of the Fabric workspace in which the source lakehouse exists. + The name or ID of the Fabric workspace in which the source lakehouse or warehouse exists. destination_lakehouse : str | uuid.UUID, default=None The Fabric lakehouse in which the shortcut will be created. Defaults to None which resolves to the lakehouse attached to the notebook. @@ -74,9 +75,19 @@ def create_shortcut_onelake( source_workspace ) - (source_lakehouse_name, source_lakehouse_id) = resolve_lakehouse_name_and_id( - lakehouse=source_lakehouse, workspace=source_workspace_id - ) + error = None + source_type = 'lakehouse' + try: + (source_lakehouse_name, source_lakehouse_id) = resolve_lakehouse_name_and_id( + lakehouse=source_lakehouse, workspace=source_workspace_id + ) + except Exception as e: + error = e + if error: + (source_lakehouse_name, source_lakehouse_id) = resolve_warehouse_name_and_id( + warehouse=source_lakehouse, workspace=source_workspace_id + ) + source_type = 'warehouse' (destination_workspace_name, destination_workspace_id) = ( resolve_workspace_name_and_id(destination_workspace) @@ -144,7 +155,7 @@ def create_shortcut_onelake( ) print( - f"{icons.green_dot} The shortcut '{shortcut_name}' was created in the '{destination_lakehouse_name}' lakehouse within the '{destination_workspace_name}' workspace. It is based on the '{table_name}' table in the '{source_lakehouse_name}' lakehouse within the '{source_workspace_name}' workspace." + f"{icons.green_dot} The shortcut '{shortcut_name}' was created in the '{destination_lakehouse_name}' lakehouse within the '{destination_workspace_name}' workspace. It is based on the '{table_name}' table in the '{source_lakehouse_name}' {source_type} within the '{source_workspace_name}' workspace." ) From bd7f7c4345d2dd5c5b2d1ff7a33c9037c1b3e73b Mon Sep 17 00:00:00 2001 From: Lulzim Bilali Date: Thu, 27 Nov 2025 12:09:59 +0100 Subject: [PATCH 2/4] add logging for resolve_warehouse_name_and_id --- src/sempy_labs/_helper_functions.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/sempy_labs/_helper_functions.py b/src/sempy_labs/_helper_functions.py index 1726169c..df5c0ad3 100644 --- a/src/sempy_labs/_helper_functions.py +++ b/src/sempy_labs/_helper_functions.py @@ -1747,6 +1747,7 @@ def resolve_warehouse_id( return resolve_item_id(item=warehouse, type="Warehouse", workspace=workspace) +@log def resolve_warehouse_name_and_id( warehouse: Optional[str | UUID] = None, workspace: Optional[str | UUID] = None ) -> Tuple[str, UUID]: From 9095e7916bc8ab0b9dace96098ef2c37eb5ccb1b Mon Sep 17 00:00:00 2001 From: Lulzim Bilali Date: Thu, 27 Nov 2025 12:39:32 +0100 Subject: [PATCH 3/4] simplify resolve_warehouse_name_and_id since there is no way to get the attached warehouse --- src/sempy_labs/_helper_functions.py | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/src/sempy_labs/_helper_functions.py b/src/sempy_labs/_helper_functions.py index df5c0ad3..5c281782 100644 --- a/src/sempy_labs/_helper_functions.py +++ b/src/sempy_labs/_helper_functions.py @@ -1749,26 +1749,15 @@ def resolve_warehouse_id( @log def resolve_warehouse_name_and_id( - warehouse: Optional[str | UUID] = None, workspace: Optional[str | UUID] = None + warehouse: str | UUID = None, workspace: Optional[str | UUID] = None ) -> Tuple[str, UUID]: workspace_id = resolve_workspace_id(workspace) type = "Warehouse" - if warehouse is None: - warehouse_id = _get_fabric_context_setting(name="trident.warehouse.id") - if warehouse_id == "": - raise ValueError( - f"{icons.red_dot} Cannot resolve a warehouse. Please enter a valid warehouse or make sure a warehouse is attached to the notebook." - ) - (warehouse_name, warehouse_id) = resolve_item_name_and_id( - item=warehouse_id, type=type, workspace=workspace_id - ) - - else: - (warehouse_name, warehouse_id) = resolve_item_name_and_id( - item=warehouse, type=type, workspace=workspace_id - ) + (warehouse_name, warehouse_id) = resolve_item_name_and_id( + item=warehouse, type=type, workspace=workspace_id + ) return warehouse_name, warehouse_id From 0ea7281eae6badb5e7621e35954c4ab0a6af2f6e Mon Sep 17 00:00:00 2001 From: Lulzim Bilali Date: Thu, 27 Nov 2025 12:45:17 +0100 Subject: [PATCH 4/4] remove default value from warehouse argument --- src/sempy_labs/_helper_functions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sempy_labs/_helper_functions.py b/src/sempy_labs/_helper_functions.py index 5c281782..0684e626 100644 --- a/src/sempy_labs/_helper_functions.py +++ b/src/sempy_labs/_helper_functions.py @@ -1749,7 +1749,7 @@ def resolve_warehouse_id( @log def resolve_warehouse_name_and_id( - warehouse: str | UUID = None, workspace: Optional[str | UUID] = None + warehouse: str | UUID, workspace: Optional[str | UUID] = None ) -> Tuple[str, UUID]: workspace_id = resolve_workspace_id(workspace)