semantic-link-labs 0.7.4__tar.gz → 0.8.0__tar.gz

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.

Potentially problematic release.


This version of semantic-link-labs might be problematic. Click here for more details.

Files changed (179) hide show
  1. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/PKG-INFO +7 -3
  2. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/README.md +5 -2
  3. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/docs/requirements.txt +2 -1
  4. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/docs/source/conf.py +1 -1
  5. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/environment.yml +1 -1
  6. semantic_link_labs-0.8.0/notebooks/Capacity Migration.ipynb +1 -0
  7. semantic_link_labs-0.8.0/notebooks/Report Analysis.ipynb +1 -0
  8. semantic_link_labs-0.8.0/notebooks/SQL.ipynb +1 -0
  9. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/pyproject.toml +3 -2
  10. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/semantic_link_labs.egg-info/PKG-INFO +7 -3
  11. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/semantic_link_labs.egg-info/SOURCES.txt +12 -1
  12. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/semantic_link_labs.egg-info/requires.txt +1 -0
  13. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/__init__.py +57 -18
  14. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_capacities.py +39 -3
  15. semantic_link_labs-0.8.0/src/sempy_labs/_capacity_migration.py +624 -0
  16. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_clear_cache.py +8 -8
  17. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_connections.py +15 -13
  18. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_git.py +20 -21
  19. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_helper_functions.py +33 -30
  20. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_icons.py +19 -0
  21. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_list_functions.py +210 -0
  22. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_model_bpa.py +1 -1
  23. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_query_scale_out.py +4 -3
  24. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_spark.py +31 -36
  25. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_sql.py +60 -15
  26. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_vertipaq.py +9 -7
  27. semantic_link_labs-0.8.0/src/sempy_labs/admin/__init__.py +53 -0
  28. semantic_link_labs-0.8.0/src/sempy_labs/admin/_basic_functions.py +806 -0
  29. semantic_link_labs-0.8.0/src/sempy_labs/admin/_domains.py +411 -0
  30. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/directlake/_generate_shared_expression.py +11 -14
  31. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/directlake/_update_directlake_model_lakehouse_connection.py +14 -24
  32. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/__init__.py +9 -6
  33. semantic_link_labs-0.8.0/src/sempy_labs/report/_report_bpa.py +359 -0
  34. semantic_link_labs-0.8.0/src/sempy_labs/report/_report_bpa_rules.py +113 -0
  35. semantic_link_labs-0.8.0/src/sempy_labs/report/_report_helper.py +254 -0
  36. semantic_link_labs-0.8.0/src/sempy_labs/report/_report_list_functions.py +95 -0
  37. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_report_rebind.py +0 -4
  38. semantic_link_labs-0.8.0/src/sempy_labs/report/_reportwrapper.py +2039 -0
  39. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/tom/_model.py +78 -4
  40. semantic_link_labs-0.7.4/notebooks/Warehouse.ipynb +0 -1
  41. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  42. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  43. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/.github/ISSUE_TEMPLATE/issue--question---advice-needed.md +0 -0
  44. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/.github/workflows/build.yaml +0 -0
  45. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/.github/workflows/codeql.yaml +0 -0
  46. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/.gitignore +0 -0
  47. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/.readthedocs.yaml +0 -0
  48. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/.vscode/settings.json +0 -0
  49. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/CODE_OF_CONDUCT.md +0 -0
  50. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/LICENSE +0 -0
  51. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/SECURITY.md +0 -0
  52. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/SUPPORT.md +0 -0
  53. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/docs/Makefile +0 -0
  54. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/docs/make.bat +0 -0
  55. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/docs/source/index.rst +0 -0
  56. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/docs/source/modules.rst +0 -0
  57. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/notebooks/Best Practice Analyzer Report.ipynb +0 -0
  58. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/notebooks/Migration to Direct Lake.ipynb +0 -0
  59. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/notebooks/Model Optimization.ipynb +0 -0
  60. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/notebooks/Query Scale Out.ipynb +0 -0
  61. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/notebooks/Semantic Model Refresh.ipynb +0 -0
  62. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/notebooks/Tabular Object Model.ipynb +0 -0
  63. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/setup.cfg +0 -0
  64. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/semantic_link_labs.egg-info/dependency_links.txt +0 -0
  65. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/semantic_link_labs.egg-info/top_level.txt +0 -0
  66. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_ai.py +0 -0
  67. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_am-ET.po +0 -0
  68. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_ar-AE.po +0 -0
  69. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_bg-BG.po +0 -0
  70. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_ca-ES.po +0 -0
  71. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_cs-CZ.po +0 -0
  72. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_da-DK.po +0 -0
  73. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_de-DE.po +0 -0
  74. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_el-GR.po +0 -0
  75. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_es-ES.po +0 -0
  76. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_fa-IR.po +0 -0
  77. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_fi-FI.po +0 -0
  78. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_fr-FR.po +0 -0
  79. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_ga-IE.po +0 -0
  80. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_he-IL.po +0 -0
  81. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_hi-IN.po +0 -0
  82. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_hu-HU.po +0 -0
  83. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_id-ID.po +0 -0
  84. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_is-IS.po +0 -0
  85. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_it-IT.po +0 -0
  86. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_ja-JP.po +0 -0
  87. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_ko-KR.po +0 -0
  88. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_mt-MT.po +0 -0
  89. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_nl-NL.po +0 -0
  90. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_pl-PL.po +0 -0
  91. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_pt-BR.po +0 -0
  92. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_pt-PT.po +0 -0
  93. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_ro-RO.po +0 -0
  94. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_ru-RU.po +0 -0
  95. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_sk-SK.po +0 -0
  96. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_sl-SL.po +0 -0
  97. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_sv-SE.po +0 -0
  98. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_ta-IN.po +0 -0
  99. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_te-IN.po +0 -0
  100. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_th-TH.po +0 -0
  101. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_tr-TR.po +0 -0
  102. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_uk-UA.po +0 -0
  103. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_zh-CN.po +0 -0
  104. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_bpa_translation/_model/_translations_zu-ZA.po +0 -0
  105. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_dataflows.py +0 -0
  106. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_dax.py +0 -0
  107. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_deployment_pipelines.py +0 -0
  108. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_environments.py +0 -0
  109. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_generate_semantic_model.py +0 -0
  110. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_model_auto_build.py +0 -0
  111. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_model_bpa_bulk.py +0 -0
  112. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_model_bpa_rules.py +0 -0
  113. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_model_dependencies.py +0 -0
  114. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_notebooks.py +0 -0
  115. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_one_lake_integration.py +0 -0
  116. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_refresh_semantic_model.py +0 -0
  117. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_translations.py +0 -0
  118. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_workspace_identity.py +0 -0
  119. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/_workspaces.py +0 -0
  120. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/directlake/__init__.py +0 -0
  121. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/directlake/_directlake_schema_compare.py +0 -0
  122. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/directlake/_directlake_schema_sync.py +0 -0
  123. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/directlake/_dl_helper.py +0 -0
  124. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/directlake/_get_directlake_lakehouse.py +0 -0
  125. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/directlake/_get_shared_expression.py +0 -0
  126. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/directlake/_guardrails.py +0 -0
  127. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/directlake/_list_directlake_model_calc_tables.py +0 -0
  128. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/directlake/_show_unsupported_directlake_objects.py +0 -0
  129. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/directlake/_update_directlake_partition_entity.py +0 -0
  130. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/directlake/_warm_cache.py +0 -0
  131. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/lakehouse/__init__.py +0 -0
  132. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/lakehouse/_get_lakehouse_columns.py +0 -0
  133. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/lakehouse/_get_lakehouse_tables.py +0 -0
  134. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/lakehouse/_lakehouse.py +0 -0
  135. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/lakehouse/_shortcuts.py +0 -0
  136. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/migration/__init__.py +0 -0
  137. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/migration/_create_pqt_file.py +0 -0
  138. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/migration/_migrate_calctables_to_lakehouse.py +0 -0
  139. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/migration/_migrate_calctables_to_semantic_model.py +0 -0
  140. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/migration/_migrate_model_objects_to_semantic_model.py +0 -0
  141. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/migration/_migrate_tables_columns_to_semantic_model.py +0 -0
  142. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/migration/_migration_validation.py +0 -0
  143. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/migration/_refresh_calc_tables.py +0 -0
  144. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_BPAReportTemplate.json +0 -0
  145. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/.pbi/localSettings.json +0 -0
  146. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/.platform +0 -0
  147. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/StaticResources/SharedResources/BaseThemes/CY24SU06.json +0 -0
  148. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/page.json +0 -0
  149. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/1b08bce3bebabb0a27a8/visual.json +0 -0
  150. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/2f22ddb70c301693c165/visual.json +0 -0
  151. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/3b1182230aa6c600b43a/visual.json +0 -0
  152. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/58577ba6380c69891500/visual.json +0 -0
  153. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/a2a8fa5028b3b776c96c/visual.json +0 -0
  154. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/adfd47ef30652707b987/visual.json +0 -0
  155. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/b6a80ee459e716e170b1/visual.json +0 -0
  156. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/ce3130a721c020cc3d81/visual.json +0 -0
  157. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/page.json +0 -0
  158. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/visuals/66e60dfb526437cd78d1/visual.json +0 -0
  159. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/page.json +0 -0
  160. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/07deb8bce824e1be37d7/visual.json +0 -0
  161. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0b1c68838818b32ad03b/visual.json +0 -0
  162. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0c171de9d2683d10b930/visual.json +0 -0
  163. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0efa01be0510e40a645e/visual.json +0 -0
  164. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/6bf2f0eb830ab53cc668/visual.json +0 -0
  165. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/88d8141cb8500b60030c/visual.json +0 -0
  166. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/a753273590beed656a03/visual.json +0 -0
  167. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/b8fdc82cddd61ac447bc/visual.json +0 -0
  168. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/page.json +0 -0
  169. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/visuals/ce8532a7e25020271077/visual.json +0 -0
  170. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/pages/pages.json +0 -0
  171. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/report.json +0 -0
  172. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition/version.json +0 -0
  173. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_bpareporttemplate/definition.pbir +0 -0
  174. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_generate_report.py +0 -0
  175. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/report/_report_functions.py +0 -0
  176. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/src/sempy_labs/tom/__init__.py +0 -0
  177. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/tests/__init__.py +0 -0
  178. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/tests/test_shortcuts.py +0 -0
  179. {semantic_link_labs-0.7.4 → semantic_link_labs-0.8.0}/tests/test_tom.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: semantic-link-labs
3
- Version: 0.7.4
3
+ Version: 0.8.0
4
4
  Summary: Semantic Link Labs for Microsoft Fabric
5
5
  Author: Microsoft Corporation
6
6
  License: MIT License
@@ -20,13 +20,14 @@ Requires-Dist: anytree
20
20
  Requires-Dist: powerbiclient
21
21
  Requires-Dist: polib
22
22
  Requires-Dist: azure.mgmt.resource
23
+ Requires-Dist: jsonpath_ng
23
24
  Provides-Extra: test
24
25
  Requires-Dist: pytest>=8.2.1; extra == "test"
25
26
 
26
27
  # Semantic Link Labs
27
28
 
28
29
  [![PyPI version](https://badge.fury.io/py/semantic-link-labs.svg)](https://badge.fury.io/py/semantic-link-labs)
29
- [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.7.4&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
30
+ [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.8.0&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
30
31
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
31
32
  [![Downloads](https://static.pepy.tech/badge/semantic-link-labs)](https://pepy.tech/project/semantic-link-labs)
32
33
 
@@ -50,11 +51,13 @@ If you have ideas for new features/functions, please [request a feature](https:/
50
51
  ## Once installed, run this code to import the library into your notebook
51
52
  ```python
52
53
  import sempy_labs as labs
53
- from sempy_labs import migration, directlake
54
+ from sempy_labs import migration, directlake, admin
54
55
  from sempy_labs import lakehouse as lake
55
56
  from sempy_labs import report as rep
56
57
  from sempy_labs.tom import connect_semantic_model
58
+ from sempy_labs.report import ReportWrapper
57
59
  from sempy_labs import ConnectWarehouse
60
+ from sempy_labs import ConnectLakehouse
58
61
  ```
59
62
 
60
63
  ## Load semantic-link-labs into a custom [Fabric environment](https://learn.microsoft.com/fabric/data-engineering/create-and-use-environment)
@@ -78,6 +81,7 @@ An even better way to ensure the semantic-link-labs library is available in your
78
81
  2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
79
82
 
80
83
  ## Version History
84
+ * [0.8.0](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.0) (September 24, 2024)
81
85
  * [0.7.4](https://github.com/microsoft/semantic-link-labs/releases/tag/0.7.4) (September 16, 2024)
82
86
  * [0.7.3](https://github.com/microsoft/semantic-link-labs/releases/tag/0.7.3) (September 11, 2024)
83
87
  * [0.7.2](https://github.com/microsoft/semantic-link-labs/releases/tag/0.7.2) (August 30, 2024)
@@ -1,7 +1,7 @@
1
1
  # Semantic Link Labs
2
2
 
3
3
  [![PyPI version](https://badge.fury.io/py/semantic-link-labs.svg)](https://badge.fury.io/py/semantic-link-labs)
4
- [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.7.4&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
4
+ [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.8.0&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
5
5
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
6
6
  [![Downloads](https://static.pepy.tech/badge/semantic-link-labs)](https://pepy.tech/project/semantic-link-labs)
7
7
 
@@ -25,11 +25,13 @@ If you have ideas for new features/functions, please [request a feature](https:/
25
25
  ## Once installed, run this code to import the library into your notebook
26
26
  ```python
27
27
  import sempy_labs as labs
28
- from sempy_labs import migration, directlake
28
+ from sempy_labs import migration, directlake, admin
29
29
  from sempy_labs import lakehouse as lake
30
30
  from sempy_labs import report as rep
31
31
  from sempy_labs.tom import connect_semantic_model
32
+ from sempy_labs.report import ReportWrapper
32
33
  from sempy_labs import ConnectWarehouse
34
+ from sempy_labs import ConnectLakehouse
33
35
  ```
34
36
 
35
37
  ## Load semantic-link-labs into a custom [Fabric environment](https://learn.microsoft.com/fabric/data-engineering/create-and-use-environment)
@@ -53,6 +55,7 @@ An even better way to ensure the semantic-link-labs library is available in your
53
55
  2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
54
56
 
55
57
  ## Version History
58
+ * [0.8.0](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.0) (September 24, 2024)
56
59
  * [0.7.4](https://github.com/microsoft/semantic-link-labs/releases/tag/0.7.4) (September 16, 2024)
57
60
  * [0.7.3](https://github.com/microsoft/semantic-link-labs/releases/tag/0.7.3) (September 11, 2024)
58
61
  * [0.7.2](https://github.com/microsoft/semantic-link-labs/releases/tag/0.7.2) (August 30, 2024)
@@ -10,4 +10,5 @@ azure-storage-blob>=12.9.0
10
10
  anytree
11
11
  IPython
12
12
  polib
13
- azure.mgmt.resource
13
+ azure.mgmt.resource
14
+ jsonpath_ng
@@ -13,7 +13,7 @@ sys.path.insert(0, os.path.abspath('../../src/'))
13
13
  project = 'semantic-link-labs'
14
14
  copyright = '2024, Microsoft and community'
15
15
  author = 'Microsoft and community'
16
- release = '0.7.4'
16
+ release = '0.8.0'
17
17
 
18
18
  # -- General configuration ---------------------------------------------------
19
19
  # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
@@ -6,7 +6,7 @@ dependencies:
6
6
  - pytest-cov
7
7
  - pytest-mock
8
8
  - pip:
9
- - semantic-link-sempy>=0.7.5
9
+ - semantic-link-sempy>=0.8.0
10
10
  - azure-identity==1.7.1
11
11
  - azure-storage-blob>=12.9.0
12
12
  - pandas-stubs
@@ -0,0 +1 @@
1
+ {"cells":[{"cell_type":"markdown","id":"5c27dfd1-4fe0-4a97-92e6-ddf78889aa93","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Install the latest .whl package\n","\n","Check [here](https://pypi.org/project/semantic-link-labs/) to see the latest version."]},{"cell_type":"code","execution_count":null,"id":"d5cae9db-cef9-48a8-a351-9c5fcc99645c","metadata":{"jupyter":{"outputs_hidden":true,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["%pip install semantic-link-labs"]},{"cell_type":"markdown","id":"2856d26d","metadata":{},"source":["### Requirements\n","* Must have an Azure Subscription\n","* Must [register an App](https://ms.portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade)\n"," * Permissions: Will need the Contributor role at the scope where the resources will be created, which is often the subscription level\n","* Azure Key Vault\n"," * [Set up](https://learn.microsoft.com/azure/key-vault/secrets/quick-create-portal) within the Azure Subscription\n"," * Save secrets for the Tenant ID, Client ID (Application ID), Client Secret\n"," * Permissions: Ensure the user who will be executing the notebooks has “Key Vault Secrets User”\n","* Fabric Permissions\n"," * User should be a tenant admin. This ensures they have the necessary authority to execute and manage the notebooks without encountering permission issues.\n","\n","### Result\n","* F skus are created for each (specified) capacity\n"," * Within the same region as the P SKU\n"," * Equivalent SKU size as the P SKU\n"," * Same admins as listed on the P SKU\n"," * All workspaces are migrated to the corresponding new capacity\n"," * Capacity settings from the P SKU are transferred to the F SKU\n"," * Capacity settings\n"," * Notification settings\n"," * Access settings\n"," * Disaster recovery settings\n"," * Spark settings\n"," * Delegated tenant settings\n","* The names of the newly created F SKU capacities will be an alphanumeric lowercase version of the P SKU capacity name, suffixed with 'fsku'. As an example: \"My capacity_3!\" -> \"mycapacity3fsku\"."]},{"cell_type":"markdown","id":"b195eae8","metadata":{},"source":["### Import the library and set the initial parameters"]},{"cell_type":"code","execution_count":null,"id":"1344e286","metadata":{},"outputs":[],"source":["import sempy_labs as labs\n","\n","azure_subscription_id = '' # Enter your Azure subscription ID\n","key_vault_uri = '' # Enter your Azure Key Vault URI\n","key_vault_tenant_id = '' # Enter the name of the Azure Key Vault secret which stores your Tenant ID\n","key_vault_client_id = '' # Enter the name of the Azure Key Vault secret which stores your Client ID (Application ID)\n","key_vault_client_secret = '' # Enter the name of the Azure Key Vault secret which stores your Client Secret\n","resource_group = '' # Enter the name of the resource group (to be used to create the new F skus)"]},{"cell_type":"markdown","id":"5a3fe6e8-b8aa-4447-812b-7931831e07fe","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Migrate a single P SKU -> F SKU\n","Set the 'capacities' parameter to the single P SKU."]},{"cell_type":"code","execution_count":null,"id":"3655dd88","metadata":{},"outputs":[],"source":["labs.migrate_capacities(\n"," azure_subscription_id = azure_subscription_id,\n"," key_vault_uri = key_vault_uri,\n"," key_vault_tenant_id = key_vault_tenant_id,\n"," key_vault_client_id = key_vault_client_id,\n"," key_vault_client_secret = key_vault_client_secret,\n"," resource_group = resource_group,\n"," capacities = 'CapacityA',\n"," p_sku_only = True,\n",")"]},{"cell_type":"markdown","id":"175a59b8","metadata":{},"source":["### Migrate a list of P SKUs to F SKUs\n","Set the 'capacities' parameter to a list of P SKUs."]},{"cell_type":"code","execution_count":null,"id":"3a7a80ec","metadata":{},"outputs":[],"source":["labs.migrate_capacities(\n"," azure_subscription_id = azure_subscription_id,\n"," key_vault_uri = key_vault_uri,\n"," key_vault_tenant_id = key_vault_tenant_id,\n"," key_vault_client_id = key_vault_client_id,\n"," key_vault_client_secret = key_vault_client_secret,\n"," resource_group = resource_group,\n"," capacities = ['CapacityA', 'CapacityB', 'CapacityC'],\n"," p_sku_only = True,\n",")"]},{"cell_type":"markdown","id":"30438799","metadata":{},"source":["### Migrate all P SKUs to F SKUs\n","Set the 'capacities' parameter to None."]},{"cell_type":"code","execution_count":null,"id":"315c2dc7","metadata":{},"outputs":[],"source":["labs.migrate_capacities(\n"," azure_subscription_id = azure_subscription_id,\n"," key_vault_uri = key_vault_uri,\n"," key_vault_tenant_id = key_vault_tenant_id,\n"," key_vault_client_id = key_vault_client_id,\n"," key_vault_client_secret = key_vault_client_secret,\n"," resource_group = resource_group,\n"," capacities = None,\n"," p_sku_only = True,\n",")"]},{"cell_type":"markdown","id":"1d8e73b2","metadata":{},"source":["### Migrate a list of P SKUs to F SKUs; associate each capacity with a specific resource group\n","This process ensures that each F SKU is created within the resource group specified in the resource_group_mapping dictionary."]},{"cell_type":"code","execution_count":null,"id":"2854bf8a","metadata":{},"outputs":[],"source":["resource_group_mapping = {\n"," \"CapacityA\": \"ResourceGroupA\",\n"," \"CapacityB\": \"ResourceGroupA\",\n"," \"CapacityC\": \"ResourceGroupB\",\n","}\n","\n","labs.migrate_capacities(\n"," azure_subscription_id = azure_subscription_id,\n"," key_vault_uri = key_vault_uri,\n"," key_vault_tenant_id = key_vault_tenant_id,\n"," key_vault_client_id = key_vault_client_id,\n"," key_vault_client_secret = key_vault_client_secret,\n"," resource_group = resource_group_mapping,\n"," capacities = ['CapacityA', 'CapacityB', 'CapacityC'],\n"," p_sku_only = True,\n",")"]},{"cell_type":"markdown","id":"c3f497c8","metadata":{},"source":["### Migrate a single P SKU (already created F SKU)"]},{"cell_type":"code","execution_count":null,"id":"a4f0b5a2","metadata":{},"outputs":[],"source":["source_capacity = '' # Enter the P SKU capacity name\n","target_capacity = '' # Enter the F SKU capacity name (already exists) \n","\n","labs.migrate_workspaces(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","\n","# Optionally migrate settings\n","\"\"\"\n","labs.migrate_capacity_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","labs.migrate_access_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","labs.migrate_delegated_tenant_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","labs.migrate_disaster_recovery_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","labs.migrate_notification_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","labs.migrate_spark_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n",")\n","\"\"\""]},{"cell_type":"markdown","id":"e0db744b","metadata":{},"source":["### Migrate a list of P SKUs (already created F SKUs)"]},{"cell_type":"code","execution_count":null,"id":"0e04d519","metadata":{},"outputs":[],"source":["capacity_mapping = {\n"," \"capacitya\": \"capacityafsku\", # Format is \"P SKU\": \"F SKU\"\n"," \"capacityb\": \"capacitybfsku\",\n"," \"capacityc\": \"capacitycfsku\",\n","}\n","\n","p_skus = list(capacity_mapping.keys())\n","\n","for p_sku in p_skus:\n"," labs.migrate_workspaces(\n"," source_capacity=p_sku,\n"," target_capacity=capacity_mapping.get(p_sku)\n"," )\n"," # Optionally migrate settings\n"," \"\"\"\n"," labs.migrate_capacity_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n"," )\n"," labs.migrate_access_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n"," )\n"," labs.migrate_delegated_tenant_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n"," )\n"," labs.migrate_disaster_recovery_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n"," )\n"," labs.migrate_notification_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n"," )\n"," labs.migrate_spark_settings(\n"," source_capacity=source_capacity, \n"," target_capacity=target_capacity\n"," )\n"," \"\"\"\n"]}],"metadata":{"kernel_info":{"name":"synapse_pyspark"},"kernelspec":{"display_name":"Synapse PySpark","language":"Python","name":"synapse_pyspark"},"language_info":{"name":"python"},"microsoft":{"language":"python"},"nteract":{"version":"nteract-front-end@1.0.0"},"spark_compute":{"compute_id":"/trident/default"},"synapse_widget":{"state":{},"version":"0.1"},"widgets":{}},"nbformat":4,"nbformat_minor":5}
@@ -0,0 +1 @@
1
+ {"cells":[{"cell_type":"markdown","id":"5c27dfd1-4fe0-4a97-92e6-ddf78889aa93","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Install the latest .whl package\n","\n","Check [here](https://pypi.org/project/semantic-link-labs/) to see the latest version."]},{"cell_type":"code","execution_count":null,"id":"d5cae9db-cef9-48a8-a351-9c5fcc99645c","metadata":{"jupyter":{"outputs_hidden":true,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["%pip install semantic-link-labs"]},{"cell_type":"markdown","id":"b195eae8","metadata":{},"source":["### Import the library and set the initial parameters"]},{"cell_type":"code","execution_count":null,"id":"1344e286","metadata":{},"outputs":[],"source":["import sempy_labs as labs\n","import sempy_labs.report as rep\n","from sempy_labs.report import ReportWrapper\n","\n","# For checking reports\n","report_name = '' # Enter the report name\n","report_workspace = None # Enter the workspace in which the report exists\n","rpt = ReportWrapper(report=report_name, workspace=report_workspace)"]},{"cell_type":"markdown","id":"4b68c027","metadata":{},"source":["### Report Best Practice Analyzer (BPA)"]},{"cell_type":"code","execution_count":null,"id":"3a596d68","metadata":{},"outputs":[],"source":["rep.run_report_bpa(report=report_name, workspace=report_workspace)"]},{"cell_type":"markdown","id":"2ac3b59a","metadata":{},"source":["#### Report BPA using custom rules"]},{"cell_type":"code","execution_count":null,"id":"bf0fe645","metadata":{},"outputs":[],"source":["import pandas as pd\n","\n","rules = pd.DataFrame(\n"," [\n"," (\n"," \"Error Prevention\",\n"," \"Semantic Model\",\n"," \"Error\",\n"," \"Fix report objects which reference invalid semantic model objects\",\n"," lambda df: df[\"Valid Semantic Model Object\"] == False,\n"," \"This rule highlights visuals, report filters, page filters or visual filters which reference an invalid semantic model object (i.e Measure/Column/Hierarchy).\",\n"," \"\",\n"," ),\n"," (\n"," \"Performance\",\n"," \"Page\",\n"," \"Warning\",\n"," \"Reduce the number of visible visuals on the page\",\n"," lambda df: df[\"Visible Visual Count\"] > 15,\n"," 'Reducing the number of visable visuals on a page will lead to faster report performance. This rule flags pages with over \" + visVisuals + \" visible visuals.',\n"," ),\n"," (\n"," \"Performance\",\n"," \"Visual\",\n"," \"Warning\",\n"," \"Reduce the number of objects within visuals\",\n"," lambda df: df[\"Visual Object Count\"] > 5,\n"," \"Reducing the number of objects (i.e. measures, columns) which are used in a visual will lead to faster report performance.\",\n"," )\n"," ],\n"," columns=[\n"," \"Category\",\n"," \"Scope\",\n"," \"Severity\",\n"," \"Rule Name\",\n"," \"Expression\",\n"," \"Description\",\n"," \"URL\",\n"," ],\n",")\n","\n","rep.run_report_bpa(report=report_name, workspace=report_workspace, rules=rules)"]},{"cell_type":"markdown","id":"5a3fe6e8-b8aa-4447-812b-7931831e07fe","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### View all semantic model objects within a report"]},{"cell_type":"code","execution_count":null,"id":"9e349954","metadata":{},"outputs":[],"source":["rpt.list_semantic_model_objects()"]},{"cell_type":"markdown","id":"9efe783e","metadata":{},"source":["#### View broken report objects (if any semantic model objects used in the report do not exist within the semantic model)\n","The 'Valid Object' column indicates if the object (measure/column/hierarchy) exists within the semantic model used by the report"]},{"cell_type":"code","execution_count":null,"id":"a7480602","metadata":{},"outputs":[],"source":["rpt.list_semantic_model_objects(extended=True)"]},{"cell_type":"markdown","id":"5fab7ef7","metadata":{},"source":["#### View broken report objects across all reports tied to a semantic model"]},{"cell_type":"code","execution_count":null,"id":"34f1d9a6","metadata":{},"outputs":[],"source":["dataset_name = '' # Enter the semantic model name\n","dataset_workspace = None # Enter the workspace name in which the semantic model exists (if set to None it will use the workspace in which the notebook is running)\n","labs.list_report_semantic_model_objects(dataset=dataset_name, workspace=dataset_workspace, extended=True)"]},{"cell_type":"markdown","id":"26acd665","metadata":{},"source":["### List functions within the ReportWrapper"]},{"cell_type":"code","execution_count":null,"id":"9c2c206a","metadata":{},"outputs":[],"source":["rpt.list_custom_visuals()"]},{"cell_type":"code","execution_count":null,"id":"22647267","metadata":{},"outputs":[],"source":["rpt.list_pages()"]},{"cell_type":"code","execution_count":null,"id":"493fb104","metadata":{},"outputs":[],"source":["rpt.list_visuals()"]},{"cell_type":"code","execution_count":null,"id":"1ef9a9ac","metadata":{},"outputs":[],"source":["rpt.list_visual_objects()"]},{"cell_type":"code","execution_count":null,"id":"ad00499c","metadata":{},"outputs":[],"source":["rpt.list_report_filters()"]},{"cell_type":"code","execution_count":null,"id":"c0f02a49","metadata":{},"outputs":[],"source":["rpt.list_page_filters()"]},{"cell_type":"code","execution_count":null,"id":"4cf8d12f","metadata":{},"outputs":[],"source":["rpt.list_visual_filters()"]},{"cell_type":"code","execution_count":null,"id":"3b5e9c16","metadata":{},"outputs":[],"source":["rpt.list_report_level_measures()"]},{"cell_type":"code","execution_count":null,"id":"9f420f57","metadata":{},"outputs":[],"source":["rpt.list_visual_interactions()"]},{"cell_type":"code","execution_count":null,"id":"198afff0","metadata":{},"outputs":[],"source":["rpt.list_bookmarks()"]},{"cell_type":"markdown","id":"f3ee5962","metadata":{},"source":["### Perform actions on a report\n","Set a custom theme for a report based on a Power BI theme file"]},{"cell_type":"code","execution_count":null,"id":"ec1a7d1b","metadata":{},"outputs":[],"source":["rpt.set_theme(theme_file_path='/lakehouse/default/Files/CY23SU09.json')"]},{"cell_type":"code","execution_count":null,"id":"b1203067","metadata":{},"outputs":[],"source":["rpt.set_theme(theme_file_path='https://raw.githubusercontent.com/PowerBiDevCamp/FabricUserApiDemo/main/FabricUserApiDemo/DefinitionTemplates/Shared/Reports/StaticResources/SharedResources/BaseThemes/CY23SU08.json')"]},{"cell_type":"markdown","id":"9b230f9f","metadata":{},"source":["Set whether a Power BI report page is hidden or visible"]},{"cell_type":"code","execution_count":null,"id":"8ce57483","metadata":{},"outputs":[],"source":["rpt.set_page_visibility(page_name='Page 1', hidden=True)"]},{"cell_type":"markdown","id":"ef3e4c02","metadata":{},"source":["Set the active page (page shown upon opening the report)"]},{"cell_type":"code","execution_count":null,"id":"024d4111","metadata":{},"outputs":[],"source":["rpt.set_active_page(page_name='Page 2')"]},{"cell_type":"markdown","id":"f96511ac","metadata":{},"source":["Disable the 'show items with no data' for all visuals within a Power BI report"]},{"cell_type":"code","execution_count":null,"id":"65bf38fe","metadata":{},"outputs":[],"source":["rpt.disable_show_items_with_no_data()"]},{"cell_type":"markdown","id":"ddee3565","metadata":{},"source":["Remove all custom visuals in a Power BI report which are not used in any visuals within the report"]},{"cell_type":"code","execution_count":null,"id":"9aba1564","metadata":{},"outputs":[],"source":["rpt.remove_unnecessary_custom_visuals()"]},{"cell_type":"markdown","id":"5342423f","metadata":{},"source":["Hide all pages which are used for a tooltip or drillthrough"]},{"cell_type":"code","execution_count":null,"id":"b9045cbb","metadata":{},"outputs":[],"source":["rpt.hide_tooltip_drillthrough_pages()"]}],"metadata":{"kernel_info":{"name":"synapse_pyspark"},"kernelspec":{"display_name":"Synapse PySpark","language":"Python","name":"synapse_pyspark"},"language_info":{"name":"python"},"microsoft":{"language":"python"},"nteract":{"version":"nteract-front-end@1.0.0"},"spark_compute":{"compute_id":"/trident/default"},"synapse_widget":{"state":{},"version":"0.1"},"widgets":{}},"nbformat":4,"nbformat_minor":5}
@@ -0,0 +1 @@
1
+ {"cells":[{"cell_type":"markdown","id":"5c27dfd1-4fe0-4a97-92e6-ddf78889aa93","metadata":{"nteract":{"transient":{"deleting":false}}},"source":["### Install the latest .whl package\n","\n","Check [here](https://pypi.org/project/semantic-link-labs/) to see the latest version."]},{"cell_type":"code","execution_count":null,"id":"d5cae9db-cef9-48a8-a351-9c5fcc99645c","metadata":{"jupyter":{"outputs_hidden":true,"source_hidden":false},"nteract":{"transient":{"deleting":false}}},"outputs":[],"source":["%pip install semantic-link-labs"]},{"cell_type":"markdown","id":"b195eae8","metadata":{},"source":["### Import the library and necessary packages"]},{"cell_type":"code","execution_count":null,"id":"1344e286","metadata":{},"outputs":[],"source":["import sempy_labs as labs\n","from sempy_labs import ConnectWarehouse\n","from sempy_labs import ConnectLakehouse\n","\n","lakehouse_name = ''\n","lakehouse_workspace_name = ''\n","warehouse_name = ''\n","warehouse_workspace_name = ''"]},{"cell_type":"markdown","id":"55e5ca67","metadata":{},"source":["### Run a SQL query (or queries) against a Fabric warehouse"]},{"cell_type":"code","execution_count":null,"id":"a9f984e9","metadata":{},"outputs":[],"source":["with ConnectWarehouse(warehouse=warehouse_name, workspace=warehouse_workspace_name) as sql:\n"," df = sql.query(\"SELECT * FROM Product\")\n"," display(df)"]},{"cell_type":"code","execution_count":null,"id":"865ac4a1","metadata":{},"outputs":[],"source":["with ConnectWarehouse(warehouse=warehouse_name, workspace=warehouse_workspace_name) as sql:\n"," dfs = sql.query([\"SELECT * FROM Product\", \"SELECT DISTINCT [Category] FROM Product\"])\n","\n","for df in dfs:\n"," display(df)"]},{"cell_type":"markdown","id":"634700c3","metadata":{},"source":["### Run a T-SQL query (or queries) against a Fabric warehouse"]},{"cell_type":"code","execution_count":null,"id":"5dbf34f3","metadata":{},"outputs":[],"source":["with ConnectWarehouse(warehouse=warehouse_name, workspace=warehouse_workspace_name) as sql:\n"," sql.query(\"CREATE SCHEMA [Business]\")"]},{"cell_type":"code","execution_count":null,"id":"ec8ddb81","metadata":{},"outputs":[],"source":["with ConnectWarehouse(warehouse=warehouse_name, workspace=warehouse_workspace_name) as sql:\n"," sql.query([\"CREATE SCHEMA [Business]\", \"CREATE SCHEMA [Marketing]\"])"]},{"cell_type":"markdown","id":"d5b090da","metadata":{},"source":["### Run a SQL query (or queries) against a Fabric lakehouse"]},{"cell_type":"code","execution_count":null,"id":"4dca7f4a","metadata":{},"outputs":[],"source":["with ConnectLakehouse(lakehouse=lakehouse_name, workspace=lakehouse_workspace_name) as sql:\n"," df = sql.query(\"SELECT * FROM Product\")\n"," display(df)"]},{"cell_type":"code","execution_count":null,"id":"b9606ae8","metadata":{},"outputs":[],"source":["with ConnectLakehouse(lakehouse=lakehouse_name, workspace=lakehouse_workspace_name) as sql:\n"," dfs = sql.query([\"SELECT * FROM Product\", \"SELECT DISTINCT [Category] FROM Product\"])\n","\n","for df in dfs:\n"," display(df)"]}],"metadata":{"kernel_info":{"name":"synapse_pyspark"},"kernelspec":{"display_name":"Synapse PySpark","language":"Python","name":"synapse_pyspark"},"language_info":{"name":"python"},"microsoft":{"language":"python"},"nteract":{"version":"nteract-front-end@1.0.0"},"spark_compute":{"compute_id":"/trident/default"},"synapse_widget":{"state":{},"version":"0.1"},"widgets":{}},"nbformat":4,"nbformat_minor":5}
@@ -7,7 +7,7 @@ name="semantic-link-labs"
7
7
  authors = [
8
8
  { name = "Microsoft Corporation" },
9
9
  ]
10
- version="0.7.4"
10
+ version="0.8.0"
11
11
  description="Semantic Link Labs for Microsoft Fabric"
12
12
  readme="README.md"
13
13
  requires-python=">=3.10,<3.12"
@@ -28,6 +28,7 @@ dependencies = [
28
28
  "powerbiclient",
29
29
  "polib",
30
30
  "azure.mgmt.resource",
31
+ "jsonpath_ng",
31
32
  ]
32
33
 
33
34
  [tool.setuptools.packages.find]
@@ -45,7 +46,7 @@ test = [
45
46
  Repository = "https://github.com/microsoft/semantic-link-labs.git"
46
47
 
47
48
  [[tool.mypy.overrides]]
48
- module = "sempy.*,Microsoft.*,System.*,anytree.*,powerbiclient.*,synapse.ml.services.*,polib.*,azure.mgmt.resource.*"
49
+ module = "sempy.*,Microsoft.*,System.*,anytree.*,powerbiclient.*,synapse.ml.services.*,polib.*,azure.mgmt.resource.*,jsonpath_ng.*"
49
50
  ignore_missing_imports = true
50
51
 
51
52
  [tool.flake8]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: semantic-link-labs
3
- Version: 0.7.4
3
+ Version: 0.8.0
4
4
  Summary: Semantic Link Labs for Microsoft Fabric
5
5
  Author: Microsoft Corporation
6
6
  License: MIT License
@@ -20,13 +20,14 @@ Requires-Dist: anytree
20
20
  Requires-Dist: powerbiclient
21
21
  Requires-Dist: polib
22
22
  Requires-Dist: azure.mgmt.resource
23
+ Requires-Dist: jsonpath_ng
23
24
  Provides-Extra: test
24
25
  Requires-Dist: pytest>=8.2.1; extra == "test"
25
26
 
26
27
  # Semantic Link Labs
27
28
 
28
29
  [![PyPI version](https://badge.fury.io/py/semantic-link-labs.svg)](https://badge.fury.io/py/semantic-link-labs)
29
- [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.7.4&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
30
+ [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.8.0&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
30
31
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
31
32
  [![Downloads](https://static.pepy.tech/badge/semantic-link-labs)](https://pepy.tech/project/semantic-link-labs)
32
33
 
@@ -50,11 +51,13 @@ If you have ideas for new features/functions, please [request a feature](https:/
50
51
  ## Once installed, run this code to import the library into your notebook
51
52
  ```python
52
53
  import sempy_labs as labs
53
- from sempy_labs import migration, directlake
54
+ from sempy_labs import migration, directlake, admin
54
55
  from sempy_labs import lakehouse as lake
55
56
  from sempy_labs import report as rep
56
57
  from sempy_labs.tom import connect_semantic_model
58
+ from sempy_labs.report import ReportWrapper
57
59
  from sempy_labs import ConnectWarehouse
60
+ from sempy_labs import ConnectLakehouse
58
61
  ```
59
62
 
60
63
  ## Load semantic-link-labs into a custom [Fabric environment](https://learn.microsoft.com/fabric/data-engineering/create-and-use-environment)
@@ -78,6 +81,7 @@ An even better way to ensure the semantic-link-labs library is available in your
78
81
  2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
79
82
 
80
83
  ## Version History
84
+ * [0.8.0](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.0) (September 24, 2024)
81
85
  * [0.7.4](https://github.com/microsoft/semantic-link-labs/releases/tag/0.7.4) (September 16, 2024)
82
86
  * [0.7.3](https://github.com/microsoft/semantic-link-labs/releases/tag/0.7.3) (September 11, 2024)
83
87
  * [0.7.2](https://github.com/microsoft/semantic-link-labs/releases/tag/0.7.2) (August 30, 2024)
@@ -20,12 +20,14 @@ docs/source/conf.py
20
20
  docs/source/index.rst
21
21
  docs/source/modules.rst
22
22
  notebooks/Best Practice Analyzer Report.ipynb
23
+ notebooks/Capacity Migration.ipynb
23
24
  notebooks/Migration to Direct Lake.ipynb
24
25
  notebooks/Model Optimization.ipynb
25
26
  notebooks/Query Scale Out.ipynb
27
+ notebooks/Report Analysis.ipynb
28
+ notebooks/SQL.ipynb
26
29
  notebooks/Semantic Model Refresh.ipynb
27
30
  notebooks/Tabular Object Model.ipynb
28
- notebooks/Warehouse.ipynb
29
31
  src/semantic_link_labs.egg-info/PKG-INFO
30
32
  src/semantic_link_labs.egg-info/SOURCES.txt
31
33
  src/semantic_link_labs.egg-info/dependency_links.txt
@@ -34,6 +36,7 @@ src/semantic_link_labs.egg-info/top_level.txt
34
36
  src/sempy_labs/__init__.py
35
37
  src/sempy_labs/_ai.py
36
38
  src/sempy_labs/_capacities.py
39
+ src/sempy_labs/_capacity_migration.py
37
40
  src/sempy_labs/_clear_cache.py
38
41
  src/sempy_labs/_connections.py
39
42
  src/sempy_labs/_dataflows.py
@@ -98,6 +101,9 @@ src/sempy_labs/_bpa_translation/_model/_translations_tr-TR.po
98
101
  src/sempy_labs/_bpa_translation/_model/_translations_uk-UA.po
99
102
  src/sempy_labs/_bpa_translation/_model/_translations_zh-CN.po
100
103
  src/sempy_labs/_bpa_translation/_model/_translations_zu-ZA.po
104
+ src/sempy_labs/admin/__init__.py
105
+ src/sempy_labs/admin/_basic_functions.py
106
+ src/sempy_labs/admin/_domains.py
101
107
  src/sempy_labs/directlake/__init__.py
102
108
  src/sempy_labs/directlake/_directlake_schema_compare.py
103
109
  src/sempy_labs/directlake/_directlake_schema_sync.py
@@ -127,8 +133,13 @@ src/sempy_labs/migration/_refresh_calc_tables.py
127
133
  src/sempy_labs/report/_BPAReportTemplate.json
128
134
  src/sempy_labs/report/__init__.py
129
135
  src/sempy_labs/report/_generate_report.py
136
+ src/sempy_labs/report/_report_bpa.py
137
+ src/sempy_labs/report/_report_bpa_rules.py
130
138
  src/sempy_labs/report/_report_functions.py
139
+ src/sempy_labs/report/_report_helper.py
140
+ src/sempy_labs/report/_report_list_functions.py
131
141
  src/sempy_labs/report/_report_rebind.py
142
+ src/sempy_labs/report/_reportwrapper.py
132
143
  src/sempy_labs/report/_bpareporttemplate/.platform
133
144
  src/sempy_labs/report/_bpareporttemplate/definition.pbir
134
145
  src/sempy_labs/report/_bpareporttemplate/.pbi/localSettings.json
@@ -3,6 +3,7 @@ anytree
3
3
  powerbiclient
4
4
  polib
5
5
  azure.mgmt.resource
6
+ jsonpath_ng
6
7
 
7
8
  [test]
8
9
  pytest>=8.2.1
@@ -3,6 +3,36 @@ from sempy_labs._environments import (
3
3
  delete_environment,
4
4
  publish_environment,
5
5
  )
6
+ from sempy_labs._clear_cache import (
7
+ clear_cache,
8
+ backup_semantic_model,
9
+ restore_semantic_model,
10
+ copy_semantic_model_backup_file,
11
+ list_backups,
12
+ list_storage_account_files,
13
+ )
14
+ from sempy_labs._capacity_migration import (
15
+ migrate_spark_settings,
16
+ migrate_workspaces,
17
+ migrate_capacities,
18
+ migrate_notification_settings,
19
+ migrate_access_settings,
20
+ migrate_delegated_tenant_settings,
21
+ migrate_capacity_settings,
22
+ migrate_disaster_recovery_settings,
23
+ )
24
+ from sempy_labs._capacities import (
25
+ create_fabric_capacity,
26
+ # get_capacity_resource_governance,
27
+ # list_vcores,
28
+ resume_fabric_capacity,
29
+ suspend_fabric_capacity,
30
+ update_fabric_capacity,
31
+ delete_fabric_capacity,
32
+ check_fabric_capacity_name_availablility,
33
+ delete_embedded_capacity,
34
+ delete_premium_capacity,
35
+ )
6
36
 
7
37
  from sempy_labs._spark import (
8
38
  get_spark_settings,
@@ -28,16 +58,7 @@ from sempy_labs._notebooks import (
28
58
  )
29
59
  from sempy_labs._sql import (
30
60
  ConnectWarehouse,
31
- )
32
- from sempy_labs._capacities import (
33
- check_fabric_capacity_name_availablility,
34
- delete_fabric_capacity,
35
- resume_fabric_capacity,
36
- update_fabric_capacity,
37
- create_fabric_capacity,
38
- delete_premium_capacity,
39
- suspend_fabric_capacity,
40
- delete_embedded_capacity,
61
+ ConnectLakehouse,
41
62
  )
42
63
  from sempy_labs._workspace_identity import (
43
64
  provision_workspace_identity,
@@ -62,14 +83,6 @@ from sempy_labs._dataflows import (
62
83
  assign_workspace_to_dataflow_storage,
63
84
  list_dataflows,
64
85
  )
65
- from sempy_labs._clear_cache import (
66
- clear_cache,
67
- backup_semantic_model,
68
- restore_semantic_model,
69
- copy_semantic_model_backup_file,
70
- list_backups,
71
- list_storage_account_files,
72
- )
73
86
  from sempy_labs._connections import (
74
87
  list_connections,
75
88
  list_item_connections,
@@ -88,6 +101,8 @@ from sempy_labs._generate_semantic_model import (
88
101
  )
89
102
  from sempy_labs._list_functions import (
90
103
  list_reports_using_semantic_model,
104
+ list_semantic_model_object_report_usage,
105
+ list_report_semantic_model_objects,
91
106
  list_semantic_model_objects,
92
107
  list_shortcuts,
93
108
  get_object_level_security,
@@ -116,6 +131,7 @@ from sempy_labs._helper_functions import (
116
131
  resolve_environment_id,
117
132
  resolve_capacity_id,
118
133
  resolve_warehouse_id,
134
+ resolve_dataset_from_report,
119
135
  resolve_workspace_capacity,
120
136
  create_abfss_path,
121
137
  format_dax_object_name,
@@ -175,6 +191,7 @@ from sempy_labs._vertipaq import (
175
191
  __all__ = [
176
192
  "resolve_warehouse_id",
177
193
  "ConnectWarehouse",
194
+ "ConnectLakehouse",
178
195
  "update_semantic_model_from_bim",
179
196
  "list_connections",
180
197
  "get_semantic_model_size",
@@ -186,6 +203,10 @@ __all__ = [
186
203
  "list_storage_account_files",
187
204
  "backup_semantic_model",
188
205
  "restore_semantic_model",
206
+ "list_semantic_model_object_report_usage",
207
+ "list_report_semantic_model_objects",
208
+ "migrate_spark_settings",
209
+ "create_azure_storage_account",
189
210
  "delete_custom_pool",
190
211
  "clear_cache",
191
212
  # create_connection_cloud,
@@ -301,4 +322,22 @@ __all__ = [
301
322
  "delete_premium_capacity",
302
323
  "suspend_fabric_capacity",
303
324
  "delete_embedded_capacity",
325
+ "resolve_dataset_from_report",
326
+ "migrate_workspaces",
327
+ "migrate_capacities",
328
+ "create_fabric_capacity",
329
+ "migrate_capacity_settings",
330
+ # "get_capacity_resource_governance",
331
+ # "list_vcores",
332
+ "migrate_disaster_recovery_settings",
333
+ "migrate_notification_settings",
334
+ "migrate_access_settings",
335
+ "migrate_delegated_tenant_settings",
336
+ "resume_fabric_capacity",
337
+ "suspend_fabric_capacity",
338
+ "update_fabric_capacity",
339
+ "delete_fabric_capacity",
340
+ "check_fabric_capacity_name_availablility",
341
+ "delete_embedded_capacity",
342
+ "delete_premium_capacity",
304
343
  ]
@@ -5,6 +5,7 @@ import sempy_labs._icons as icons
5
5
  from sempy.fabric.exceptions import FabricHTTPException
6
6
  import requests
7
7
  from sempy_labs._helper_functions import get_azure_token_credentials
8
+ import pandas as pd
8
9
 
9
10
 
10
11
  def _add_sll_tag(payload, tags):
@@ -155,10 +156,10 @@ def create_fabric_capacity(
155
156
  for i in resource_client.resources.list(
156
157
  "resourceType eq 'Microsoft.PowerBIDedicated/capacities'"
157
158
  ):
158
- if i.name == capacity_name.removesuffix(capacity_suffix):
159
+ if i.name == capacity_name.removesuffix(icons.migrate_capacity_suffix):
159
160
  resource_group = i.id.split("/")[4]
160
161
  print(
161
- f"{icons.yellow_dot} Override resource group flag detected for A SKUs - using the existing resource group '{resource_group}' for capacity '{capacity_name}'"
162
+ f"{icons.yellow_dot} Override resource group flag detected for A SKUs - using the existing resource group '{resource_group}' for the '{capacity_name}' capacity."
162
163
  )
163
164
  else:
164
165
  # Attempt to get the resource group
@@ -207,6 +208,41 @@ def create_fabric_capacity(
207
208
  )
208
209
 
209
210
 
211
+ def list_vcores() -> pd.DataFrame:
212
+
213
+ df = pd.DataFrame(columns=["Total Purchased Cores", "Available Cores"])
214
+
215
+ client = fabric.PowerBIRestClient()
216
+ response = client.get("capacities/vcores")
217
+ if response.status_code != 200:
218
+ FabricHTTPException(response)
219
+ response_json = response.json()
220
+ new_data = {
221
+ "Total Purchased Cores": response_json.get("totalPurchasedCores"),
222
+ "Available Cores": response_json.get("availableCores"),
223
+ }
224
+ df = pd.concat([df, pd.DataFrame(new_data, index=[0])], ignore_index=True)
225
+
226
+ int_cols = ["Total Purchased Cores", "Available Cores"]
227
+ df[int_cols] = df[int_cols].astype(int)
228
+
229
+ return df
230
+
231
+
232
+ def get_capacity_resource_governance(capacity_name: str):
233
+
234
+ dfC = fabric.list_capacities()
235
+ dfC_filt = dfC[dfC["Display Name"] == capacity_name]
236
+ capacity_id = dfC_filt["Id"].iloc[0].upper()
237
+ client = fabric.PowerBIRestClient()
238
+ response = client.get(f"capacities/{capacity_id}/resourceGovernance")
239
+
240
+ if response.status_code != 200:
241
+ FabricHTTPException(response)
242
+
243
+ return response.json()["workloadSettings"]
244
+
245
+
210
246
  def suspend_fabric_capacity(
211
247
  capacity_name: str,
212
248
  azure_subscription_id: str,
@@ -375,7 +411,7 @@ def delete_premium_capacity(capacity_name: str):
375
411
  client = fabric.FabricRestClient()
376
412
  response = client.delete(f"capacities/{capacity_id}")
377
413
 
378
- if response.status_code != 200:
414
+ if response.status_code != 204:
379
415
  raise FabricHTTPException(response)
380
416
 
381
417
  print(f"{icons.green_dot} The '{capacity_name}' capacity has been deleted.")