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
|
@@ -0,0 +1,610 @@
|
|
|
1
|
+
import pandas as pd
|
|
2
|
+
from typing import Optional
|
|
3
|
+
from sempy_labs._helper_functions import (
|
|
4
|
+
_is_valid_uuid,
|
|
5
|
+
resolve_workspace_id,
|
|
6
|
+
_update_dataframe_datatypes,
|
|
7
|
+
_base_api,
|
|
8
|
+
_create_dataframe,
|
|
9
|
+
resolve_item_id,
|
|
10
|
+
)
|
|
11
|
+
from uuid import UUID
|
|
12
|
+
import sempy_labs._icons as icons
|
|
13
|
+
from sempy_labs._gateways import _resolve_gateway_id
|
|
14
|
+
from sempy._utils._log import log
|
|
15
|
+
import warnings
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@log
|
|
19
|
+
def delete_connection(connection: str | UUID):
|
|
20
|
+
"""
|
|
21
|
+
Delete a connection.
|
|
22
|
+
|
|
23
|
+
This is a wrapper function for the following API: `Connections - Delete Connection <https://learn.microsoft.com/rest/api/fabric/core/connections/delete-connection>`_.
|
|
24
|
+
|
|
25
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
26
|
+
|
|
27
|
+
Parameters
|
|
28
|
+
----------
|
|
29
|
+
connection : str | uuid.UUID
|
|
30
|
+
The connection name or ID.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
connection_id = _resolve_connection_id(connection)
|
|
34
|
+
_base_api(
|
|
35
|
+
request=f"/v1/connections/{connection_id}", client="fabric_sp", method="delete"
|
|
36
|
+
)
|
|
37
|
+
print(f"{icons.green_dot} The '{connection}' connection has been deleted.")
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@log
|
|
41
|
+
def delete_connection_role_assignment(connection: str | UUID, role_assignment_id: UUID):
|
|
42
|
+
"""
|
|
43
|
+
Delete the specified role assignment for the connection.
|
|
44
|
+
|
|
45
|
+
This is a wrapper function for the following API: `Connections - Delete Connection Role Assignment <https://learn.microsoft.com/rest/api/fabric/core/connections/delete-connection-role-assignment>`_.
|
|
46
|
+
|
|
47
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
48
|
+
|
|
49
|
+
Parameters
|
|
50
|
+
----------
|
|
51
|
+
connection : str | uuid.UUID
|
|
52
|
+
The connection name or ID.
|
|
53
|
+
role_assignment_id : uuid.UUID
|
|
54
|
+
The role assignment ID.
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
connection_id = _resolve_connection_id(connection)
|
|
58
|
+
_base_api(
|
|
59
|
+
request=f"/v1/connections/{connection_id}/roleAssignments/{role_assignment_id}",
|
|
60
|
+
client="fabric_sp",
|
|
61
|
+
method="delete",
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
print(
|
|
65
|
+
f"{icons.green_dot} The '{role_assignment_id}' role assignment Id has been deleted from the '{connection}' connection."
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
@log
|
|
70
|
+
def _resolve_connection_id(connection: str | UUID) -> UUID:
|
|
71
|
+
|
|
72
|
+
if _is_valid_uuid(connection):
|
|
73
|
+
return connection
|
|
74
|
+
|
|
75
|
+
dfC = list_connections()
|
|
76
|
+
dfC_filt = dfC[dfC["Connection Name"] == connection]
|
|
77
|
+
|
|
78
|
+
if dfC_filt.empty:
|
|
79
|
+
raise ValueError(
|
|
80
|
+
f"{icons.red_dot} The '{connection}' is not a valid connection."
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
return dfC_filt["Connection Id"].iloc[0]
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
@log
|
|
87
|
+
def list_connection_role_assignments(connection: str | UUID) -> pd.DataFrame:
|
|
88
|
+
"""
|
|
89
|
+
Returns a list of connection role assignments.
|
|
90
|
+
|
|
91
|
+
This is a wrapper function for the following API: `Connections - List Connection Role Assignments <https://learn.microsoft.com/rest/api/fabric/core/connections/list-connection-role-assignments>`_.
|
|
92
|
+
|
|
93
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
94
|
+
|
|
95
|
+
Parameters
|
|
96
|
+
----------
|
|
97
|
+
connection : str | uuid.UUID
|
|
98
|
+
The connection name or ID.
|
|
99
|
+
|
|
100
|
+
Returns
|
|
101
|
+
-------
|
|
102
|
+
pandas.DataFrame
|
|
103
|
+
A pandas dataframe showing a list of connection role assignments.
|
|
104
|
+
"""
|
|
105
|
+
|
|
106
|
+
connection_id = _resolve_connection_id(connection)
|
|
107
|
+
|
|
108
|
+
columns = {
|
|
109
|
+
"Connection Role Assignment Id": "string",
|
|
110
|
+
"Principal Id": "string",
|
|
111
|
+
"Principal Type": "string",
|
|
112
|
+
"Role": "string",
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
df = _create_dataframe(columns=columns)
|
|
116
|
+
|
|
117
|
+
responses = _base_api(
|
|
118
|
+
request=f"/v1/connections/{connection_id}/roleAssignments",
|
|
119
|
+
client="fabric_sp",
|
|
120
|
+
uses_pagination=True,
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
rows = []
|
|
124
|
+
for r in responses:
|
|
125
|
+
for v in r.get("value", []):
|
|
126
|
+
rows.append(
|
|
127
|
+
{
|
|
128
|
+
"Connection Role Assignment Id": v.get("id"),
|
|
129
|
+
"Principal Id": v.get("principal", {}).get("id"),
|
|
130
|
+
"Principal Type": v.get("principal", {}).get("type"),
|
|
131
|
+
"Role": v.get("role"),
|
|
132
|
+
}
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
if rows:
|
|
136
|
+
df = pd.DataFrame(rows, columns=list(columns.keys()))
|
|
137
|
+
|
|
138
|
+
return df
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
@log
|
|
142
|
+
def list_connections() -> pd.DataFrame:
|
|
143
|
+
"""
|
|
144
|
+
Lists all available connections.
|
|
145
|
+
|
|
146
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
147
|
+
|
|
148
|
+
Returns
|
|
149
|
+
-------
|
|
150
|
+
pandas.DataFrame
|
|
151
|
+
A pandas dataframe showing all available connections.
|
|
152
|
+
"""
|
|
153
|
+
|
|
154
|
+
columns = {
|
|
155
|
+
"Connection Id": "string",
|
|
156
|
+
"Connection Name": "string",
|
|
157
|
+
"Gateway Id": "string",
|
|
158
|
+
"Connectivity Type": "string",
|
|
159
|
+
"Connection Path": "string",
|
|
160
|
+
"Connection Type": "string",
|
|
161
|
+
"Privacy Level": "string",
|
|
162
|
+
"Credential Type": "string",
|
|
163
|
+
"Single Sign On Type": "string",
|
|
164
|
+
"Connection Encryption": "string",
|
|
165
|
+
"Skip Test Connection": "bool",
|
|
166
|
+
}
|
|
167
|
+
df = _create_dataframe(columns=columns)
|
|
168
|
+
|
|
169
|
+
responses = _base_api(
|
|
170
|
+
request="/v1/connections", client="fabric_sp", uses_pagination=True
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
rows = []
|
|
174
|
+
for r in responses:
|
|
175
|
+
for i in r.get("value", []):
|
|
176
|
+
connection_details = i.get("connectionDetails", {})
|
|
177
|
+
credential_details = i.get("credentialDetails", {})
|
|
178
|
+
|
|
179
|
+
rows.append(
|
|
180
|
+
{
|
|
181
|
+
"Connection Id": i.get("id"),
|
|
182
|
+
"Connection Name": i.get("displayName"),
|
|
183
|
+
"Gateway Id": i.get("gatewayId"),
|
|
184
|
+
"Connectivity Type": i.get("connectivityType"),
|
|
185
|
+
"Connection Path": connection_details.get("path"),
|
|
186
|
+
"Connection Type": connection_details.get("type"),
|
|
187
|
+
"Privacy Level": i.get("privacyLevel"),
|
|
188
|
+
"Credential Type": (
|
|
189
|
+
credential_details.get("credentialType")
|
|
190
|
+
if credential_details
|
|
191
|
+
else None
|
|
192
|
+
),
|
|
193
|
+
"Single Sign On Type": (
|
|
194
|
+
credential_details.get("singleSignOnType")
|
|
195
|
+
if credential_details
|
|
196
|
+
else None
|
|
197
|
+
),
|
|
198
|
+
"Connection Encryption": (
|
|
199
|
+
credential_details.get("connectionEncryption")
|
|
200
|
+
if credential_details
|
|
201
|
+
else None
|
|
202
|
+
),
|
|
203
|
+
"Skip Test Connection": (
|
|
204
|
+
credential_details.get("skipTestConnection")
|
|
205
|
+
if credential_details
|
|
206
|
+
else None
|
|
207
|
+
),
|
|
208
|
+
}
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
if rows:
|
|
212
|
+
df = pd.DataFrame(rows, columns=list(columns.keys()))
|
|
213
|
+
_update_dataframe_datatypes(dataframe=df, column_map=columns)
|
|
214
|
+
|
|
215
|
+
return df
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
@log
|
|
219
|
+
def list_item_connections(
|
|
220
|
+
item: Optional[str | UUID] = None,
|
|
221
|
+
type: Optional[str] = None,
|
|
222
|
+
workspace: Optional[str | UUID] = None,
|
|
223
|
+
**kwargs,
|
|
224
|
+
) -> pd.DataFrame:
|
|
225
|
+
"""
|
|
226
|
+
Shows the list of connections that the specified item is connected to.
|
|
227
|
+
|
|
228
|
+
This is a wrapper function for the following API: `Items - List Item Connections <https://learn.microsoft.com/rest/api/fabric/core/items/list-item-connections>`_.
|
|
229
|
+
|
|
230
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
231
|
+
|
|
232
|
+
Parameters
|
|
233
|
+
----------
|
|
234
|
+
item : str | uuid.UUID
|
|
235
|
+
The item name or ID.
|
|
236
|
+
type : str
|
|
237
|
+
The `item type <https://learn.microsoft.com/rest/api/fabric/core/items/update-item?tabs=HTTP#itemtype>`_.
|
|
238
|
+
workspace : str | uuid.UUID, default=None
|
|
239
|
+
The Fabric workspace name or ID.
|
|
240
|
+
Defaults to None which resolves to the workspace of the attached lakehouse
|
|
241
|
+
or if no lakehouse attached, resolves to the workspace of the notebook.
|
|
242
|
+
|
|
243
|
+
Returns
|
|
244
|
+
-------
|
|
245
|
+
pandas.DataFrame
|
|
246
|
+
A pandas dataframe showing the list of connections that the specified item is connected to.
|
|
247
|
+
"""
|
|
248
|
+
|
|
249
|
+
if "item_name" in kwargs:
|
|
250
|
+
if item is not None:
|
|
251
|
+
raise TypeError("Cannot specify both 'item' and 'item_name'")
|
|
252
|
+
item = kwargs.pop("item_name")
|
|
253
|
+
warnings.warn(
|
|
254
|
+
"'item_name' parameter is deprecated, use 'item' instead.",
|
|
255
|
+
FutureWarning,
|
|
256
|
+
stacklevel=2,
|
|
257
|
+
)
|
|
258
|
+
if "item_type" in kwargs:
|
|
259
|
+
if type is not None:
|
|
260
|
+
raise TypeError("Cannot specify both 'type' and 'item_type'")
|
|
261
|
+
type = kwargs.pop("item_type")
|
|
262
|
+
warnings.warn(
|
|
263
|
+
"'item_type' parameter is deprecated, use 'type' instead.",
|
|
264
|
+
FutureWarning,
|
|
265
|
+
stacklevel=2,
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
if item is None or type is None:
|
|
269
|
+
raise TypeError(
|
|
270
|
+
"Missing required parameters: 'item' and 'type' must be provided either directly or via 'item_name' and 'item_type'."
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
workspace_id = resolve_workspace_id(workspace)
|
|
274
|
+
item_id = resolve_item_id(item=item, type=type, workspace=workspace_id)
|
|
275
|
+
|
|
276
|
+
columns = {
|
|
277
|
+
"Connection Name": "string",
|
|
278
|
+
"Connection Id": "string",
|
|
279
|
+
"Connectivity Type": "string",
|
|
280
|
+
"Connection Type": "string",
|
|
281
|
+
"Connection Path": "string",
|
|
282
|
+
"Gateway Id": "string",
|
|
283
|
+
}
|
|
284
|
+
df = _create_dataframe(columns=columns)
|
|
285
|
+
|
|
286
|
+
responses = _base_api(
|
|
287
|
+
request=f"/v1/workspaces/{workspace_id}/items/{item_id}/connections",
|
|
288
|
+
client="fabric_sp",
|
|
289
|
+
uses_pagination=True,
|
|
290
|
+
)
|
|
291
|
+
|
|
292
|
+
rows = []
|
|
293
|
+
for r in responses:
|
|
294
|
+
for v in r.get("value", []):
|
|
295
|
+
rows.append(
|
|
296
|
+
{
|
|
297
|
+
"Connection Name": v.get("displayName"),
|
|
298
|
+
"Connection Id": v.get("id"),
|
|
299
|
+
"Connectivity Type": v.get("connectivityType"),
|
|
300
|
+
"Connection Type": v.get("connectionDetails", {}).get("type"),
|
|
301
|
+
"Connection Path": v.get("connectionDetails", {}).get("path"),
|
|
302
|
+
"Gateway Id": v.get("gatewayId"),
|
|
303
|
+
}
|
|
304
|
+
)
|
|
305
|
+
|
|
306
|
+
if rows:
|
|
307
|
+
df = pd.DataFrame(rows, columns=list(columns.keys()))
|
|
308
|
+
|
|
309
|
+
return df
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
@log
|
|
313
|
+
def _list_supported_connection_types(
|
|
314
|
+
gateway: Optional[str | UUID] = None, show_all_creation_methods: bool = False
|
|
315
|
+
) -> pd.DataFrame:
|
|
316
|
+
|
|
317
|
+
url = f"/v1/connections/supportedConnectionTypes?showAllCreationMethods={show_all_creation_methods}&"
|
|
318
|
+
if gateway is not None:
|
|
319
|
+
gateway_id = _resolve_gateway_id(gateway)
|
|
320
|
+
url += f"gatewayId={gateway_id}"
|
|
321
|
+
|
|
322
|
+
columns = {
|
|
323
|
+
"Connection Type": "string",
|
|
324
|
+
"Creation Method": "string",
|
|
325
|
+
"Supported Credential Types": "string",
|
|
326
|
+
"Supported Connection Encryption Types": "string",
|
|
327
|
+
"Supports Skip Test Connection": "bool",
|
|
328
|
+
}
|
|
329
|
+
df = _create_dataframe(columns=columns)
|
|
330
|
+
|
|
331
|
+
url = url.rstrip("&")
|
|
332
|
+
responses = _base_api(request=url, client="fabric_sp", uses_pagination=True)
|
|
333
|
+
|
|
334
|
+
rows = []
|
|
335
|
+
for r in responses:
|
|
336
|
+
for v in r.get("value", []):
|
|
337
|
+
rows.append(
|
|
338
|
+
{
|
|
339
|
+
"Connection Type": v.get("type"),
|
|
340
|
+
"Creation Method": v["creationMethods"][0]["name"],
|
|
341
|
+
"Supported Credential Types": v.get("supportedCredentialTypes"),
|
|
342
|
+
"Supported Connection Encryption Types": v.get(
|
|
343
|
+
"supportedConnectionEncryptionTypes"
|
|
344
|
+
),
|
|
345
|
+
"Supports Skip Test Connection": v.get(
|
|
346
|
+
"supportsSkipTestConnection"
|
|
347
|
+
),
|
|
348
|
+
}
|
|
349
|
+
)
|
|
350
|
+
|
|
351
|
+
if rows:
|
|
352
|
+
df = pd.DataFrame(rows, columns=list(columns.keys()))
|
|
353
|
+
_update_dataframe_datatypes(dataframe=df, column_map=columns)
|
|
354
|
+
|
|
355
|
+
return df
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
@log
|
|
359
|
+
def create_cloud_connection(
|
|
360
|
+
name: str,
|
|
361
|
+
server_name: str,
|
|
362
|
+
database_name: str,
|
|
363
|
+
user_name: str,
|
|
364
|
+
password: str,
|
|
365
|
+
privacy_level: str,
|
|
366
|
+
connection_encryption: str = "NotEncrypted",
|
|
367
|
+
skip_test_connection: bool = False,
|
|
368
|
+
):
|
|
369
|
+
"""
|
|
370
|
+
Creates a shared cloud connection.
|
|
371
|
+
|
|
372
|
+
This is a wrapper function for the following API: `Connections - Create Connection <https://learn.microsoft.com/rest/api/fabric/core/connections/create-connection>`_.
|
|
373
|
+
|
|
374
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
375
|
+
|
|
376
|
+
Parameters
|
|
377
|
+
----------
|
|
378
|
+
name : str
|
|
379
|
+
The name of the connection.
|
|
380
|
+
server_name : str
|
|
381
|
+
The name of the server.
|
|
382
|
+
database_name : str
|
|
383
|
+
The name of the database.
|
|
384
|
+
user_name : str
|
|
385
|
+
The username.
|
|
386
|
+
password : str
|
|
387
|
+
The password.
|
|
388
|
+
privacy_level : str
|
|
389
|
+
The `privacy level <https://learn.microsoft.com/rest/api/fabric/core/connections/create-connection?tabs=HTTP#privacylevel>`_ of the connection.
|
|
390
|
+
connection_encryption : str, default="NotEncrypted"
|
|
391
|
+
The connection encrpytion.
|
|
392
|
+
skip_test_connection: bool, default=False
|
|
393
|
+
If True, skips the test connection.
|
|
394
|
+
"""
|
|
395
|
+
|
|
396
|
+
payload = {
|
|
397
|
+
"connectivityType": "ShareableCloud",
|
|
398
|
+
"displayName": name,
|
|
399
|
+
"connectionDetails": {
|
|
400
|
+
"type": "SQL",
|
|
401
|
+
"creationMethod": "SQL",
|
|
402
|
+
"parameters": [
|
|
403
|
+
{
|
|
404
|
+
"dataType": "Text",
|
|
405
|
+
"name": "server",
|
|
406
|
+
"value": server_name,
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
"dataType": "Text",
|
|
410
|
+
"name": "database",
|
|
411
|
+
"value": database_name,
|
|
412
|
+
},
|
|
413
|
+
],
|
|
414
|
+
},
|
|
415
|
+
"privacyLevel": privacy_level,
|
|
416
|
+
"credentialDetails": {
|
|
417
|
+
"singleSignOnType": "None",
|
|
418
|
+
"connectionEncryption": connection_encryption,
|
|
419
|
+
"skipTestConnection": skip_test_connection,
|
|
420
|
+
"credentials": {
|
|
421
|
+
"credentialType": "Basic",
|
|
422
|
+
"username": user_name,
|
|
423
|
+
"password": password,
|
|
424
|
+
},
|
|
425
|
+
},
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
_base_api(
|
|
429
|
+
request="/v1/connections",
|
|
430
|
+
client="fabric_sp",
|
|
431
|
+
method="post",
|
|
432
|
+
payload=payload,
|
|
433
|
+
status_codes=201,
|
|
434
|
+
)
|
|
435
|
+
|
|
436
|
+
print(f"{icons.green_dot} The '{name}' cloud connection has been created.")
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
@log
|
|
440
|
+
def create_on_prem_connection(
|
|
441
|
+
name: str,
|
|
442
|
+
gateway: str | UUID,
|
|
443
|
+
server_name: str,
|
|
444
|
+
database_name: str,
|
|
445
|
+
credentials: str,
|
|
446
|
+
privacy_level: str,
|
|
447
|
+
connection_encryption: str = "NotEncrypted",
|
|
448
|
+
skip_test_connection: bool = False,
|
|
449
|
+
):
|
|
450
|
+
"""
|
|
451
|
+
Creates an on-premises connection.
|
|
452
|
+
|
|
453
|
+
This is a wrapper function for the following API: `Connections - Create Connection <https://learn.microsoft.com/rest/api/fabric/core/connections/create-connection>`_.
|
|
454
|
+
|
|
455
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
456
|
+
|
|
457
|
+
Parameters
|
|
458
|
+
----------
|
|
459
|
+
name : str
|
|
460
|
+
The name of the connection.
|
|
461
|
+
gateway : str | uuid.UUID
|
|
462
|
+
The name or Id of the gateway.
|
|
463
|
+
server_name : str
|
|
464
|
+
The name of the server.
|
|
465
|
+
database_name : str
|
|
466
|
+
The name of the database.
|
|
467
|
+
user_name : str
|
|
468
|
+
The username.
|
|
469
|
+
password : str
|
|
470
|
+
The password.
|
|
471
|
+
privacy_level : str
|
|
472
|
+
The `privacy level <https://learn.microsoft.com/rest/api/fabric/core/connections/create-connection?tabs=HTTP#privacylevel>`_ of the connection.
|
|
473
|
+
connection_encryption : str, default="NotEncrypted"
|
|
474
|
+
The connection encrpytion.
|
|
475
|
+
skip_test_connection: bool, default=False
|
|
476
|
+
If True, skips the test connection.
|
|
477
|
+
"""
|
|
478
|
+
|
|
479
|
+
gateway_id = _resolve_gateway_id(gateway)
|
|
480
|
+
|
|
481
|
+
payload = {
|
|
482
|
+
"connectivityType": "OnPremisesGateway",
|
|
483
|
+
"gatewayId": gateway_id,
|
|
484
|
+
"displayName": name,
|
|
485
|
+
"connectionDetails": {
|
|
486
|
+
"type": "SQL",
|
|
487
|
+
"creationMethod": "SQL",
|
|
488
|
+
"parameters": [
|
|
489
|
+
{
|
|
490
|
+
"dataType": "Text",
|
|
491
|
+
"name": "server",
|
|
492
|
+
"value": server_name,
|
|
493
|
+
},
|
|
494
|
+
{
|
|
495
|
+
"dataType": "Text",
|
|
496
|
+
"name": "database",
|
|
497
|
+
"value": database_name,
|
|
498
|
+
},
|
|
499
|
+
],
|
|
500
|
+
},
|
|
501
|
+
"privacyLevel": privacy_level,
|
|
502
|
+
"credentialDetails": {
|
|
503
|
+
"singleSignOnType": "None",
|
|
504
|
+
"connectionEncryption": connection_encryption,
|
|
505
|
+
"skipTestConnection": skip_test_connection,
|
|
506
|
+
"credentials": {
|
|
507
|
+
"credentialType": "Windows",
|
|
508
|
+
"values": [{"gatewayId": gateway_id, "credentials": credentials}],
|
|
509
|
+
},
|
|
510
|
+
},
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
_base_api(
|
|
514
|
+
request="/v1/connections",
|
|
515
|
+
client="fabric_sp",
|
|
516
|
+
method="post",
|
|
517
|
+
payload=payload,
|
|
518
|
+
status_codes=201,
|
|
519
|
+
)
|
|
520
|
+
|
|
521
|
+
print(f"{icons.green_dot} The '{name}' on-prem connection has been created.")
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
@log
|
|
525
|
+
def create_vnet_connection(
|
|
526
|
+
name: str,
|
|
527
|
+
gateway: str | UUID,
|
|
528
|
+
server_name: str,
|
|
529
|
+
database_name: str,
|
|
530
|
+
user_name: str,
|
|
531
|
+
password: str,
|
|
532
|
+
privacy_level: str,
|
|
533
|
+
connection_encryption: str = "NotEncrypted",
|
|
534
|
+
skip_test_connection: bool = False,
|
|
535
|
+
):
|
|
536
|
+
"""
|
|
537
|
+
Creates a virtual network gateway connection.
|
|
538
|
+
|
|
539
|
+
This is a wrapper function for the following API: `Connections - Create Connection <https://learn.microsoft.com/rest/api/fabric/core/connections/create-connection>`_.
|
|
540
|
+
|
|
541
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
542
|
+
|
|
543
|
+
Parameters
|
|
544
|
+
----------
|
|
545
|
+
name : str
|
|
546
|
+
The name of the connection.
|
|
547
|
+
gateway : str | uuid.UUID
|
|
548
|
+
The name or Id of the gateway.
|
|
549
|
+
server_name : str
|
|
550
|
+
The name of the server.
|
|
551
|
+
database_name : str
|
|
552
|
+
The name of the database.
|
|
553
|
+
user_name : str
|
|
554
|
+
The username.
|
|
555
|
+
password : str
|
|
556
|
+
The password.
|
|
557
|
+
privacy_level : str
|
|
558
|
+
The `privacy level <https://learn.microsoft.com/rest/api/fabric/core/connections/create-connection?tabs=HTTP#privacylevel>`_ of the connection.
|
|
559
|
+
connection_encryption : str, default="NotEncrypted"
|
|
560
|
+
The connection encrpytion.
|
|
561
|
+
skip_test_connection: bool, default=False
|
|
562
|
+
If True, skips the test connection.
|
|
563
|
+
"""
|
|
564
|
+
|
|
565
|
+
gateway_id = _resolve_gateway_id(gateway)
|
|
566
|
+
|
|
567
|
+
payload = {
|
|
568
|
+
"connectivityType": "VirtualNetworkGateway",
|
|
569
|
+
"gatewayId": gateway_id,
|
|
570
|
+
"displayName": name,
|
|
571
|
+
"connectionDetails": {
|
|
572
|
+
"type": "SQL",
|
|
573
|
+
"creationMethod": "SQL",
|
|
574
|
+
"parameters": [
|
|
575
|
+
{
|
|
576
|
+
"dataType": "Text",
|
|
577
|
+
"name": "server",
|
|
578
|
+
"value": server_name,
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
"dataType": "Text",
|
|
582
|
+
"name": "database",
|
|
583
|
+
"value": database_name,
|
|
584
|
+
},
|
|
585
|
+
],
|
|
586
|
+
},
|
|
587
|
+
"privacyLevel": privacy_level,
|
|
588
|
+
"credentialDetails": {
|
|
589
|
+
"singleSignOnType": "None",
|
|
590
|
+
"connectionEncryption": connection_encryption,
|
|
591
|
+
"skipTestConnection": skip_test_connection,
|
|
592
|
+
"credentials": {
|
|
593
|
+
"credentialType": "Basic",
|
|
594
|
+
"username": user_name,
|
|
595
|
+
"password": password,
|
|
596
|
+
},
|
|
597
|
+
},
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
_base_api(
|
|
601
|
+
request="/v1/connections",
|
|
602
|
+
client="fabric_sp",
|
|
603
|
+
method="post",
|
|
604
|
+
payload=payload,
|
|
605
|
+
status_codes=201,
|
|
606
|
+
)
|
|
607
|
+
|
|
608
|
+
print(
|
|
609
|
+
f"{icons.green_dot} The '{name}' virtual network gateway connection has been created."
|
|
610
|
+
)
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
from uuid import UUID
|
|
3
|
+
import pandas as pd
|
|
4
|
+
from sempy_labs._helper_functions import (
|
|
5
|
+
_create_dataframe,
|
|
6
|
+
_base_api,
|
|
7
|
+
resolve_workspace_id,
|
|
8
|
+
_update_dataframe_datatypes,
|
|
9
|
+
)
|
|
10
|
+
from sempy._utils._log import log
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@log
|
|
14
|
+
def list_dashboards(workspace: Optional[str | UUID] = None) -> pd.DataFrame:
|
|
15
|
+
"""
|
|
16
|
+
Shows a list of the dashboards within a workspace.
|
|
17
|
+
|
|
18
|
+
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
|
|
19
|
+
|
|
20
|
+
Parameters
|
|
21
|
+
----------
|
|
22
|
+
workspace : str | uuid.UUID, default=None
|
|
23
|
+
The Fabric workspace name or ID.
|
|
24
|
+
Defaults to None which resolves to the workspace of the attached lakehouse
|
|
25
|
+
or if no lakehouse attached, resolves to the workspace of the notebook.
|
|
26
|
+
|
|
27
|
+
Returns
|
|
28
|
+
-------
|
|
29
|
+
pandas.DataFrame
|
|
30
|
+
A pandas dataframe showing the dashboards within a workspace.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
columns = {
|
|
34
|
+
"Dashboard ID": "string",
|
|
35
|
+
"Dashboard Name": "string",
|
|
36
|
+
"Read Only": "bool",
|
|
37
|
+
"Web URL": "string",
|
|
38
|
+
"Embed URL": "string",
|
|
39
|
+
"Data Classification": "string",
|
|
40
|
+
"Users": "string",
|
|
41
|
+
"Subscriptions": "string",
|
|
42
|
+
}
|
|
43
|
+
df = _create_dataframe(columns=columns)
|
|
44
|
+
|
|
45
|
+
workspace_id = resolve_workspace_id(workspace)
|
|
46
|
+
|
|
47
|
+
response = _base_api(
|
|
48
|
+
request=f"/v1.0/myorg/groups/{workspace_id}/dashboards", client="fabric_sp"
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
rows = []
|
|
52
|
+
for v in response.json().get("value", []):
|
|
53
|
+
rows.append(
|
|
54
|
+
{
|
|
55
|
+
"Dashboard ID": v.get("id"),
|
|
56
|
+
"Dashboard Name": v.get("displayName"),
|
|
57
|
+
"Read Only": v.get("isReadOnly"),
|
|
58
|
+
"Web URL": v.get("webUrl"),
|
|
59
|
+
"Embed URL": v.get("embedUrl"),
|
|
60
|
+
"Data Classification": v.get("dataClassification"),
|
|
61
|
+
"Users": v.get("users"),
|
|
62
|
+
"Subscriptions": v.get("subscriptions"),
|
|
63
|
+
}
|
|
64
|
+
)
|
|
65
|
+
if rows:
|
|
66
|
+
df = pd.DataFrame(rows, columns=list(columns.keys()))
|
|
67
|
+
_update_dataframe_datatypes(dataframe=df, column_map=columns)
|
|
68
|
+
|
|
69
|
+
return df
|