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,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
+ )