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.
Files changed (243) hide show
  1. semantic_link_labs-0.12.8.dist-info/METADATA +354 -0
  2. semantic_link_labs-0.12.8.dist-info/RECORD +243 -0
  3. semantic_link_labs-0.12.8.dist-info/WHEEL +5 -0
  4. semantic_link_labs-0.12.8.dist-info/licenses/LICENSE +21 -0
  5. semantic_link_labs-0.12.8.dist-info/top_level.txt +1 -0
  6. sempy_labs/__init__.py +606 -0
  7. sempy_labs/_a_lib_info.py +2 -0
  8. sempy_labs/_ai.py +437 -0
  9. sempy_labs/_authentication.py +264 -0
  10. sempy_labs/_bpa_translation/_model/_translations_am-ET.po +869 -0
  11. sempy_labs/_bpa_translation/_model/_translations_ar-AE.po +908 -0
  12. sempy_labs/_bpa_translation/_model/_translations_bg-BG.po +968 -0
  13. sempy_labs/_bpa_translation/_model/_translations_ca-ES.po +963 -0
  14. sempy_labs/_bpa_translation/_model/_translations_cs-CZ.po +943 -0
  15. sempy_labs/_bpa_translation/_model/_translations_da-DK.po +945 -0
  16. sempy_labs/_bpa_translation/_model/_translations_de-DE.po +988 -0
  17. sempy_labs/_bpa_translation/_model/_translations_el-GR.po +993 -0
  18. sempy_labs/_bpa_translation/_model/_translations_es-ES.po +971 -0
  19. sempy_labs/_bpa_translation/_model/_translations_fa-IR.po +933 -0
  20. sempy_labs/_bpa_translation/_model/_translations_fi-FI.po +942 -0
  21. sempy_labs/_bpa_translation/_model/_translations_fr-FR.po +994 -0
  22. sempy_labs/_bpa_translation/_model/_translations_ga-IE.po +967 -0
  23. sempy_labs/_bpa_translation/_model/_translations_he-IL.po +902 -0
  24. sempy_labs/_bpa_translation/_model/_translations_hi-IN.po +944 -0
  25. sempy_labs/_bpa_translation/_model/_translations_hu-HU.po +963 -0
  26. sempy_labs/_bpa_translation/_model/_translations_id-ID.po +946 -0
  27. sempy_labs/_bpa_translation/_model/_translations_is-IS.po +939 -0
  28. sempy_labs/_bpa_translation/_model/_translations_it-IT.po +986 -0
  29. sempy_labs/_bpa_translation/_model/_translations_ja-JP.po +846 -0
  30. sempy_labs/_bpa_translation/_model/_translations_ko-KR.po +839 -0
  31. sempy_labs/_bpa_translation/_model/_translations_mt-MT.po +967 -0
  32. sempy_labs/_bpa_translation/_model/_translations_nl-NL.po +978 -0
  33. sempy_labs/_bpa_translation/_model/_translations_pl-PL.po +962 -0
  34. sempy_labs/_bpa_translation/_model/_translations_pt-BR.po +962 -0
  35. sempy_labs/_bpa_translation/_model/_translations_pt-PT.po +957 -0
  36. sempy_labs/_bpa_translation/_model/_translations_ro-RO.po +968 -0
  37. sempy_labs/_bpa_translation/_model/_translations_ru-RU.po +964 -0
  38. sempy_labs/_bpa_translation/_model/_translations_sk-SK.po +952 -0
  39. sempy_labs/_bpa_translation/_model/_translations_sl-SL.po +950 -0
  40. sempy_labs/_bpa_translation/_model/_translations_sv-SE.po +942 -0
  41. sempy_labs/_bpa_translation/_model/_translations_ta-IN.po +976 -0
  42. sempy_labs/_bpa_translation/_model/_translations_te-IN.po +947 -0
  43. sempy_labs/_bpa_translation/_model/_translations_th-TH.po +924 -0
  44. sempy_labs/_bpa_translation/_model/_translations_tr-TR.po +953 -0
  45. sempy_labs/_bpa_translation/_model/_translations_uk-UA.po +961 -0
  46. sempy_labs/_bpa_translation/_model/_translations_zh-CN.po +804 -0
  47. sempy_labs/_bpa_translation/_model/_translations_zu-ZA.po +969 -0
  48. sempy_labs/_capacities.py +1198 -0
  49. sempy_labs/_capacity_migration.py +660 -0
  50. sempy_labs/_clear_cache.py +351 -0
  51. sempy_labs/_connections.py +610 -0
  52. sempy_labs/_dashboards.py +69 -0
  53. sempy_labs/_data_access_security.py +98 -0
  54. sempy_labs/_data_pipelines.py +162 -0
  55. sempy_labs/_dataflows.py +668 -0
  56. sempy_labs/_dax.py +501 -0
  57. sempy_labs/_daxformatter.py +80 -0
  58. sempy_labs/_delta_analyzer.py +467 -0
  59. sempy_labs/_delta_analyzer_history.py +301 -0
  60. sempy_labs/_dictionary_diffs.py +221 -0
  61. sempy_labs/_documentation.py +147 -0
  62. sempy_labs/_domains.py +51 -0
  63. sempy_labs/_eventhouses.py +182 -0
  64. sempy_labs/_external_data_shares.py +230 -0
  65. sempy_labs/_gateways.py +521 -0
  66. sempy_labs/_generate_semantic_model.py +521 -0
  67. sempy_labs/_get_connection_string.py +84 -0
  68. sempy_labs/_git.py +543 -0
  69. sempy_labs/_graphQL.py +90 -0
  70. sempy_labs/_helper_functions.py +2833 -0
  71. sempy_labs/_icons.py +149 -0
  72. sempy_labs/_job_scheduler.py +609 -0
  73. sempy_labs/_kql_databases.py +149 -0
  74. sempy_labs/_kql_querysets.py +124 -0
  75. sempy_labs/_kusto.py +137 -0
  76. sempy_labs/_labels.py +124 -0
  77. sempy_labs/_list_functions.py +1720 -0
  78. sempy_labs/_managed_private_endpoints.py +253 -0
  79. sempy_labs/_mirrored_databases.py +416 -0
  80. sempy_labs/_mirrored_warehouses.py +60 -0
  81. sempy_labs/_ml_experiments.py +113 -0
  82. sempy_labs/_model_auto_build.py +140 -0
  83. sempy_labs/_model_bpa.py +557 -0
  84. sempy_labs/_model_bpa_bulk.py +378 -0
  85. sempy_labs/_model_bpa_rules.py +859 -0
  86. sempy_labs/_model_dependencies.py +343 -0
  87. sempy_labs/_mounted_data_factories.py +123 -0
  88. sempy_labs/_notebooks.py +441 -0
  89. sempy_labs/_one_lake_integration.py +151 -0
  90. sempy_labs/_onelake.py +131 -0
  91. sempy_labs/_query_scale_out.py +433 -0
  92. sempy_labs/_refresh_semantic_model.py +435 -0
  93. sempy_labs/_semantic_models.py +468 -0
  94. sempy_labs/_spark.py +455 -0
  95. sempy_labs/_sql.py +241 -0
  96. sempy_labs/_sql_audit_settings.py +207 -0
  97. sempy_labs/_sql_endpoints.py +214 -0
  98. sempy_labs/_tags.py +201 -0
  99. sempy_labs/_translations.py +43 -0
  100. sempy_labs/_user_delegation_key.py +44 -0
  101. sempy_labs/_utils.py +79 -0
  102. sempy_labs/_vertipaq.py +1021 -0
  103. sempy_labs/_vpax.py +388 -0
  104. sempy_labs/_warehouses.py +234 -0
  105. sempy_labs/_workloads.py +140 -0
  106. sempy_labs/_workspace_identity.py +72 -0
  107. sempy_labs/_workspaces.py +595 -0
  108. sempy_labs/admin/__init__.py +170 -0
  109. sempy_labs/admin/_activities.py +167 -0
  110. sempy_labs/admin/_apps.py +145 -0
  111. sempy_labs/admin/_artifacts.py +65 -0
  112. sempy_labs/admin/_basic_functions.py +463 -0
  113. sempy_labs/admin/_capacities.py +508 -0
  114. sempy_labs/admin/_dataflows.py +45 -0
  115. sempy_labs/admin/_datasets.py +186 -0
  116. sempy_labs/admin/_domains.py +522 -0
  117. sempy_labs/admin/_external_data_share.py +100 -0
  118. sempy_labs/admin/_git.py +72 -0
  119. sempy_labs/admin/_items.py +265 -0
  120. sempy_labs/admin/_labels.py +211 -0
  121. sempy_labs/admin/_reports.py +241 -0
  122. sempy_labs/admin/_scanner.py +118 -0
  123. sempy_labs/admin/_shared.py +82 -0
  124. sempy_labs/admin/_sharing_links.py +110 -0
  125. sempy_labs/admin/_tags.py +131 -0
  126. sempy_labs/admin/_tenant.py +503 -0
  127. sempy_labs/admin/_tenant_keys.py +89 -0
  128. sempy_labs/admin/_users.py +140 -0
  129. sempy_labs/admin/_workspaces.py +236 -0
  130. sempy_labs/deployment_pipeline/__init__.py +23 -0
  131. sempy_labs/deployment_pipeline/_items.py +580 -0
  132. sempy_labs/directlake/__init__.py +57 -0
  133. sempy_labs/directlake/_autosync.py +58 -0
  134. sempy_labs/directlake/_directlake_schema_compare.py +120 -0
  135. sempy_labs/directlake/_directlake_schema_sync.py +161 -0
  136. sempy_labs/directlake/_dl_helper.py +274 -0
  137. sempy_labs/directlake/_generate_shared_expression.py +94 -0
  138. sempy_labs/directlake/_get_directlake_lakehouse.py +62 -0
  139. sempy_labs/directlake/_get_shared_expression.py +34 -0
  140. sempy_labs/directlake/_guardrails.py +96 -0
  141. sempy_labs/directlake/_list_directlake_model_calc_tables.py +70 -0
  142. sempy_labs/directlake/_show_unsupported_directlake_objects.py +90 -0
  143. sempy_labs/directlake/_update_directlake_model_lakehouse_connection.py +239 -0
  144. sempy_labs/directlake/_update_directlake_partition_entity.py +259 -0
  145. sempy_labs/directlake/_warm_cache.py +236 -0
  146. sempy_labs/dotnet_lib/dotnet.runtime.config.json +10 -0
  147. sempy_labs/environment/__init__.py +23 -0
  148. sempy_labs/environment/_items.py +212 -0
  149. sempy_labs/environment/_pubstage.py +223 -0
  150. sempy_labs/eventstream/__init__.py +37 -0
  151. sempy_labs/eventstream/_items.py +263 -0
  152. sempy_labs/eventstream/_topology.py +652 -0
  153. sempy_labs/graph/__init__.py +59 -0
  154. sempy_labs/graph/_groups.py +651 -0
  155. sempy_labs/graph/_sensitivity_labels.py +120 -0
  156. sempy_labs/graph/_teams.py +125 -0
  157. sempy_labs/graph/_user_licenses.py +96 -0
  158. sempy_labs/graph/_users.py +516 -0
  159. sempy_labs/graph_model/__init__.py +15 -0
  160. sempy_labs/graph_model/_background_jobs.py +63 -0
  161. sempy_labs/graph_model/_items.py +149 -0
  162. sempy_labs/lakehouse/__init__.py +67 -0
  163. sempy_labs/lakehouse/_blobs.py +247 -0
  164. sempy_labs/lakehouse/_get_lakehouse_columns.py +102 -0
  165. sempy_labs/lakehouse/_get_lakehouse_tables.py +274 -0
  166. sempy_labs/lakehouse/_helper.py +250 -0
  167. sempy_labs/lakehouse/_lakehouse.py +351 -0
  168. sempy_labs/lakehouse/_livy_sessions.py +143 -0
  169. sempy_labs/lakehouse/_materialized_lake_views.py +157 -0
  170. sempy_labs/lakehouse/_partitioning.py +165 -0
  171. sempy_labs/lakehouse/_schemas.py +217 -0
  172. sempy_labs/lakehouse/_shortcuts.py +440 -0
  173. sempy_labs/migration/__init__.py +35 -0
  174. sempy_labs/migration/_create_pqt_file.py +238 -0
  175. sempy_labs/migration/_direct_lake_to_import.py +105 -0
  176. sempy_labs/migration/_migrate_calctables_to_lakehouse.py +398 -0
  177. sempy_labs/migration/_migrate_calctables_to_semantic_model.py +148 -0
  178. sempy_labs/migration/_migrate_model_objects_to_semantic_model.py +533 -0
  179. sempy_labs/migration/_migrate_tables_columns_to_semantic_model.py +172 -0
  180. sempy_labs/migration/_migration_validation.py +71 -0
  181. sempy_labs/migration/_refresh_calc_tables.py +131 -0
  182. sempy_labs/mirrored_azure_databricks_catalog/__init__.py +15 -0
  183. sempy_labs/mirrored_azure_databricks_catalog/_discover.py +213 -0
  184. sempy_labs/mirrored_azure_databricks_catalog/_refresh_catalog_metadata.py +45 -0
  185. sempy_labs/ml_model/__init__.py +23 -0
  186. sempy_labs/ml_model/_functions.py +427 -0
  187. sempy_labs/report/_BPAReportTemplate.json +232 -0
  188. sempy_labs/report/__init__.py +55 -0
  189. sempy_labs/report/_bpareporttemplate/.pbi/localSettings.json +9 -0
  190. sempy_labs/report/_bpareporttemplate/.platform +11 -0
  191. sempy_labs/report/_bpareporttemplate/StaticResources/SharedResources/BaseThemes/CY24SU06.json +710 -0
  192. sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/page.json +11 -0
  193. sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/1b08bce3bebabb0a27a8/visual.json +191 -0
  194. sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/2f22ddb70c301693c165/visual.json +438 -0
  195. sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/3b1182230aa6c600b43a/visual.json +127 -0
  196. sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/58577ba6380c69891500/visual.json +576 -0
  197. sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/a2a8fa5028b3b776c96c/visual.json +207 -0
  198. sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/adfd47ef30652707b987/visual.json +506 -0
  199. sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/b6a80ee459e716e170b1/visual.json +127 -0
  200. sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/ce3130a721c020cc3d81/visual.json +513 -0
  201. sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/page.json +8 -0
  202. sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/visuals/66e60dfb526437cd78d1/visual.json +112 -0
  203. sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/page.json +11 -0
  204. sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/07deb8bce824e1be37d7/visual.json +513 -0
  205. sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0b1c68838818b32ad03b/visual.json +352 -0
  206. sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0c171de9d2683d10b930/visual.json +37 -0
  207. sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0efa01be0510e40a645e/visual.json +542 -0
  208. sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/6bf2f0eb830ab53cc668/visual.json +221 -0
  209. sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/88d8141cb8500b60030c/visual.json +127 -0
  210. sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/a753273590beed656a03/visual.json +576 -0
  211. sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/b8fdc82cddd61ac447bc/visual.json +127 -0
  212. sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/page.json +9 -0
  213. sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/visuals/ce8532a7e25020271077/visual.json +38 -0
  214. sempy_labs/report/_bpareporttemplate/definition/pages/pages.json +10 -0
  215. sempy_labs/report/_bpareporttemplate/definition/report.json +176 -0
  216. sempy_labs/report/_bpareporttemplate/definition/version.json +4 -0
  217. sempy_labs/report/_bpareporttemplate/definition.pbir +14 -0
  218. sempy_labs/report/_download_report.py +76 -0
  219. sempy_labs/report/_export_report.py +257 -0
  220. sempy_labs/report/_generate_report.py +427 -0
  221. sempy_labs/report/_paginated.py +76 -0
  222. sempy_labs/report/_report_bpa.py +354 -0
  223. sempy_labs/report/_report_bpa_rules.py +115 -0
  224. sempy_labs/report/_report_functions.py +581 -0
  225. sempy_labs/report/_report_helper.py +227 -0
  226. sempy_labs/report/_report_list_functions.py +110 -0
  227. sempy_labs/report/_report_rebind.py +149 -0
  228. sempy_labs/report/_reportwrapper.py +3100 -0
  229. sempy_labs/report/_save_report.py +147 -0
  230. sempy_labs/snowflake_database/__init__.py +10 -0
  231. sempy_labs/snowflake_database/_items.py +105 -0
  232. sempy_labs/sql_database/__init__.py +21 -0
  233. sempy_labs/sql_database/_items.py +201 -0
  234. sempy_labs/sql_database/_mirroring.py +79 -0
  235. sempy_labs/theme/__init__.py +12 -0
  236. sempy_labs/theme/_org_themes.py +129 -0
  237. sempy_labs/tom/__init__.py +3 -0
  238. sempy_labs/tom/_model.py +5977 -0
  239. sempy_labs/variable_library/__init__.py +19 -0
  240. sempy_labs/variable_library/_functions.py +403 -0
  241. sempy_labs/warehouse/__init__.py +28 -0
  242. sempy_labs/warehouse/_items.py +234 -0
  243. 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