semantic-link-labs 0.12.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- semantic_link_labs-0.12.8.dist-info/METADATA +354 -0
- semantic_link_labs-0.12.8.dist-info/RECORD +243 -0
- semantic_link_labs-0.12.8.dist-info/WHEEL +5 -0
- semantic_link_labs-0.12.8.dist-info/licenses/LICENSE +21 -0
- semantic_link_labs-0.12.8.dist-info/top_level.txt +1 -0
- sempy_labs/__init__.py +606 -0
- sempy_labs/_a_lib_info.py +2 -0
- sempy_labs/_ai.py +437 -0
- sempy_labs/_authentication.py +264 -0
- sempy_labs/_bpa_translation/_model/_translations_am-ET.po +869 -0
- sempy_labs/_bpa_translation/_model/_translations_ar-AE.po +908 -0
- sempy_labs/_bpa_translation/_model/_translations_bg-BG.po +968 -0
- sempy_labs/_bpa_translation/_model/_translations_ca-ES.po +963 -0
- sempy_labs/_bpa_translation/_model/_translations_cs-CZ.po +943 -0
- sempy_labs/_bpa_translation/_model/_translations_da-DK.po +945 -0
- sempy_labs/_bpa_translation/_model/_translations_de-DE.po +988 -0
- sempy_labs/_bpa_translation/_model/_translations_el-GR.po +993 -0
- sempy_labs/_bpa_translation/_model/_translations_es-ES.po +971 -0
- sempy_labs/_bpa_translation/_model/_translations_fa-IR.po +933 -0
- sempy_labs/_bpa_translation/_model/_translations_fi-FI.po +942 -0
- sempy_labs/_bpa_translation/_model/_translations_fr-FR.po +994 -0
- sempy_labs/_bpa_translation/_model/_translations_ga-IE.po +967 -0
- sempy_labs/_bpa_translation/_model/_translations_he-IL.po +902 -0
- sempy_labs/_bpa_translation/_model/_translations_hi-IN.po +944 -0
- sempy_labs/_bpa_translation/_model/_translations_hu-HU.po +963 -0
- sempy_labs/_bpa_translation/_model/_translations_id-ID.po +946 -0
- sempy_labs/_bpa_translation/_model/_translations_is-IS.po +939 -0
- sempy_labs/_bpa_translation/_model/_translations_it-IT.po +986 -0
- sempy_labs/_bpa_translation/_model/_translations_ja-JP.po +846 -0
- sempy_labs/_bpa_translation/_model/_translations_ko-KR.po +839 -0
- sempy_labs/_bpa_translation/_model/_translations_mt-MT.po +967 -0
- sempy_labs/_bpa_translation/_model/_translations_nl-NL.po +978 -0
- sempy_labs/_bpa_translation/_model/_translations_pl-PL.po +962 -0
- sempy_labs/_bpa_translation/_model/_translations_pt-BR.po +962 -0
- sempy_labs/_bpa_translation/_model/_translations_pt-PT.po +957 -0
- sempy_labs/_bpa_translation/_model/_translations_ro-RO.po +968 -0
- sempy_labs/_bpa_translation/_model/_translations_ru-RU.po +964 -0
- sempy_labs/_bpa_translation/_model/_translations_sk-SK.po +952 -0
- sempy_labs/_bpa_translation/_model/_translations_sl-SL.po +950 -0
- sempy_labs/_bpa_translation/_model/_translations_sv-SE.po +942 -0
- sempy_labs/_bpa_translation/_model/_translations_ta-IN.po +976 -0
- sempy_labs/_bpa_translation/_model/_translations_te-IN.po +947 -0
- sempy_labs/_bpa_translation/_model/_translations_th-TH.po +924 -0
- sempy_labs/_bpa_translation/_model/_translations_tr-TR.po +953 -0
- sempy_labs/_bpa_translation/_model/_translations_uk-UA.po +961 -0
- sempy_labs/_bpa_translation/_model/_translations_zh-CN.po +804 -0
- sempy_labs/_bpa_translation/_model/_translations_zu-ZA.po +969 -0
- sempy_labs/_capacities.py +1198 -0
- sempy_labs/_capacity_migration.py +660 -0
- sempy_labs/_clear_cache.py +351 -0
- sempy_labs/_connections.py +610 -0
- sempy_labs/_dashboards.py +69 -0
- sempy_labs/_data_access_security.py +98 -0
- sempy_labs/_data_pipelines.py +162 -0
- sempy_labs/_dataflows.py +668 -0
- sempy_labs/_dax.py +501 -0
- sempy_labs/_daxformatter.py +80 -0
- sempy_labs/_delta_analyzer.py +467 -0
- sempy_labs/_delta_analyzer_history.py +301 -0
- sempy_labs/_dictionary_diffs.py +221 -0
- sempy_labs/_documentation.py +147 -0
- sempy_labs/_domains.py +51 -0
- sempy_labs/_eventhouses.py +182 -0
- sempy_labs/_external_data_shares.py +230 -0
- sempy_labs/_gateways.py +521 -0
- sempy_labs/_generate_semantic_model.py +521 -0
- sempy_labs/_get_connection_string.py +84 -0
- sempy_labs/_git.py +543 -0
- sempy_labs/_graphQL.py +90 -0
- sempy_labs/_helper_functions.py +2833 -0
- sempy_labs/_icons.py +149 -0
- sempy_labs/_job_scheduler.py +609 -0
- sempy_labs/_kql_databases.py +149 -0
- sempy_labs/_kql_querysets.py +124 -0
- sempy_labs/_kusto.py +137 -0
- sempy_labs/_labels.py +124 -0
- sempy_labs/_list_functions.py +1720 -0
- sempy_labs/_managed_private_endpoints.py +253 -0
- sempy_labs/_mirrored_databases.py +416 -0
- sempy_labs/_mirrored_warehouses.py +60 -0
- sempy_labs/_ml_experiments.py +113 -0
- sempy_labs/_model_auto_build.py +140 -0
- sempy_labs/_model_bpa.py +557 -0
- sempy_labs/_model_bpa_bulk.py +378 -0
- sempy_labs/_model_bpa_rules.py +859 -0
- sempy_labs/_model_dependencies.py +343 -0
- sempy_labs/_mounted_data_factories.py +123 -0
- sempy_labs/_notebooks.py +441 -0
- sempy_labs/_one_lake_integration.py +151 -0
- sempy_labs/_onelake.py +131 -0
- sempy_labs/_query_scale_out.py +433 -0
- sempy_labs/_refresh_semantic_model.py +435 -0
- sempy_labs/_semantic_models.py +468 -0
- sempy_labs/_spark.py +455 -0
- sempy_labs/_sql.py +241 -0
- sempy_labs/_sql_audit_settings.py +207 -0
- sempy_labs/_sql_endpoints.py +214 -0
- sempy_labs/_tags.py +201 -0
- sempy_labs/_translations.py +43 -0
- sempy_labs/_user_delegation_key.py +44 -0
- sempy_labs/_utils.py +79 -0
- sempy_labs/_vertipaq.py +1021 -0
- sempy_labs/_vpax.py +388 -0
- sempy_labs/_warehouses.py +234 -0
- sempy_labs/_workloads.py +140 -0
- sempy_labs/_workspace_identity.py +72 -0
- sempy_labs/_workspaces.py +595 -0
- sempy_labs/admin/__init__.py +170 -0
- sempy_labs/admin/_activities.py +167 -0
- sempy_labs/admin/_apps.py +145 -0
- sempy_labs/admin/_artifacts.py +65 -0
- sempy_labs/admin/_basic_functions.py +463 -0
- sempy_labs/admin/_capacities.py +508 -0
- sempy_labs/admin/_dataflows.py +45 -0
- sempy_labs/admin/_datasets.py +186 -0
- sempy_labs/admin/_domains.py +522 -0
- sempy_labs/admin/_external_data_share.py +100 -0
- sempy_labs/admin/_git.py +72 -0
- sempy_labs/admin/_items.py +265 -0
- sempy_labs/admin/_labels.py +211 -0
- sempy_labs/admin/_reports.py +241 -0
- sempy_labs/admin/_scanner.py +118 -0
- sempy_labs/admin/_shared.py +82 -0
- sempy_labs/admin/_sharing_links.py +110 -0
- sempy_labs/admin/_tags.py +131 -0
- sempy_labs/admin/_tenant.py +503 -0
- sempy_labs/admin/_tenant_keys.py +89 -0
- sempy_labs/admin/_users.py +140 -0
- sempy_labs/admin/_workspaces.py +236 -0
- sempy_labs/deployment_pipeline/__init__.py +23 -0
- sempy_labs/deployment_pipeline/_items.py +580 -0
- sempy_labs/directlake/__init__.py +57 -0
- sempy_labs/directlake/_autosync.py +58 -0
- sempy_labs/directlake/_directlake_schema_compare.py +120 -0
- sempy_labs/directlake/_directlake_schema_sync.py +161 -0
- sempy_labs/directlake/_dl_helper.py +274 -0
- sempy_labs/directlake/_generate_shared_expression.py +94 -0
- sempy_labs/directlake/_get_directlake_lakehouse.py +62 -0
- sempy_labs/directlake/_get_shared_expression.py +34 -0
- sempy_labs/directlake/_guardrails.py +96 -0
- sempy_labs/directlake/_list_directlake_model_calc_tables.py +70 -0
- sempy_labs/directlake/_show_unsupported_directlake_objects.py +90 -0
- sempy_labs/directlake/_update_directlake_model_lakehouse_connection.py +239 -0
- sempy_labs/directlake/_update_directlake_partition_entity.py +259 -0
- sempy_labs/directlake/_warm_cache.py +236 -0
- sempy_labs/dotnet_lib/dotnet.runtime.config.json +10 -0
- sempy_labs/environment/__init__.py +23 -0
- sempy_labs/environment/_items.py +212 -0
- sempy_labs/environment/_pubstage.py +223 -0
- sempy_labs/eventstream/__init__.py +37 -0
- sempy_labs/eventstream/_items.py +263 -0
- sempy_labs/eventstream/_topology.py +652 -0
- sempy_labs/graph/__init__.py +59 -0
- sempy_labs/graph/_groups.py +651 -0
- sempy_labs/graph/_sensitivity_labels.py +120 -0
- sempy_labs/graph/_teams.py +125 -0
- sempy_labs/graph/_user_licenses.py +96 -0
- sempy_labs/graph/_users.py +516 -0
- sempy_labs/graph_model/__init__.py +15 -0
- sempy_labs/graph_model/_background_jobs.py +63 -0
- sempy_labs/graph_model/_items.py +149 -0
- sempy_labs/lakehouse/__init__.py +67 -0
- sempy_labs/lakehouse/_blobs.py +247 -0
- sempy_labs/lakehouse/_get_lakehouse_columns.py +102 -0
- sempy_labs/lakehouse/_get_lakehouse_tables.py +274 -0
- sempy_labs/lakehouse/_helper.py +250 -0
- sempy_labs/lakehouse/_lakehouse.py +351 -0
- sempy_labs/lakehouse/_livy_sessions.py +143 -0
- sempy_labs/lakehouse/_materialized_lake_views.py +157 -0
- sempy_labs/lakehouse/_partitioning.py +165 -0
- sempy_labs/lakehouse/_schemas.py +217 -0
- sempy_labs/lakehouse/_shortcuts.py +440 -0
- sempy_labs/migration/__init__.py +35 -0
- sempy_labs/migration/_create_pqt_file.py +238 -0
- sempy_labs/migration/_direct_lake_to_import.py +105 -0
- sempy_labs/migration/_migrate_calctables_to_lakehouse.py +398 -0
- sempy_labs/migration/_migrate_calctables_to_semantic_model.py +148 -0
- sempy_labs/migration/_migrate_model_objects_to_semantic_model.py +533 -0
- sempy_labs/migration/_migrate_tables_columns_to_semantic_model.py +172 -0
- sempy_labs/migration/_migration_validation.py +71 -0
- sempy_labs/migration/_refresh_calc_tables.py +131 -0
- sempy_labs/mirrored_azure_databricks_catalog/__init__.py +15 -0
- sempy_labs/mirrored_azure_databricks_catalog/_discover.py +213 -0
- sempy_labs/mirrored_azure_databricks_catalog/_refresh_catalog_metadata.py +45 -0
- sempy_labs/ml_model/__init__.py +23 -0
- sempy_labs/ml_model/_functions.py +427 -0
- sempy_labs/report/_BPAReportTemplate.json +232 -0
- sempy_labs/report/__init__.py +55 -0
- sempy_labs/report/_bpareporttemplate/.pbi/localSettings.json +9 -0
- sempy_labs/report/_bpareporttemplate/.platform +11 -0
- sempy_labs/report/_bpareporttemplate/StaticResources/SharedResources/BaseThemes/CY24SU06.json +710 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/page.json +11 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/1b08bce3bebabb0a27a8/visual.json +191 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/2f22ddb70c301693c165/visual.json +438 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/3b1182230aa6c600b43a/visual.json +127 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/58577ba6380c69891500/visual.json +576 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/a2a8fa5028b3b776c96c/visual.json +207 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/adfd47ef30652707b987/visual.json +506 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/b6a80ee459e716e170b1/visual.json +127 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/ce3130a721c020cc3d81/visual.json +513 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/page.json +8 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/visuals/66e60dfb526437cd78d1/visual.json +112 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/page.json +11 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/07deb8bce824e1be37d7/visual.json +513 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0b1c68838818b32ad03b/visual.json +352 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0c171de9d2683d10b930/visual.json +37 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0efa01be0510e40a645e/visual.json +542 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/6bf2f0eb830ab53cc668/visual.json +221 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/88d8141cb8500b60030c/visual.json +127 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/a753273590beed656a03/visual.json +576 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/b8fdc82cddd61ac447bc/visual.json +127 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/page.json +9 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/visuals/ce8532a7e25020271077/visual.json +38 -0
- sempy_labs/report/_bpareporttemplate/definition/pages/pages.json +10 -0
- sempy_labs/report/_bpareporttemplate/definition/report.json +176 -0
- sempy_labs/report/_bpareporttemplate/definition/version.json +4 -0
- sempy_labs/report/_bpareporttemplate/definition.pbir +14 -0
- sempy_labs/report/_download_report.py +76 -0
- sempy_labs/report/_export_report.py +257 -0
- sempy_labs/report/_generate_report.py +427 -0
- sempy_labs/report/_paginated.py +76 -0
- sempy_labs/report/_report_bpa.py +354 -0
- sempy_labs/report/_report_bpa_rules.py +115 -0
- sempy_labs/report/_report_functions.py +581 -0
- sempy_labs/report/_report_helper.py +227 -0
- sempy_labs/report/_report_list_functions.py +110 -0
- sempy_labs/report/_report_rebind.py +149 -0
- sempy_labs/report/_reportwrapper.py +3100 -0
- sempy_labs/report/_save_report.py +147 -0
- sempy_labs/snowflake_database/__init__.py +10 -0
- sempy_labs/snowflake_database/_items.py +105 -0
- sempy_labs/sql_database/__init__.py +21 -0
- sempy_labs/sql_database/_items.py +201 -0
- sempy_labs/sql_database/_mirroring.py +79 -0
- sempy_labs/theme/__init__.py +12 -0
- sempy_labs/theme/_org_themes.py +129 -0
- sempy_labs/tom/__init__.py +3 -0
- sempy_labs/tom/_model.py +5977 -0
- sempy_labs/variable_library/__init__.py +19 -0
- sempy_labs/variable_library/_functions.py +403 -0
- sempy_labs/warehouse/__init__.py +28 -0
- sempy_labs/warehouse/_items.py +234 -0
- sempy_labs/warehouse/_restore_points.py +309 -0
sempy_labs/_gateways.py
ADDED
|
@@ -0,0 +1,521 @@
|
|
|
1
|
+
from sempy._utils._log import log
|
|
2
|
+
import pandas as pd
|
|
3
|
+
from typing import Optional
|
|
4
|
+
from sempy_labs._helper_functions import (
|
|
5
|
+
_is_valid_uuid,
|
|
6
|
+
resolve_capacity_id,
|
|
7
|
+
resolve_workspace_name_and_id,
|
|
8
|
+
resolve_dataset_name_and_id,
|
|
9
|
+
_update_dataframe_datatypes,
|
|
10
|
+
_base_api,
|
|
11
|
+
_create_dataframe,
|
|
12
|
+
)
|
|
13
|
+
from uuid import UUID
|
|
14
|
+
import sempy_labs._icons as icons
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@log
|
|
18
|
+
def list_gateways() -> pd.DataFrame:
|
|
19
|
+
"""
|
|
20
|
+
Returns a list of all gateways the user has permission for, including on-premises, on-premises (personal mode), and virtual network gateways.
|
|
21
|
+
|
|
22
|
+
This is a wrapper function for the following API: `Gateways - List Gateways <https://learn.microsoft.com/rest/api/fabric/core/gateways/list-gateways>`_.
|
|
23
|
+
|
|
24
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
25
|
+
|
|
26
|
+
Returns
|
|
27
|
+
-------
|
|
28
|
+
pandas.DataFrame
|
|
29
|
+
A pandas dataframe showing a list of all gateways the user has permission for, including on-premises, on-premises (personal mode), and virtual network gateways.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
columns = {
|
|
33
|
+
"Gateway Name": "string",
|
|
34
|
+
"Gateway Id": "string",
|
|
35
|
+
"Type": "string",
|
|
36
|
+
"Public Key Exponent": "string",
|
|
37
|
+
"Public Key Modulus": "string",
|
|
38
|
+
"Version": "string",
|
|
39
|
+
"Number Of Member Gateways": "int",
|
|
40
|
+
"Load Balancing Setting": "string",
|
|
41
|
+
"Allow Cloud Connection Refresh": "bool",
|
|
42
|
+
"Allow Custom Connectors": "bool",
|
|
43
|
+
}
|
|
44
|
+
df = _create_dataframe(columns=columns)
|
|
45
|
+
|
|
46
|
+
responses = _base_api(
|
|
47
|
+
request="/v1/gateways", client="fabric_sp", uses_pagination=True
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
rows = []
|
|
51
|
+
for r in responses:
|
|
52
|
+
for v in r.get("value", []):
|
|
53
|
+
rows.append(
|
|
54
|
+
{
|
|
55
|
+
"Gateway Name": v.get("displayName"),
|
|
56
|
+
"Gateway Id": v.get("id"),
|
|
57
|
+
"Type": v.get("type"),
|
|
58
|
+
"Public Key Exponent": v.get("publicKey", {}).get("exponent"),
|
|
59
|
+
"Public Key Modulus": v.get("publicKey", {}).get("modulus"),
|
|
60
|
+
"Version": v.get("version"),
|
|
61
|
+
"Number Of Member Gateways": v.get("numberOfMemberGateways", 0),
|
|
62
|
+
"Load Balancing Setting": v.get("loadBalancingSetting"),
|
|
63
|
+
"Allow Cloud Connection Refresh": v.get(
|
|
64
|
+
"allowCloudConnectionRefresh"
|
|
65
|
+
),
|
|
66
|
+
"Allow Custom Connectors": v.get("allowCustomConnectors"),
|
|
67
|
+
}
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
if rows:
|
|
71
|
+
df = pd.DataFrame(rows, columns=list(columns.keys()))
|
|
72
|
+
_update_dataframe_datatypes(dataframe=df, column_map=columns)
|
|
73
|
+
|
|
74
|
+
return df
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
@log
|
|
78
|
+
def _resolve_gateway_id(gateway: str | UUID) -> UUID:
|
|
79
|
+
|
|
80
|
+
if _is_valid_uuid(gateway):
|
|
81
|
+
return gateway
|
|
82
|
+
else:
|
|
83
|
+
dfG = list_gateways()
|
|
84
|
+
dfG_filt = dfG[dfG["Gateway Name"] == gateway]
|
|
85
|
+
|
|
86
|
+
if dfG_filt.empty:
|
|
87
|
+
raise ValueError(f"{icons.red_dot} The '{gateway}' gateway does not exist.")
|
|
88
|
+
|
|
89
|
+
return dfG_filt["Gateway Id"].iloc[0]
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
@log
|
|
93
|
+
def delete_gateway(gateway: str | UUID):
|
|
94
|
+
"""
|
|
95
|
+
Deletes a gateway.
|
|
96
|
+
|
|
97
|
+
This is a wrapper function for the following API: `Gateways - Delete Gateway <https://learn.microsoft.com/rest/api/fabric/core/gateways/delete-gateway>`_.
|
|
98
|
+
|
|
99
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
100
|
+
|
|
101
|
+
Parameters
|
|
102
|
+
----------
|
|
103
|
+
gateway : str | uuid.UUID
|
|
104
|
+
The gateway name or ID.
|
|
105
|
+
"""
|
|
106
|
+
|
|
107
|
+
gateway_id = _resolve_gateway_id(gateway)
|
|
108
|
+
_base_api(request=f"/v1/gateways/{gateway_id}", client="fabric_sp", method="delete")
|
|
109
|
+
print(f"{icons.green_dot} The '{gateway}' gateway has been deleted.")
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
@log
|
|
113
|
+
def list_gateway_role_assigments(gateway: str | UUID) -> pd.DataFrame:
|
|
114
|
+
"""
|
|
115
|
+
Returns a list of gateway role assignments.
|
|
116
|
+
|
|
117
|
+
This is a wrapper function for the following API: `Gateways - List Gateway Role Assignments <https://learn.microsoft.com/rest/api/fabric/core/gateways/list-gateway-role-assignments>`_.
|
|
118
|
+
|
|
119
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
120
|
+
|
|
121
|
+
Parameters
|
|
122
|
+
----------
|
|
123
|
+
gateway : str | uuid.UUID
|
|
124
|
+
The gateway name or ID.
|
|
125
|
+
|
|
126
|
+
Returns
|
|
127
|
+
-------
|
|
128
|
+
pandas.DataFrame
|
|
129
|
+
A pandas dataframe showing a list of gateway role assignments.
|
|
130
|
+
"""
|
|
131
|
+
|
|
132
|
+
columns = {
|
|
133
|
+
"Gateway Role Assignment Id": "string",
|
|
134
|
+
"Principal Id": "string",
|
|
135
|
+
"Principal Type": "string",
|
|
136
|
+
"Role": "string",
|
|
137
|
+
}
|
|
138
|
+
df = _create_dataframe(columns=columns)
|
|
139
|
+
gateway_id = _resolve_gateway_id(gateway)
|
|
140
|
+
responses = _base_api(
|
|
141
|
+
request=f"/v1/gateways/{gateway_id}/roleAssignments",
|
|
142
|
+
client="fabric_sp",
|
|
143
|
+
uses_pagination=True,
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
rows = []
|
|
147
|
+
for r in responses:
|
|
148
|
+
for v in r.get("value", []):
|
|
149
|
+
rows.append(
|
|
150
|
+
{
|
|
151
|
+
"Gateway Role Assignment Id": v.get("id"),
|
|
152
|
+
"Principal Id": v.get("principal", {}).get("id"),
|
|
153
|
+
"Principal Type": v.get("principal", {}).get("type"),
|
|
154
|
+
"Role": v.get("role"),
|
|
155
|
+
}
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
if rows:
|
|
159
|
+
df = pd.DataFrame(rows, columns=list(columns.keys()))
|
|
160
|
+
|
|
161
|
+
return df
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
@log
|
|
165
|
+
def delete_gateway_role_assignment(gateway: str | UUID, role_assignment_id: UUID):
|
|
166
|
+
"""
|
|
167
|
+
Delete the specified role assignment for the gateway.
|
|
168
|
+
|
|
169
|
+
This is a wrapper function for the following API: `Gateways - Delete Gateway Role Assignment <https://learn.microsoft.com/rest/api/fabric/core/gateways/delete-gateway-role-assignment>`_.
|
|
170
|
+
|
|
171
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
172
|
+
|
|
173
|
+
Parameters
|
|
174
|
+
----------
|
|
175
|
+
gateway : str | uuid.UUID
|
|
176
|
+
The gateway name or ID.
|
|
177
|
+
role_assignment_id : uuid.UUID
|
|
178
|
+
The role assignment ID.
|
|
179
|
+
"""
|
|
180
|
+
|
|
181
|
+
gateway_id = _resolve_gateway_id(gateway)
|
|
182
|
+
_base_api(
|
|
183
|
+
request=f"/v1/gateways/{gateway_id}/roleAssignments/{role_assignment_id}",
|
|
184
|
+
client="fabric_sp",
|
|
185
|
+
method="delete",
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
print(
|
|
189
|
+
f"{icons.green_dot} The '{role_assignment_id}' role assignment for the '{gateway}' gateway has been deleted."
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
@log
|
|
194
|
+
def _resolve_gateway_member_id(gateway: str | UUID, gateway_member: str | UUID) -> UUID:
|
|
195
|
+
|
|
196
|
+
gateway_id = _resolve_gateway_id(gateway)
|
|
197
|
+
dfM = list_gateway_members(gateway=gateway_id)
|
|
198
|
+
|
|
199
|
+
if _is_valid_uuid(gateway_member):
|
|
200
|
+
dfM_filt = dfM[dfM["Member Id"] == gateway_member]
|
|
201
|
+
else:
|
|
202
|
+
dfM_filt = dfM[dfM["Member Name"] == gateway_member]
|
|
203
|
+
if len(dfM_filt) == 0:
|
|
204
|
+
raise ValueError(
|
|
205
|
+
f"{icons.red_dot} The '{gateway_member}' gateway member does not exist within the '{gateway}' gateway."
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
return dfM_filt["Member Id"].iloc[0]
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
@log
|
|
212
|
+
def delete_gateway_member(gateway: str | UUID, gateway_member: str | UUID):
|
|
213
|
+
"""
|
|
214
|
+
Delete gateway member of an on-premises gateway.
|
|
215
|
+
|
|
216
|
+
This is a wrapper function for the following API: `Gateways - Delete Gateway Member <https://learn.microsoft.com/rest/api/fabric/core/gateways/delete-gateway-member>`_.
|
|
217
|
+
|
|
218
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
219
|
+
|
|
220
|
+
Parameters
|
|
221
|
+
----------
|
|
222
|
+
gateway : str | uuid.UUID
|
|
223
|
+
The gateway name or ID.
|
|
224
|
+
gateway_member : str | uuid.UUID
|
|
225
|
+
The gateway member name or ID.
|
|
226
|
+
"""
|
|
227
|
+
|
|
228
|
+
gateway_id = _resolve_gateway_id(gateway)
|
|
229
|
+
member_id = _resolve_gateway_member_id(
|
|
230
|
+
gateway=gateway_id, gateway_member=gateway_member
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
_base_api(
|
|
234
|
+
request=f"/v1/gateways/{gateway_id}/members/{member_id}",
|
|
235
|
+
client="fabric_sp",
|
|
236
|
+
method="delete",
|
|
237
|
+
)
|
|
238
|
+
print(
|
|
239
|
+
f"{icons.green_dot} The '{member_id}' member for the '{gateway}' gateway has been deleted."
|
|
240
|
+
)
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
@log
|
|
244
|
+
def list_gateway_members(gateway: str | UUID) -> pd.DataFrame:
|
|
245
|
+
"""
|
|
246
|
+
Lists gateway members of an on-premises gateway.
|
|
247
|
+
|
|
248
|
+
This is a wrapper function for the following API: `Gateways - List Gateway Members <https://learn.microsoft.com/rest/api/fabric/core/gateways/list-gateway-members>`_.
|
|
249
|
+
|
|
250
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
251
|
+
|
|
252
|
+
Parameters
|
|
253
|
+
----------
|
|
254
|
+
gateway : str | uuid.UUID
|
|
255
|
+
The gateway name or ID.
|
|
256
|
+
|
|
257
|
+
Returns
|
|
258
|
+
-------
|
|
259
|
+
pandas.DataFrame
|
|
260
|
+
A pandas dataframe showing a list of gateway members of an on-premises gateway.
|
|
261
|
+
"""
|
|
262
|
+
|
|
263
|
+
gateway_id = _resolve_gateway_id(gateway)
|
|
264
|
+
|
|
265
|
+
columns = {
|
|
266
|
+
"Member Id": "string",
|
|
267
|
+
"Member Name": "string",
|
|
268
|
+
"Public Key Exponent": "string",
|
|
269
|
+
"Public Key Modulus": "string",
|
|
270
|
+
"Version": "string",
|
|
271
|
+
"Enabled": "bool",
|
|
272
|
+
}
|
|
273
|
+
df = _create_dataframe(columns=columns)
|
|
274
|
+
|
|
275
|
+
response = _base_api(
|
|
276
|
+
request=f"/v1/gateways/{gateway_id}/members", client="fabric_sp"
|
|
277
|
+
)
|
|
278
|
+
|
|
279
|
+
rows = []
|
|
280
|
+
for v in response.json().get("value", []):
|
|
281
|
+
rows.append(
|
|
282
|
+
{
|
|
283
|
+
"Member Id": v.get("id"),
|
|
284
|
+
"Member Name": v.get("displayName"),
|
|
285
|
+
"Public Key Exponent": v.get("publicKey", {}).get("exponent"),
|
|
286
|
+
"Public Key Modulus": v.get("publicKey", {}).get("modulus"),
|
|
287
|
+
"Version": v.get("version"),
|
|
288
|
+
"Enabled": v.get("enabled"),
|
|
289
|
+
}
|
|
290
|
+
)
|
|
291
|
+
|
|
292
|
+
if rows:
|
|
293
|
+
df = pd.DataFrame(rows, columns=list(columns.keys()))
|
|
294
|
+
_update_dataframe_datatypes(dataframe=df, column_map=columns)
|
|
295
|
+
|
|
296
|
+
return df
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
@log
|
|
300
|
+
def create_vnet_gateway(
|
|
301
|
+
name: str,
|
|
302
|
+
capacity: str | UUID,
|
|
303
|
+
inactivity_minutes_before_sleep: int,
|
|
304
|
+
number_of_member_gateways: int,
|
|
305
|
+
subscription_id: str,
|
|
306
|
+
resource_group: str,
|
|
307
|
+
virtual_network: str,
|
|
308
|
+
subnet: str,
|
|
309
|
+
):
|
|
310
|
+
"""
|
|
311
|
+
Creates a virtual network gateway.
|
|
312
|
+
|
|
313
|
+
This is a wrapper function for the following API: `Gateways - Create Gateway <https://learn.microsoft.com/rest/api/fabric/core/gateways/create-gateway>`_.
|
|
314
|
+
|
|
315
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
316
|
+
|
|
317
|
+
Parameters
|
|
318
|
+
----------
|
|
319
|
+
name : str
|
|
320
|
+
The gateway name.
|
|
321
|
+
capacity : str | uuid.UUID
|
|
322
|
+
The capacity name or Id.
|
|
323
|
+
inactivity_minutes_before_sleep : int
|
|
324
|
+
The minutes of inactivity before the virtual network gateway goes into auto-sleep. Must be one of the following values: 30, 60, 90, 120, 150, 240, 360, 480, 720, 1440.
|
|
325
|
+
number_of_member_gateways: int
|
|
326
|
+
The number of member gateways. A number between 1 and 7.
|
|
327
|
+
subscription_id : str
|
|
328
|
+
The subscription ID.
|
|
329
|
+
resource_group : str
|
|
330
|
+
The name of the resource group.
|
|
331
|
+
virtual_network : str
|
|
332
|
+
The name of the virtual network.
|
|
333
|
+
subnet : str
|
|
334
|
+
The name of the subnet.
|
|
335
|
+
"""
|
|
336
|
+
|
|
337
|
+
capacity_id = resolve_capacity_id(capacity=capacity)
|
|
338
|
+
payload = {
|
|
339
|
+
"type": "VirtualNetwork",
|
|
340
|
+
"displayName": name,
|
|
341
|
+
"capacityId": capacity_id,
|
|
342
|
+
"virtualNetworkAzureResource": {
|
|
343
|
+
"subscriptionId": subscription_id,
|
|
344
|
+
"resourceGroupName": resource_group,
|
|
345
|
+
"virtualNetworkName": virtual_network,
|
|
346
|
+
"subnetName": subnet,
|
|
347
|
+
},
|
|
348
|
+
"inactivityMinutesBeforeSleep": inactivity_minutes_before_sleep,
|
|
349
|
+
"numberOfMemberGateways": number_of_member_gateways,
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
_base_api(
|
|
353
|
+
request="/v1/gateways",
|
|
354
|
+
client="fabric_sp",
|
|
355
|
+
method="post",
|
|
356
|
+
payload=payload,
|
|
357
|
+
status_codes=201,
|
|
358
|
+
)
|
|
359
|
+
|
|
360
|
+
print(
|
|
361
|
+
f"{icons.green_dot} The '{name}' gateway was created within the '{capacity}' capacity."
|
|
362
|
+
)
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
@log
|
|
366
|
+
def update_on_premises_gateway(
|
|
367
|
+
gateway: str | UUID,
|
|
368
|
+
allow_cloud_connection_refresh: Optional[bool] = None,
|
|
369
|
+
allow_custom_connectors: Optional[bool] = None,
|
|
370
|
+
load_balancing_setting: Optional[str] = None,
|
|
371
|
+
):
|
|
372
|
+
"""
|
|
373
|
+
Updates an on-premises gateway.
|
|
374
|
+
|
|
375
|
+
This is a wrapper function for the following API: `Gateways - Update Gateway <https://learn.microsoft.com/rest/api/fabric/core/gateways/update-gateway>`_.
|
|
376
|
+
|
|
377
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
378
|
+
|
|
379
|
+
Parameters
|
|
380
|
+
----------
|
|
381
|
+
gateway : str | uuid.UUID
|
|
382
|
+
The gateway name or ID.
|
|
383
|
+
allow_cloud_connection_refresh : bool, default=None
|
|
384
|
+
Whether to allow cloud connections to refresh through this on-premises gateway. True - Allow, False - Do not allow.
|
|
385
|
+
allow_custom_connectors : bool, default=None
|
|
386
|
+
Whether to allow custom connectors to be used with this on-premises gateway. True - Allow, False - Do not allow.
|
|
387
|
+
load_balancing_setting : str, default=None
|
|
388
|
+
The `load balancing setting <https://learn.microsoft.com/rest/api/fabric/core/gateways/update-gateway?tabs=HTTP#loadbalancingsetting>`_ of the on-premises gateway.
|
|
389
|
+
"""
|
|
390
|
+
|
|
391
|
+
gateway_id = _resolve_gateway_id(gateway)
|
|
392
|
+
|
|
393
|
+
payload = {}
|
|
394
|
+
|
|
395
|
+
if allow_cloud_connection_refresh is not None:
|
|
396
|
+
payload["allowCloudConnectionRefresh"] = allow_cloud_connection_refresh
|
|
397
|
+
if allow_custom_connectors is not None:
|
|
398
|
+
payload["allowCustomConnectors"] = allow_custom_connectors
|
|
399
|
+
if load_balancing_setting is not None:
|
|
400
|
+
payload["loadBalancingSetting"] = load_balancing_setting
|
|
401
|
+
|
|
402
|
+
if not payload:
|
|
403
|
+
raise ValueError(
|
|
404
|
+
f"{icons.yellow_dot} The '{gateway}' gateway has not been update as no valid settings were provided."
|
|
405
|
+
)
|
|
406
|
+
|
|
407
|
+
payload["type"] = "OnPremises"
|
|
408
|
+
|
|
409
|
+
_base_api(
|
|
410
|
+
request=f"/v1/gateways/{gateway_id}",
|
|
411
|
+
client="fabric_sp",
|
|
412
|
+
method="patch",
|
|
413
|
+
payload=payload,
|
|
414
|
+
)
|
|
415
|
+
|
|
416
|
+
print(f"{icons.green_dot} The '{gateway}' has been updated accordingly.")
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
@log
|
|
420
|
+
def update_vnet_gateway(
|
|
421
|
+
gateway: str | UUID,
|
|
422
|
+
capacity: str | UUID,
|
|
423
|
+
inactivity_minutes_before_sleep: Optional[int] = None,
|
|
424
|
+
number_of_member_gateways: Optional[int] = None,
|
|
425
|
+
):
|
|
426
|
+
"""
|
|
427
|
+
Updates a virtual network gateway.
|
|
428
|
+
|
|
429
|
+
This is a wrapper function for the following API: `Gateways - Update Gateway <https://learn.microsoft.com/rest/api/fabric/core/gateways/update-gateway>`_.
|
|
430
|
+
|
|
431
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
432
|
+
|
|
433
|
+
Parameters
|
|
434
|
+
----------
|
|
435
|
+
gateway : str | uuid.UUID
|
|
436
|
+
The gateway name or ID.
|
|
437
|
+
capacity: str | uuid.UUID
|
|
438
|
+
The capacity name or ID.
|
|
439
|
+
inactivity_minutes_before_sleep : int, default=None
|
|
440
|
+
The minutes of inactivity before the virtual network gateway goes into auto-sleep. Must be one of the following values: 30, 60, 90, 120, 150, 240, 360, 480, 720, 1440.
|
|
441
|
+
number_of_member_gateways : int, default=None
|
|
442
|
+
The number of member gateways. A number between 1 and 7.
|
|
443
|
+
"""
|
|
444
|
+
|
|
445
|
+
gateway_id = _resolve_gateway_id(gateway)
|
|
446
|
+
|
|
447
|
+
payload = {}
|
|
448
|
+
|
|
449
|
+
if capacity is not None:
|
|
450
|
+
capacity_id = resolve_capacity_id(capacity=capacity)
|
|
451
|
+
payload["capacityId"] = capacity_id
|
|
452
|
+
if inactivity_minutes_before_sleep is not None:
|
|
453
|
+
payload["inactivityMinutesBeforeSleep"] = inactivity_minutes_before_sleep
|
|
454
|
+
if number_of_member_gateways is not None:
|
|
455
|
+
payload["numberOfMemberGateways"] = number_of_member_gateways
|
|
456
|
+
|
|
457
|
+
if not payload:
|
|
458
|
+
raise ValueError(
|
|
459
|
+
f"{icons.yellow_dot} The '{gateway}' gateway has not been update as no valid settings were provided."
|
|
460
|
+
)
|
|
461
|
+
|
|
462
|
+
payload["type"] = "VirtualNetwork"
|
|
463
|
+
|
|
464
|
+
_base_api(
|
|
465
|
+
request=f"/v1/gateways/{gateway_id}",
|
|
466
|
+
client="fabric_sp",
|
|
467
|
+
method="patch",
|
|
468
|
+
payload=payload,
|
|
469
|
+
)
|
|
470
|
+
print(f"{icons.green_dot} The '{gateway}' has been updated accordingly.")
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
@log
|
|
474
|
+
def bind_semantic_model_to_gateway(
|
|
475
|
+
dataset: str | UUID,
|
|
476
|
+
gateway: str | UUID,
|
|
477
|
+
workspace: Optional[str | UUID] = None,
|
|
478
|
+
data_source_object_ids: Optional[list[UUID]] = None,
|
|
479
|
+
):
|
|
480
|
+
"""
|
|
481
|
+
Binds the specified dataset from the specified workspace to the specified gateway.
|
|
482
|
+
|
|
483
|
+
This is a wrapper function for the following API: `Datasets - Bind To Gateway In Group <https://learn.microsoft.com/rest/api/power-bi/datasets/bind-to-gateway-in-group>`_.
|
|
484
|
+
|
|
485
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
486
|
+
|
|
487
|
+
Parameters
|
|
488
|
+
----------
|
|
489
|
+
dataset : str | uuid.UUID
|
|
490
|
+
The name or ID of the semantic model.
|
|
491
|
+
gateway : str | uuid.UUID
|
|
492
|
+
The name or ID of the gateway.
|
|
493
|
+
workspace : str | uuid.UUID, default=None
|
|
494
|
+
The workspace name or ID.
|
|
495
|
+
Defaults to None which resolves to the workspace of the attached lakehouse
|
|
496
|
+
or if no lakehouse attached, resolves to the workspace of the notebook.
|
|
497
|
+
data_source_object_ids : list[uuid.UUID], default=None
|
|
498
|
+
A list of data source object IDs to bind to the gateway.
|
|
499
|
+
"""
|
|
500
|
+
|
|
501
|
+
(workspace_name, workspace_id) = resolve_workspace_name_and_id(workspace)
|
|
502
|
+
(dataset_name, dataset_id) = resolve_dataset_name_and_id(
|
|
503
|
+
dataset, workspace=workspace_id
|
|
504
|
+
)
|
|
505
|
+
|
|
506
|
+
gateway_id = _resolve_gateway_id(gateway)
|
|
507
|
+
payload = {
|
|
508
|
+
"gatewayObjectId": gateway_id,
|
|
509
|
+
}
|
|
510
|
+
if data_source_object_ids is not None:
|
|
511
|
+
payload["datasourceObjectIds"] = data_source_object_ids
|
|
512
|
+
|
|
513
|
+
_base_api(
|
|
514
|
+
request=f"/v1.0/myorg/groups/{workspace_id}/datasets/{dataset_id}/Default.BindToGateway",
|
|
515
|
+
client="fabric_sp",
|
|
516
|
+
method="post",
|
|
517
|
+
payload=payload,
|
|
518
|
+
)
|
|
519
|
+
print(
|
|
520
|
+
f"{icons.green_dot} The '{dataset_name}' semantic model within the '{workspace_name}' workspace has been binded to the '{gateway_id}' gateway."
|
|
521
|
+
)
|