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,309 @@
1
+ from sempy_labs._helper_functions import (
2
+ resolve_item_id,
3
+ resolve_item_name_and_id,
4
+ resolve_workspace_id,
5
+ _base_api,
6
+ _create_dataframe,
7
+ _update_dataframe_datatypes,
8
+ resolve_workspace_name_and_id,
9
+ )
10
+ import pandas as pd
11
+ from typing import Optional
12
+ from uuid import UUID
13
+ from sempy._utils._log import log
14
+ import sempy_labs._icons as icons
15
+
16
+
17
+ @log
18
+ def list_restore_points(
19
+ warehouse: str | UUID, workspace: Optional[str | UUID] = None
20
+ ) -> pd.DataFrame:
21
+ """
22
+ Returns all restore points for a warehouse.
23
+
24
+ This is a wrapper function for the following API: `Restore Points - List Restore Points <https://learn.microsoft.com/rest/api/fabric/warehouse/restore-points/list-restore-points>`_.
25
+
26
+ Parameters
27
+ ----------
28
+ warehouse : str | uuid.UUID
29
+ The Fabric warehouse name or ID.
30
+ workspace : str | uuid.UUID, default=None
31
+ The Fabric workspace name or ID.
32
+ Defaults to None which resolves to the workspace of the attached lakehouse
33
+ or if no lakehouse attached, resolves to the workspace of the notebook.
34
+
35
+ Returns
36
+ -------
37
+ pandas.DataFrame
38
+ A pandas dataframe showing all restore points for a warehouse.
39
+ """
40
+
41
+ workspace_id = resolve_workspace_id(workspace)
42
+ warehouse_id = resolve_item_id(
43
+ item=warehouse, type="warehouse", workspace=workspace_id
44
+ )
45
+
46
+ columns = {
47
+ "Restore Point Id": "string",
48
+ "Restore Point Name": "string",
49
+ "Description": "string",
50
+ "Creation Mode": "string",
51
+ "Event DateTime": "datetime",
52
+ "Event Initiator Id": "string",
53
+ "Event Initiator Display Name": "string",
54
+ "Event Initiator Type": "string",
55
+ "Event Initiator User Principal Name": "string",
56
+ }
57
+ df = _create_dataframe(columns=columns)
58
+ responses = _base_api(
59
+ request=f"/v1/workspaces/{workspace_id}/warehouses/{warehouse_id}/restorePoints",
60
+ uses_pagination=True,
61
+ client="fabric_sp",
62
+ )
63
+
64
+ rows = []
65
+ for r in responses:
66
+ for v in r.get("values", []):
67
+ cd = v.get("creationDetails", {})
68
+ event_initiator = cd.get("eventInitiator", {})
69
+ rows.append(
70
+ {
71
+ "Restore Point Id": v.get("id"),
72
+ "Restore Point Name": v.get("displayName"),
73
+ "Description": v.get("description"),
74
+ "Creation Mode": v.get("creationMode"),
75
+ "Event DateTime": cd.get("eventDateTime"),
76
+ "Event Initiator Id": event_initiator.get("id"),
77
+ "Event Initiator Display Name": event_initiator.get("displayName"),
78
+ "Event Initiator Type": event_initiator.get("type"),
79
+ "Event Initiator User Principal Name": event_initiator.get(
80
+ "userDetails", {}
81
+ ).get("userPrincipalName"),
82
+ }
83
+ )
84
+
85
+ if rows:
86
+ df = pd.DataFrame(rows, columns=list(columns.keys()))
87
+ _update_dataframe_datatypes(df=df, columns=columns)
88
+
89
+ return df
90
+
91
+
92
+ def _resolve_restore_point_id(
93
+ warehouse_id: UUID, restore_point: str | UUID, workspace_id: UUID
94
+ ) -> str:
95
+
96
+ df = list_restore_points(warehouse=warehouse_id, workspace=workspace_id)
97
+ df_filt = df[
98
+ (df["Restore Point Id"] == restore_point)
99
+ | (df["Restore Point Name"] == restore_point)
100
+ ]
101
+
102
+ if df_filt.empty:
103
+ raise ValueError(
104
+ f"Restore Point '{restore_point}' not found in the '{warehouse_id}' warehouse within the '{workspace_id}' workspace."
105
+ )
106
+ return df_filt["Restore Point Id"].iloc[0]
107
+
108
+
109
+ @log
110
+ def delete_restore_point(
111
+ warehouse: str | UUID,
112
+ restore_point: str | UUID,
113
+ workspace: Optional[str | UUID] = None,
114
+ ):
115
+ """
116
+ Deletes a restore point from a warehouse.
117
+
118
+ This is a wrapper function for the following API: `Restore Points - Delete Restore Point <https://learn.microsoft.com/rest/api/fabric/warehouse/restore-points/delete-restore-point>`_.
119
+
120
+ Parameters
121
+ ----------
122
+ warehouse : str | uuid.UUID
123
+ The Fabric warehouse name or ID.
124
+ restore_point : str | uuid.UUID
125
+ The restore point name or ID.
126
+ workspace : str | uuid.UUID, default=None
127
+ The Fabric workspace name or ID.
128
+ Defaults to None which resolves to the workspace of the attached lakehouse
129
+ or if no lakehouse attached, resolves to the workspace of the notebook.
130
+ """
131
+
132
+ (workspace_name, workspace_id) = resolve_workspace_name_and_id(workspace)
133
+ (warehouse_name, warehouse_id) = resolve_item_name_and_id(
134
+ item=warehouse, type="Warehouse", workspace=workspace_id
135
+ )
136
+ restore_point_id = _resolve_restore_point_id(
137
+ warehouse_id=warehouse_id,
138
+ restore_point=restore_point,
139
+ workspace_id=workspace_id,
140
+ )
141
+
142
+ _base_api(
143
+ request=f"/v1/workspaces/{workspace_id}/warehouses/{warehouse_id}/restorePoints/{restore_point_id}",
144
+ method="delete",
145
+ client="fabric_sp",
146
+ )
147
+
148
+ print(
149
+ f"{icons.green_dot} The restore point '{restore_point}' has been deleted from the '{warehouse_name}' warehouse within the '{workspace_name}' workspace."
150
+ )
151
+
152
+
153
+ @log
154
+ def create_restore_point(
155
+ warehouse: str | UUID,
156
+ name: str,
157
+ description: Optional[str] = None,
158
+ workspace: Optional[str | UUID] = None,
159
+ ):
160
+ """
161
+ Creates a restore point in a warehouse.
162
+
163
+ This is a wrapper function for the following API: `Restore Points - Create Restore Point <https://learn.microsoft.com/rest/api/fabric/warehouse/restore-points/create-restore-point>`_.
164
+
165
+ Parameters
166
+ ----------
167
+ warehouse : str | uuid.UUID
168
+ The Fabric warehouse name or ID.
169
+ name : str
170
+ The name of the restore point.
171
+ description : str, default=None
172
+ The description of the restore point.
173
+ workspace : str | uuid.UUID, default=None
174
+ The Fabric workspace name or ID.
175
+ Defaults to None which resolves to the workspace of the attached lakehouse
176
+ or if no lakehouse attached, resolves to the workspace of the notebook.
177
+ """
178
+
179
+ (workspace_name, workspace_id) = resolve_workspace_name_and_id(workspace)
180
+ (warehouse_name, warehouse_id) = resolve_item_name_and_id(
181
+ item=warehouse, type="Warehouse", workspace=workspace_id
182
+ )
183
+
184
+ payload = {"displayName": name}
185
+
186
+ if description:
187
+ payload["description"] = description
188
+
189
+ _base_api(
190
+ request=f"/v1/workspaces/{workspace_id}/warehouses/{warehouse_id}/restorePoints",
191
+ method="post",
192
+ client="fabric_sp",
193
+ payload=payload,
194
+ lro_return_status_code=True,
195
+ status_codes=[201, 202],
196
+ )
197
+
198
+ print(
199
+ f"{icons.green_dot} The restore point '{name}' has been created in the '{warehouse_name}' warehouse within the '{workspace_name}' workspace."
200
+ )
201
+
202
+
203
+ @log
204
+ def update_restore_point(
205
+ warehouse: str | UUID,
206
+ restore_point: str | UUID,
207
+ name: Optional[str] = None,
208
+ description: Optional[str] = None,
209
+ workspace: Optional[str | UUID] = None,
210
+ ):
211
+ """
212
+ Updates a restore point in a warehouse.
213
+
214
+ This is a wrapper function for the following API: `Restore Points - Update Restore Point <https://learn.microsoft.com/rest/api/fabric/warehouse/restore-points/update-restore-point>`_.
215
+
216
+ Parameters
217
+ ----------
218
+ warehouse : str | uuid.UUID
219
+ The Fabric warehouse name or ID.
220
+ restore_point : str | uuid.UUID
221
+ The restore point name or ID.
222
+ name : str, default=None
223
+ The new name of the restore point.
224
+ description : str, default=None
225
+ The new description of the restore point.
226
+ workspace : str | uuid.UUID, default=None
227
+ The Fabric workspace name or ID.
228
+ Defaults to None which resolves to the workspace of the attached lakehouse
229
+ or if no lakehouse attached, resolves to the workspace of the notebook.
230
+ """
231
+
232
+ (workspace_name, workspace_id) = resolve_workspace_name_and_id(workspace)
233
+ (warehouse_name, warehouse_id) = resolve_item_name_and_id(
234
+ item=warehouse, type="Warehouse", workspace=workspace_id
235
+ )
236
+ restore_point_id = _resolve_restore_point_id(
237
+ warehouse_id=warehouse_id,
238
+ restore_point=restore_point,
239
+ workspace_id=workspace_id,
240
+ )
241
+
242
+ payload = {}
243
+ if name:
244
+ payload["displayName"] = name
245
+ if description:
246
+ payload["description"] = description
247
+
248
+ if not payload:
249
+ print(
250
+ f"{icons.yellow_dot} No updates provided for the restore point '{restore_point}'."
251
+ )
252
+ return
253
+
254
+ _base_api(
255
+ request=f"/v1/workspaces/{workspace_id}/warehouses/{warehouse_id}/restorePoints/{restore_point_id}",
256
+ method="patch",
257
+ client="fabric_sp",
258
+ payload=payload,
259
+ )
260
+
261
+ print(
262
+ f"{icons.green_dot} The restore point '{restore_point}' has been updated in the '{warehouse_name}' warehouse within the '{workspace_name}' workspace."
263
+ )
264
+
265
+
266
+ @log
267
+ def restore_to_restore_point(
268
+ warehouse: str | UUID,
269
+ restore_point: str | UUID,
270
+ workspace: Optional[str | UUID] = None,
271
+ ):
272
+ """
273
+ Restores a warehouse in-place to the restore point specified.
274
+
275
+ This is a wrapper function for the following API: `Restore Points - Restore To Restore Point <https://learn.microsoft.com/rest/api/fabric/warehouse/restore-points/restore-to-restore-point>`_.
276
+
277
+ Parameters
278
+ ----------
279
+ warehouse : str | uuid.UUID
280
+ The Fabric warehouse name or ID.
281
+ restore_point : str | uuid.UUID
282
+ The restore point name or ID.
283
+ workspace : str | uuid.UUID, default=None
284
+ The Fabric workspace name or ID.
285
+ Defaults to None which resolves to the workspace of the attached lakehouse
286
+ or if no lakehouse attached, resolves to the workspace of the notebook.
287
+ """
288
+
289
+ (workspace_name, workspace_id) = resolve_workspace_name_and_id(workspace)
290
+ (warehouse_name, warehouse_id) = resolve_item_name_and_id(
291
+ item=warehouse, type="Warehouse", workspace=workspace_id
292
+ )
293
+ restore_point_id = _resolve_restore_point_id(
294
+ warehouse_id=warehouse_id,
295
+ restore_point=restore_point,
296
+ workspace_id=workspace_id,
297
+ )
298
+
299
+ _base_api(
300
+ request=f"/v1/workspaces/{workspace_id}/warehouses/{warehouse_id}/restorePoints/{restore_point_id}/restore",
301
+ method="post",
302
+ client="fabric_sp",
303
+ lro_return_status_code=True,
304
+ status_codes=[200, 202],
305
+ )
306
+
307
+ print(
308
+ f"{icons.green_dot} The warehouse '{warehouse_name}' is being restored to the restore point '{restore_point}' within the '{workspace_name}' workspace."
309
+ )