semantic-link-labs 0.9.2__tar.gz → 0.9.3__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 (212) hide show
  1. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/.github/workflows/build.yaml +2 -2
  2. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/PKG-INFO +3 -2
  3. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/README.md +2 -1
  4. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/docs/source/conf.py +1 -1
  5. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/pyproject.toml +1 -1
  6. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/semantic_link_labs.egg-info/PKG-INFO +3 -2
  7. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_ai.py +8 -5
  8. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_connections.py +45 -9
  9. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_delta_analyzer.py +51 -33
  10. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_gateways.py +56 -8
  11. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_helper_functions.py +54 -8
  12. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_list_functions.py +2 -3
  13. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_ml_experiments.py +1 -1
  14. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_model_bpa.py +2 -2
  15. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_model_bpa_rules.py +8 -6
  16. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_translations.py +2 -2
  17. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_vertipaq.py +3 -3
  18. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_warehouses.py +1 -1
  19. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/admin/_domains.py +0 -2
  20. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/admin/_scanner.py +53 -48
  21. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/lakehouse/_get_lakehouse_columns.py +2 -2
  22. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/lakehouse/_get_lakehouse_tables.py +2 -2
  23. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/lakehouse/_lakehouse.py +3 -3
  24. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/lakehouse/_shortcuts.py +1 -1
  25. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/migration/_migrate_calctables_to_lakehouse.py +2 -2
  26. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/migration/_refresh_calc_tables.py +2 -2
  27. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_report_functions.py +2 -2
  28. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_report_rebind.py +1 -1
  29. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/tom/_model.py +4 -1
  30. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  31. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  32. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/.github/ISSUE_TEMPLATE/issue--question---advice-needed.md +0 -0
  33. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/.github/workflows/codeql.yaml +0 -0
  34. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/.gitignore +0 -0
  35. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/.readthedocs.yaml +0 -0
  36. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/.vscode/settings.json +0 -0
  37. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/CODE_OF_CONDUCT.md +0 -0
  38. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/LICENSE +0 -0
  39. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/SECURITY.md +0 -0
  40. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/SUPPORT.md +0 -0
  41. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/docs/Makefile +0 -0
  42. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/docs/make.bat +0 -0
  43. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/docs/requirements.txt +0 -0
  44. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/docs/source/index.rst +0 -0
  45. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/docs/source/modules.rst +0 -0
  46. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/environment.yml +0 -0
  47. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/notebooks/Best Practice Analyzer Report.ipynb +0 -0
  48. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/notebooks/Capacity Migration.ipynb +0 -0
  49. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/notebooks/Delta Analyzer.ipynb +0 -0
  50. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/notebooks/Migration to Direct Lake.ipynb +0 -0
  51. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/notebooks/Model Optimization.ipynb +0 -0
  52. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/notebooks/Query Scale Out.ipynb +0 -0
  53. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/notebooks/Report Analysis.ipynb +0 -0
  54. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/notebooks/SQL.ipynb +0 -0
  55. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/notebooks/Semantic Model Management.ipynb +0 -0
  56. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/notebooks/Semantic Model Refresh.ipynb +0 -0
  57. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/notebooks/Service Principal.ipynb +0 -0
  58. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/notebooks/Tabular Object Model.ipynb +0 -0
  59. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/setup.cfg +0 -0
  60. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/semantic_link_labs.egg-info/SOURCES.txt +0 -0
  61. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/semantic_link_labs.egg-info/dependency_links.txt +0 -0
  62. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/semantic_link_labs.egg-info/requires.txt +0 -0
  63. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/semantic_link_labs.egg-info/top_level.txt +0 -0
  64. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/__init__.py +0 -0
  65. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_authentication.py +0 -0
  66. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_am-ET.po +0 -0
  67. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_ar-AE.po +0 -0
  68. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_bg-BG.po +0 -0
  69. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_ca-ES.po +0 -0
  70. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_cs-CZ.po +0 -0
  71. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_da-DK.po +0 -0
  72. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_de-DE.po +0 -0
  73. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_el-GR.po +0 -0
  74. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_es-ES.po +0 -0
  75. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_fa-IR.po +0 -0
  76. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_fi-FI.po +0 -0
  77. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_fr-FR.po +0 -0
  78. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_ga-IE.po +0 -0
  79. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_he-IL.po +0 -0
  80. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_hi-IN.po +0 -0
  81. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_hu-HU.po +0 -0
  82. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_id-ID.po +0 -0
  83. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_is-IS.po +0 -0
  84. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_it-IT.po +0 -0
  85. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_ja-JP.po +0 -0
  86. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_ko-KR.po +0 -0
  87. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_mt-MT.po +0 -0
  88. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_nl-NL.po +0 -0
  89. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_pl-PL.po +0 -0
  90. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_pt-BR.po +0 -0
  91. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_pt-PT.po +0 -0
  92. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_ro-RO.po +0 -0
  93. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_ru-RU.po +0 -0
  94. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_sk-SK.po +0 -0
  95. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_sl-SL.po +0 -0
  96. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_sv-SE.po +0 -0
  97. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_ta-IN.po +0 -0
  98. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_te-IN.po +0 -0
  99. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_th-TH.po +0 -0
  100. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_tr-TR.po +0 -0
  101. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_uk-UA.po +0 -0
  102. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_zh-CN.po +0 -0
  103. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_bpa_translation/_model/_translations_zu-ZA.po +0 -0
  104. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_capacities.py +0 -0
  105. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_capacity_migration.py +0 -0
  106. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_clear_cache.py +0 -0
  107. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_data_pipelines.py +0 -0
  108. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_dataflows.py +0 -0
  109. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_dax.py +0 -0
  110. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_deployment_pipelines.py +0 -0
  111. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_documentation.py +0 -0
  112. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_environments.py +0 -0
  113. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_eventhouses.py +0 -0
  114. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_eventstreams.py +0 -0
  115. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_external_data_shares.py +0 -0
  116. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_generate_semantic_model.py +0 -0
  117. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_git.py +0 -0
  118. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_graphQL.py +0 -0
  119. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_icons.py +0 -0
  120. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_job_scheduler.py +0 -0
  121. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_kql_databases.py +0 -0
  122. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_kql_querysets.py +0 -0
  123. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_managed_private_endpoints.py +0 -0
  124. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_mirrored_databases.py +0 -0
  125. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_mirrored_warehouses.py +0 -0
  126. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_ml_models.py +0 -0
  127. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_model_auto_build.py +0 -0
  128. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_model_bpa_bulk.py +0 -0
  129. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_model_dependencies.py +0 -0
  130. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_notebooks.py +0 -0
  131. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_one_lake_integration.py +0 -0
  132. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_query_scale_out.py +0 -0
  133. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_refresh_semantic_model.py +0 -0
  134. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_spark.py +0 -0
  135. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_sql.py +0 -0
  136. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_workloads.py +0 -0
  137. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_workspace_identity.py +0 -0
  138. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/_workspaces.py +0 -0
  139. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/admin/__init__.py +0 -0
  140. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/admin/_basic_functions.py +0 -0
  141. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/admin/_external_data_share.py +0 -0
  142. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/admin/_git.py +0 -0
  143. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/admin/_items.py +0 -0
  144. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/directlake/__init__.py +0 -0
  145. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/directlake/_directlake_schema_compare.py +0 -0
  146. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/directlake/_directlake_schema_sync.py +0 -0
  147. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/directlake/_dl_helper.py +0 -0
  148. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/directlake/_generate_shared_expression.py +0 -0
  149. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/directlake/_get_directlake_lakehouse.py +0 -0
  150. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/directlake/_get_shared_expression.py +0 -0
  151. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/directlake/_guardrails.py +0 -0
  152. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/directlake/_list_directlake_model_calc_tables.py +0 -0
  153. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/directlake/_show_unsupported_directlake_objects.py +0 -0
  154. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/directlake/_update_directlake_model_lakehouse_connection.py +0 -0
  155. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/directlake/_update_directlake_partition_entity.py +0 -0
  156. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/directlake/_warm_cache.py +0 -0
  157. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/graph/__init__.py +0 -0
  158. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/graph/_groups.py +0 -0
  159. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/graph/_teams.py +0 -0
  160. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/graph/_users.py +0 -0
  161. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/lakehouse/__init__.py +0 -0
  162. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/migration/__init__.py +0 -0
  163. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/migration/_create_pqt_file.py +0 -0
  164. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/migration/_direct_lake_to_import.py +0 -0
  165. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/migration/_migrate_calctables_to_semantic_model.py +0 -0
  166. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/migration/_migrate_model_objects_to_semantic_model.py +0 -0
  167. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/migration/_migrate_tables_columns_to_semantic_model.py +0 -0
  168. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/migration/_migration_validation.py +0 -0
  169. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_BPAReportTemplate.json +0 -0
  170. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/__init__.py +0 -0
  171. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/.pbi/localSettings.json +0 -0
  172. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/.platform +0 -0
  173. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/StaticResources/SharedResources/BaseThemes/CY24SU06.json +0 -0
  174. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/page.json +0 -0
  175. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/1b08bce3bebabb0a27a8/visual.json +0 -0
  176. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/2f22ddb70c301693c165/visual.json +0 -0
  177. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/3b1182230aa6c600b43a/visual.json +0 -0
  178. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/58577ba6380c69891500/visual.json +0 -0
  179. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/a2a8fa5028b3b776c96c/visual.json +0 -0
  180. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/adfd47ef30652707b987/visual.json +0 -0
  181. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/b6a80ee459e716e170b1/visual.json +0 -0
  182. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/ce3130a721c020cc3d81/visual.json +0 -0
  183. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/page.json +0 -0
  184. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/visuals/66e60dfb526437cd78d1/visual.json +0 -0
  185. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/page.json +0 -0
  186. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/07deb8bce824e1be37d7/visual.json +0 -0
  187. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0b1c68838818b32ad03b/visual.json +0 -0
  188. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0c171de9d2683d10b930/visual.json +0 -0
  189. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0efa01be0510e40a645e/visual.json +0 -0
  190. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/6bf2f0eb830ab53cc668/visual.json +0 -0
  191. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/88d8141cb8500b60030c/visual.json +0 -0
  192. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/a753273590beed656a03/visual.json +0 -0
  193. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/b8fdc82cddd61ac447bc/visual.json +0 -0
  194. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/page.json +0 -0
  195. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/visuals/ce8532a7e25020271077/visual.json +0 -0
  196. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/pages/pages.json +0 -0
  197. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/report.json +0 -0
  198. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition/version.json +0 -0
  199. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_bpareporttemplate/definition.pbir +0 -0
  200. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_download_report.py +0 -0
  201. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_generate_report.py +0 -0
  202. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_paginated.py +0 -0
  203. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_report_bpa.py +0 -0
  204. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_report_bpa_rules.py +0 -0
  205. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_report_helper.py +0 -0
  206. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_report_list_functions.py +0 -0
  207. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/report/_reportwrapper.py +0 -0
  208. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/src/sempy_labs/tom/__init__.py +0 -0
  209. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/tests/__init__.py +0 -0
  210. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/tests/test_friendly_case.py +0 -0
  211. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/tests/test_shortcuts.py +0 -0
  212. {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.3}/tests/test_tom.py +0 -0
@@ -28,7 +28,7 @@ jobs:
28
28
  shell: bash
29
29
 
30
30
  - name: Cache conda
31
- uses: actions/cache@v2
31
+ uses: actions/cache@v3
32
32
  env:
33
33
  # Increase this value to reset cache if environment.yml has not changed
34
34
  CACHE_NUMBER: 0
@@ -37,7 +37,7 @@ jobs:
37
37
  key:
38
38
  ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-${{ steps.get-date.outputs.today }}-${{ hashFiles('environment.yml') }}
39
39
 
40
- - uses: conda-incubator/setup-miniconda@v2
40
+ - uses: conda-incubator/setup-miniconda@v3
41
41
  with:
42
42
  auto-update-conda: true
43
43
  activate-environment: fabric
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: semantic-link-labs
3
- Version: 0.9.2
3
+ Version: 0.9.3
4
4
  Summary: Semantic Link Labs for Microsoft Fabric
5
5
  Author: Microsoft Corporation
6
6
  License: MIT License
@@ -26,7 +26,7 @@ Requires-Dist: pytest>=8.2.1; extra == "test"
26
26
  # Semantic Link Labs
27
27
 
28
28
  [![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.9.2&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
29
+ [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.9.3&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
30
30
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
31
31
  [![Downloads](https://static.pepy.tech/badge/semantic-link-labs)](https://pepy.tech/project/semantic-link-labs)
32
32
 
@@ -144,6 +144,7 @@ An even better way to ensure the semantic-link-labs library is available in your
144
144
  2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
145
145
 
146
146
  ## Version History
147
+ * [0.9.3](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.3) (February 13, 2025)
147
148
  * [0.9.2](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.2) (February 5, 2025)
148
149
  * [0.9.1](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.1) (January 22, 2025)
149
150
  * [0.9.0](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.0) (January 22, 2025)
@@ -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.9.2&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
4
+ [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.9.3&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
 
@@ -119,6 +119,7 @@ An even better way to ensure the semantic-link-labs library is available in your
119
119
  2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
120
120
 
121
121
  ## Version History
122
+ * [0.9.3](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.3) (February 13, 2025)
122
123
  * [0.9.2](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.2) (February 5, 2025)
123
124
  * [0.9.1](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.1) (January 22, 2025)
124
125
  * [0.9.0](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.0) (January 22, 2025)
@@ -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.9.2'
16
+ release = '0.9.3'
17
17
 
18
18
  # -- General configuration ---------------------------------------------------
19
19
  # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
@@ -7,7 +7,7 @@ name="semantic-link-labs"
7
7
  authors = [
8
8
  { name = "Microsoft Corporation" },
9
9
  ]
10
- version="0.9.2"
10
+ version="0.9.3"
11
11
  description="Semantic Link Labs for Microsoft Fabric"
12
12
  readme="README.md"
13
13
  requires-python=">=3.10,<3.12"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: semantic-link-labs
3
- Version: 0.9.2
3
+ Version: 0.9.3
4
4
  Summary: Semantic Link Labs for Microsoft Fabric
5
5
  Author: Microsoft Corporation
6
6
  License: MIT License
@@ -26,7 +26,7 @@ Requires-Dist: pytest>=8.2.1; extra == "test"
26
26
  # Semantic Link Labs
27
27
 
28
28
  [![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.9.2&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
29
+ [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.9.3&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
30
30
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
31
31
  [![Downloads](https://static.pepy.tech/badge/semantic-link-labs)](https://pepy.tech/project/semantic-link-labs)
32
32
 
@@ -144,6 +144,7 @@ An even better way to ensure the semantic-link-labs library is available in your
144
144
  2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
145
145
 
146
146
  ## Version History
147
+ * [0.9.3](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.3) (February 13, 2025)
147
148
  * [0.9.2](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.2) (February 5, 2025)
148
149
  * [0.9.1](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.1) (January 22, 2025)
149
150
  * [0.9.0](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.0) (January 22, 2025)
@@ -1,10 +1,13 @@
1
1
  import sempy
2
2
  import sempy.fabric as fabric
3
3
  import pandas as pd
4
- from pyspark.sql import SparkSession
5
4
  from typing import List, Optional, Union
6
5
  from IPython.display import display
7
6
  import sempy_labs._icons as icons
7
+ from sempy_labs._helper_functions import (
8
+ _read_delta_table,
9
+ _run_spark_sql_query,
10
+ )
8
11
 
9
12
 
10
13
  def optimize_semantic_model(dataset: str, workspace: Optional[str] = None):
@@ -186,13 +189,13 @@ def generate_aggs(
186
189
 
187
190
  query = query[:-1]
188
191
 
189
- spark = SparkSession.builder.getOrCreate()
190
192
  fromTablePath = create_abfss_path(
191
193
  lakehouse_id=lakehouse_id,
192
194
  lakehouse_workspace_id=lakehouse_workspace_id,
193
195
  delta_table_name=lakeTName,
194
196
  )
195
- df = spark.read.format("delta").load(fromTablePath)
197
+
198
+ df = _read_delta_table(fromTablePath)
196
199
  tempTableName = f"delta_table_{lakeTName}"
197
200
  df.createOrReplaceTempView(tempTableName)
198
201
  sqlQuery = f"{query} \n FROM {tempTableName} {groupBy}"
@@ -201,7 +204,7 @@ def generate_aggs(
201
204
  print(sqlQuery)
202
205
 
203
206
  # Save query to spark dataframe
204
- spark_df = spark.sql(sqlQuery)
207
+ spark_df = _run_spark_sql_query(sqlQuery)
205
208
  f"\nCreating/updating the '{aggLakeTName}' table in the lakehouse..."
206
209
  # Write spark dataframe to delta table
207
210
  aggFilePath = create_abfss_path(
@@ -419,7 +422,7 @@ def generate_aggs(
419
422
  # dfP = fabric.list_partitions(dataset = dataset, workspace = workspace)
420
423
  # isDirectLake = any(r['Mode'] == 'DirectLake' for i, r in dfP.iterrows())
421
424
 
422
- # spark = SparkSession.builder.getOrCreate()
425
+ # spark = _create_spark_session()
423
426
  # views = spark.sql(f"SHOW VIEWS IN {lakehouse}").collect()
424
427
  # for view in views:
425
428
  # viewName = view['viewName']
@@ -19,6 +19,8 @@ def delete_connection(connection: str | UUID):
19
19
 
20
20
  This is a wrapper function for the following API: `Connections - Delete Connection <https://learn.microsoft.com/rest/api/fabric/core/connections/delete-connection>`_.
21
21
 
22
+ Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
23
+
22
24
  Parameters
23
25
  ----------
24
26
  connection : str | uuid.UUID
@@ -26,7 +28,9 @@ def delete_connection(connection: str | UUID):
26
28
  """
27
29
 
28
30
  connection_id = _resolve_connection_id(connection)
29
- _base_api(request=f"/v1/connections/{connection_id}", method="delete")
31
+ _base_api(
32
+ request=f"/v1/connections/{connection_id}", client="fabric_sp", method="delete"
33
+ )
30
34
  print(f"{icons.green_dot} The '{connection}' connection has been deleted.")
31
35
 
32
36
 
@@ -36,6 +40,8 @@ def delete_connection_role_assignment(connection: str | UUID, role_assignment_id
36
40
 
37
41
  This is a wrapper function for the following API: `Connections - Delete Connection Role Assignment <https://learn.microsoft.com/rest/api/fabric/core/connections/delete-connection-role-assignment>`_.
38
42
 
43
+ Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
44
+
39
45
  Parameters
40
46
  ----------
41
47
  connection : str | uuid.UUID
@@ -47,6 +53,7 @@ def delete_connection_role_assignment(connection: str | UUID, role_assignment_id
47
53
  connection_id = _resolve_connection_id(connection)
48
54
  _base_api(
49
55
  request=f"/v1/connections/{connection_id}/roleAssignments/{role_assignment_id}",
56
+ client="fabric_sp",
50
57
  method="delete",
51
58
  )
52
59
 
@@ -77,6 +84,8 @@ def list_connection_role_assignments(connection: str | UUID) -> pd.DataFrame:
77
84
 
78
85
  This is a wrapper function for the following API: `Connections - List Connection Role Assignments <https://learn.microsoft.com/rest/api/fabric/core/connections/list-connection-role-assignments>`_.
79
86
 
87
+ Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
88
+
80
89
  Parameters
81
90
  ----------
82
91
  connection : str | uuid.UUID
@@ -100,7 +109,9 @@ def list_connection_role_assignments(connection: str | UUID) -> pd.DataFrame:
100
109
  df = _create_dataframe(columns=columns)
101
110
 
102
111
  responses = _base_api(
103
- request=f"/v1/connections/{connection_id}/roleAssignments", uses_pagination=True
112
+ request=f"/v1/connections/{connection_id}/roleAssignments",
113
+ client="fabric_sp",
114
+ uses_pagination=True,
104
115
  )
105
116
 
106
117
  for r in responses:
@@ -121,6 +132,8 @@ def list_connections() -> pd.DataFrame:
121
132
  """
122
133
  Lists all available connections.
123
134
 
135
+ Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
136
+
124
137
  Returns
125
138
  -------
126
139
  pandas.DataFrame
@@ -136,13 +149,15 @@ def list_connections() -> pd.DataFrame:
136
149
  "Connection Type": "string",
137
150
  "Privacy Level": "string",
138
151
  "Credential Type": "string",
139
- "Single Sign on Type": "string",
140
- "Connection Encyrption": "string",
152
+ "Single Sign On Type": "string",
153
+ "Connection Encryption": "string",
141
154
  "Skip Test Connection": "bool",
142
155
  }
143
156
  df = _create_dataframe(columns=columns)
144
157
 
145
- responses = _base_api(request="/v1/connections", uses_pagination=True)
158
+ responses = _base_api(
159
+ request="/v1/connections", client="fabric_sp", uses_pagination=True
160
+ )
146
161
 
147
162
  for r in responses:
148
163
  for i in r.get("value", []):
@@ -194,6 +209,8 @@ def list_item_connections(
194
209
 
195
210
  This is a wrapper function for the following API: `Items - List Item Connections <https://learn.microsoft.com/rest/api/fabric/core/items/list-item-connections>`_.
196
211
 
212
+ Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
213
+
197
214
  Parameters
198
215
  ----------
199
216
  item_name : str
@@ -229,6 +246,7 @@ def list_item_connections(
229
246
 
230
247
  responses = _base_api(
231
248
  request=f"/v1/workspaces/{workspace_id}/items/{item_id}/connections",
249
+ client="fabric_sp",
232
250
  uses_pagination=True,
233
251
  )
234
252
 
@@ -267,7 +285,7 @@ def _list_supported_connection_types(
267
285
  df = _create_dataframe(columns=columns)
268
286
 
269
287
  url = url.rstrip("&")
270
- responses = _base_api(request=url, uses_pagination=True)
288
+ responses = _base_api(request=url, client="fabric_sp", uses_pagination=True)
271
289
 
272
290
  records = []
273
291
  for r in responses:
@@ -309,6 +327,8 @@ def create_cloud_connection(
309
327
 
310
328
  This is a wrapper function for the following API: `Connections - Create Connection <https://learn.microsoft.com/rest/api/fabric/core/connections/create-connection>`_.
311
329
 
330
+ Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
331
+
312
332
  Parameters
313
333
  ----------
314
334
  name : str
@@ -362,7 +382,11 @@ def create_cloud_connection(
362
382
  }
363
383
 
364
384
  _base_api(
365
- request="/v1/connections", method="post", payload=payload, status_codes=201
385
+ request="/v1/connections",
386
+ client="fabric_sp",
387
+ method="post",
388
+ payload=payload,
389
+ status_codes=201,
366
390
  )
367
391
 
368
392
  print(f"{icons.green_dot} The '{name}' cloud connection has been created.")
@@ -383,6 +407,8 @@ def create_on_prem_connection(
383
407
 
384
408
  This is a wrapper function for the following API: `Connections - Create Connection <https://learn.microsoft.com/rest/api/fabric/core/connections/create-connection>`_.
385
409
 
410
+ Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
411
+
386
412
  Parameters
387
413
  ----------
388
414
  name : str
@@ -440,7 +466,11 @@ def create_on_prem_connection(
440
466
  }
441
467
 
442
468
  _base_api(
443
- request="/v1/connections", method="post", payload=payload, status_codes=201
469
+ request="/v1/connections",
470
+ client="fabric_sp",
471
+ method="post",
472
+ payload=payload,
473
+ status_codes=201,
444
474
  )
445
475
 
446
476
  print(f"{icons.green_dot} The '{name}' on-prem connection has been created.")
@@ -462,6 +492,8 @@ def create_vnet_connection(
462
492
 
463
493
  This is a wrapper function for the following API: `Connections - Create Connection <https://learn.microsoft.com/rest/api/fabric/core/connections/create-connection>`_.
464
494
 
495
+ Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
496
+
465
497
  Parameters
466
498
  ----------
467
499
  name : str
@@ -520,7 +552,11 @@ def create_vnet_connection(
520
552
  }
521
553
 
522
554
  _base_api(
523
- request="/v1/connections", method="post", payload=payload, status_codes=201
555
+ request="/v1/connections",
556
+ client="fabric_sp",
557
+ method="post",
558
+ payload=payload,
559
+ status_codes=201,
524
560
  )
525
561
 
526
562
  print(
@@ -1,9 +1,8 @@
1
1
  import pandas as pd
2
2
  import datetime
3
- from typing import Dict
3
+ from typing import Dict, Optional
4
4
  import pyarrow.dataset as ds
5
5
  import pyarrow.parquet as pq
6
- from pyspark.sql import SparkSession
7
6
  from sempy_labs._helper_functions import (
8
7
  create_abfss_path,
9
8
  save_as_delta_table,
@@ -12,19 +11,24 @@ from sempy_labs._helper_functions import (
12
11
  _update_dataframe_datatypes,
13
12
  resolve_workspace_name_and_id,
14
13
  resolve_lakehouse_name_and_id,
14
+ _read_delta_table,
15
+ _delta_table_row_count,
15
16
  )
16
17
  from sempy_labs.lakehouse._get_lakehouse_tables import get_lakehouse_tables
17
18
  from sempy_labs.lakehouse._lakehouse import lakehouse_attached
18
19
  import sempy_labs._icons as icons
20
+ from uuid import UUID
19
21
 
20
22
 
21
23
  def delta_analyzer(
22
24
  table_name: str,
23
25
  approx_distinct_count: bool = True,
24
26
  export: bool = False,
27
+ lakehouse: Optional[str | UUID] = None,
28
+ workspace: Optional[str | UUID] = None,
25
29
  ) -> Dict[str, pd.DataFrame]:
26
30
  """
27
- Analyzes a delta table and shows the results in dictionary containing a set of 5 dataframes. The table being analyzed must be in the lakehouse attached to the notebook.
31
+ Analyzes a delta table and shows the results in dictionary containing a set of 5 dataframes. If 'export' is set to True, the results will be saved to delta tables in the lakehouse attached to the notebook.
28
32
 
29
33
  The 5 dataframes returned by this function are:
30
34
 
@@ -44,26 +48,52 @@ def delta_analyzer(
44
48
  If True, uses approx_count_distinct to calculate the cardinality of each column. If False, uses COUNT(DISTINCT) instead.
45
49
  export : bool, default=False
46
50
  If True, exports the resulting dataframes to delta tables in the lakehouse attached to the notebook.
51
+ lakehouse : str | uuid.UUID, default=None
52
+ The Fabric lakehouse name or ID.
53
+ Defaults to None which resolves to the lakehouse attached to the notebook.
54
+ workspace : str | uuid.UUID, default=None
55
+ The Fabric workspace name or ID used by the lakehouse.
56
+ Defaults to None which resolves to the workspace of the attached lakehouse
57
+ or if no lakehouse attached, resolves to the workspace of the notebook.
47
58
 
48
59
  Returns
49
60
  -------
50
61
  Dict[str, pandas.DataFrame]
51
62
  A dictionary of pandas dataframes showing semantic model objects which violated the best practice analyzer rules.
52
63
  """
64
+ import notebookutils
53
65
 
54
- if not lakehouse_attached():
55
- raise ValueError(
56
- f"{icons.red_dot} No lakehouse is attached to this notebook. Please attach a lakehouse to the notebook before running the Delta Analyzer."
57
- )
66
+ # display_toggle = notebookutils.common.configs.pandas_display
67
+
68
+ # Turn off notebookutils display
69
+ # if display_toggle is True:
70
+ # notebookutils.common.configs.pandas_display = False
58
71
 
59
72
  prefix = "SLL_DeltaAnalyzer_"
60
73
  now = datetime.datetime.now()
61
- (workspace_name, workspace_id) = resolve_workspace_name_and_id(workspace=None)
74
+ (workspace_name, workspace_id) = resolve_workspace_name_and_id(workspace=workspace)
62
75
  (lakehouse_name, lakehouse_id) = resolve_lakehouse_name_and_id(
63
- lakehouse=None, workspace=None
76
+ lakehouse=lakehouse, workspace=workspace
64
77
  )
65
78
  path = create_abfss_path(lakehouse_id, workspace_id, table_name)
66
- table_path = f"/lakehouse/default/Tables/{table_name}"
79
+ lake_path = create_abfss_path(lakehouse_id, workspace_id)
80
+ mounts = notebookutils.fs.mounts()
81
+ mount_point = f"/{workspace_name.replace(' ', '')}{lakehouse_name.replace(' ', '')}"
82
+ if not any(i.get("source") == lake_path for i in mounts):
83
+ # Mount lakehouse if not mounted
84
+ notebookutils.fs.mount(lake_path, mount_point)
85
+ print(
86
+ f"{icons.green_dot} Mounted the '{lakehouse_name}' lakehouse within the '{workspace_name}' to the notebook."
87
+ )
88
+
89
+ mounts = notebookutils.fs.mounts()
90
+ local_path = next(
91
+ i.get("localPath") for i in mounts if i.get("source") == lake_path
92
+ )
93
+ table_path = f"{local_path}/Tables/{table_name}"
94
+
95
+ # Set back to original value
96
+ # notebookutils.common.configs.pandas_display = display_toggle
67
97
 
68
98
  parquet_file_df_columns = {
69
99
  "ParquetFile": "string",
@@ -95,39 +125,21 @@ def delta_analyzer(
95
125
  row_group_df = _create_dataframe(columns=row_group_df_columns)
96
126
  column_chunk_df = _create_dataframe(columns=column_chunk_df_columns)
97
127
 
98
- spark = SparkSession.builder.getOrCreate()
99
128
  # delta_table = DeltaTable.forPath(spark, path)
100
129
  # detail_df = spark.sql(f"DESCRIBE DETAIL `{table_name}`").collect()[0]
101
130
 
102
131
  # num_files = detail_df.numFiles
103
132
  # size_in_bytes = detail_df.sizeInBytes
104
133
 
105
- latest_files = spark.read.format("delta").load(path).inputFiles()
134
+ latest_files = _read_delta_table(path).inputFiles()
106
135
  file_paths = [f.split("/")[-1] for f in latest_files]
107
- row_count = spark.table(table_name).count()
136
+ row_count = _delta_table_row_count(table_name)
108
137
  row_groups = 0
109
138
  max_rows_per_row_group = 0
110
139
  min_rows_per_row_group = float("inf")
111
- # dt = DeltaTable.forPath(spark, path)
112
- # schema = dt.toDF().schema
113
- # is_vorder = False
114
- # if (
115
- # dt.detail()
116
- # .collect()[0]
117
- # .asDict()
118
- # .get("properties")
119
- # .get("delta.parquet.vorder.enabled")
120
- # == "true"
121
- # ):
122
- # is_vorder = True
123
140
 
124
141
  schema = ds.dataset(table_path).schema.metadata
125
142
  is_vorder = any(b"vorder" in key for key in schema.keys())
126
- # v_order_level = (
127
- # int(schema.get(b"com.microsoft.parquet.vorder.level").decode("utf-8"))
128
- # if is_vorder
129
- # else None
130
- # )
131
143
 
132
144
  for file_name in file_paths:
133
145
  parquet_file = pq.ParquetFile(f"{table_path}/{file_name}")
@@ -235,14 +247,16 @@ def delta_analyzer(
235
247
  table_name=table_name,
236
248
  column_name=col_name,
237
249
  function="approx",
238
- lakehouse=lakehouse_name,
250
+ lakehouse=lakehouse,
251
+ workspace=workspace,
239
252
  )
240
253
  else:
241
254
  dc = _get_column_aggregate(
242
255
  table_name=table_name,
243
256
  column_name=col_name,
244
257
  function="distinctcount",
245
- lakehouse=lakehouse_name,
258
+ lakehouse=lakehouse,
259
+ workspace=workspace,
246
260
  )
247
261
 
248
262
  if "Cardinality" not in column_df.columns:
@@ -264,13 +278,17 @@ def delta_analyzer(
264
278
  save_table = f"{prefix}Summary"
265
279
 
266
280
  if export:
281
+ if not lakehouse_attached():
282
+ raise ValueError(
283
+ f"{icons.red_dot} No lakehouse is attached to this notebook. Please attach a lakehouse to the notebook before running the Delta Analyzer."
284
+ )
267
285
  dfL = get_lakehouse_tables()
268
286
  dfL_filt = dfL[dfL["Table Name"] == save_table]
269
287
  if dfL_filt.empty:
270
288
  runId = 1
271
289
  else:
272
290
  max_run_id = _get_column_aggregate(
273
- lakehouse=lakehouse_name, table_name=save_table
291
+ table_name=save_table,
274
292
  )
275
293
  runId = max_run_id + 1
276
294