semantic-link-labs 0.9.11__tar.gz → 0.10.1__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.
- {semantic_link_labs-0.9.11/src/semantic_link_labs.egg-info → semantic_link_labs-0.10.1}/PKG-INFO +6 -3
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/README.md +4 -1
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/pyproject.toml +2 -2
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1/src/semantic_link_labs.egg-info}/PKG-INFO +6 -3
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/semantic_link_labs.egg-info/SOURCES.txt +8 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/semantic_link_labs.egg-info/requires.txt +1 -1
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/__init__.py +11 -1
- semantic_link_labs-0.10.1/src/sempy_labs/_a_lib_info.py +2 -0
- semantic_link_labs-0.10.1/src/sempy_labs/_daxformatter.py +78 -0
- semantic_link_labs-0.10.1/src/sempy_labs/_dictionary_diffs.py +221 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_helper_functions.py +165 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_list_functions.py +0 -43
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_notebooks.py +3 -3
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_semantic_models.py +101 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_sql.py +1 -1
- semantic_link_labs-0.10.1/src/sempy_labs/_sql_endpoints.py +185 -0
- semantic_link_labs-0.10.1/src/sempy_labs/_user_delegation_key.py +42 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_vpax.py +2 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/directlake/_update_directlake_model_lakehouse_connection.py +3 -3
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/lakehouse/__init__.py +0 -2
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/lakehouse/_blobs.py +0 -37
- semantic_link_labs-0.10.1/src/sempy_labs/mirrored_azure_databricks_catalog/__init__.py +15 -0
- semantic_link_labs-0.10.1/src/sempy_labs/mirrored_azure_databricks_catalog/_discover.py +209 -0
- semantic_link_labs-0.10.1/src/sempy_labs/mirrored_azure_databricks_catalog/_refresh_catalog_metadata.py +43 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/__init__.py +2 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_report_helper.py +27 -128
- semantic_link_labs-0.10.1/src/sempy_labs/report/_reportwrapper.py +2954 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/tom/_model.py +193 -1
- semantic_link_labs-0.9.11/src/sempy_labs/report/_reportwrapper.py +0 -2224
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/LICENSE +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/setup.cfg +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/semantic_link_labs.egg-info/dependency_links.txt +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/semantic_link_labs.egg-info/top_level.txt +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_ai.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_authentication.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_am-ET.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_ar-AE.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_bg-BG.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_ca-ES.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_cs-CZ.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_da-DK.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_de-DE.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_el-GR.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_es-ES.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_fa-IR.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_fi-FI.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_fr-FR.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_ga-IE.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_he-IL.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_hi-IN.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_hu-HU.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_id-ID.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_is-IS.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_it-IT.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_ja-JP.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_ko-KR.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_mt-MT.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_nl-NL.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_pl-PL.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_pt-BR.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_pt-PT.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_ro-RO.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_ru-RU.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_sk-SK.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_sl-SL.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_sv-SE.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_ta-IN.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_te-IN.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_th-TH.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_tr-TR.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_uk-UA.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_zh-CN.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_bpa_translation/_model/_translations_zu-ZA.po +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_capacities.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_capacity_migration.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_clear_cache.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_connections.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_dashboards.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_data_pipelines.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_dataflows.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_dax.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_dax_query_view.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_delta_analyzer.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_delta_analyzer_history.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_deployment_pipelines.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_documentation.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_environments.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_eventhouses.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_eventstreams.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_external_data_shares.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_gateways.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_generate_semantic_model.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_git.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_graphQL.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_icons.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_job_scheduler.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_kql_databases.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_kql_querysets.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_kusto.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_managed_private_endpoints.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_mirrored_databases.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_mirrored_warehouses.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_ml_experiments.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_ml_models.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_model_auto_build.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_model_bpa.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_model_bpa_bulk.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_model_bpa_rules.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_model_dependencies.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_mounted_data_factories.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_one_lake_integration.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_query_scale_out.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_refresh_semantic_model.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_spark.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_sqldatabase.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_tags.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_translations.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_utils.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_variable_libraries.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_vertipaq.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_warehouses.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_workloads.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_workspace_identity.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/_workspaces.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/__init__.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/_activities.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/_apps.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/_artifacts.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/_basic_functions.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/_capacities.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/_dataflows.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/_datasets.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/_domains.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/_external_data_share.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/_git.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/_items.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/_reports.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/_scanner.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/_shared.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/_tags.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/_tenant.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/_users.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/admin/_workspaces.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/directlake/__init__.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/directlake/_directlake_schema_compare.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/directlake/_directlake_schema_sync.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/directlake/_dl_helper.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/directlake/_generate_shared_expression.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/directlake/_get_directlake_lakehouse.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/directlake/_get_shared_expression.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/directlake/_guardrails.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/directlake/_list_directlake_model_calc_tables.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/directlake/_show_unsupported_directlake_objects.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/directlake/_update_directlake_partition_entity.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/directlake/_warm_cache.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/dotnet_lib/dotnet.runtime.config.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/graph/__init__.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/graph/_groups.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/graph/_teams.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/graph/_users.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/lakehouse/_get_lakehouse_columns.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/lakehouse/_get_lakehouse_tables.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/lakehouse/_helper.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/lakehouse/_lakehouse.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/lakehouse/_livy_sessions.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/lakehouse/_shortcuts.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/migration/__init__.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/migration/_create_pqt_file.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/migration/_direct_lake_to_import.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/migration/_migrate_calctables_to_lakehouse.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/migration/_migrate_calctables_to_semantic_model.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/migration/_migrate_model_objects_to_semantic_model.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/migration/_migrate_tables_columns_to_semantic_model.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/migration/_migration_validation.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/migration/_refresh_calc_tables.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_BPAReportTemplate.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/StaticResources/SharedResources/BaseThemes/CY24SU06.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/page.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/1b08bce3bebabb0a27a8/visual.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/2f22ddb70c301693c165/visual.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/3b1182230aa6c600b43a/visual.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/58577ba6380c69891500/visual.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/a2a8fa5028b3b776c96c/visual.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/adfd47ef30652707b987/visual.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/b6a80ee459e716e170b1/visual.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/ce3130a721c020cc3d81/visual.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/page.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/visuals/66e60dfb526437cd78d1/visual.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/page.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/07deb8bce824e1be37d7/visual.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0b1c68838818b32ad03b/visual.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0c171de9d2683d10b930/visual.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0efa01be0510e40a645e/visual.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/6bf2f0eb830ab53cc668/visual.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/88d8141cb8500b60030c/visual.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/a753273590beed656a03/visual.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/b8fdc82cddd61ac447bc/visual.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/page.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/visuals/ce8532a7e25020271077/visual.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/pages/pages.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/report.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition/version.json +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_bpareporttemplate/definition.pbir +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_download_report.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_export_report.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_generate_report.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_paginated.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_report_bpa.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_report_bpa_rules.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_report_functions.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_report_list_functions.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_report_rebind.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/report/_save_report.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/sempy_labs/tom/__init__.py +0 -0
- {semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/tests/test_friendly_case.py +0 -0
{semantic_link_labs-0.9.11/src/semantic_link_labs.egg-info → semantic_link_labs-0.10.1}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: semantic-link-labs
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.10.1
|
|
4
4
|
Summary: Semantic Link Labs for Microsoft Fabric
|
|
5
5
|
Author: Microsoft Corporation
|
|
6
6
|
License: MIT License
|
|
@@ -15,7 +15,7 @@ Classifier: Framework :: Jupyter
|
|
|
15
15
|
Requires-Python: <3.12,>=3.10
|
|
16
16
|
Description-Content-Type: text/markdown
|
|
17
17
|
License-File: LICENSE
|
|
18
|
-
Requires-Dist: semantic-link-sempy>=0.
|
|
18
|
+
Requires-Dist: semantic-link-sempy>=0.11.0
|
|
19
19
|
Requires-Dist: anytree
|
|
20
20
|
Requires-Dist: powerbiclient
|
|
21
21
|
Requires-Dist: polib
|
|
@@ -27,7 +27,7 @@ Dynamic: license-file
|
|
|
27
27
|
# Semantic Link Labs
|
|
28
28
|
|
|
29
29
|
[](https://badge.fury.io/py/semantic-link-labs)
|
|
30
|
-
[](https://readthedocs.org/projects/semantic-link-labs/)
|
|
31
31
|
[](https://github.com/psf/black)
|
|
32
32
|
[](https://pepy.tech/project/semantic-link-labs)
|
|
33
33
|
|
|
@@ -56,6 +56,7 @@ Check out the video below for an introduction to Semantic Link, Semantic Link La
|
|
|
56
56
|
* [Migrating an import/DirectQuery semantic model to Direct Lake](https://github.com/microsoft/semantic-link-labs?tab=readme-ov-file#direct-lake-migration)
|
|
57
57
|
* [Model Best Practice Analyzer (BPA)](https://github.com/microsoft/semantic-link-labs/wiki/Code-Examples#model-best-practice-analyzer)
|
|
58
58
|
* [Vertipaq Analyzer](https://github.com/microsoft/semantic-link-labs/wiki/Code-Examples#vertipaq-analyzer)
|
|
59
|
+
* [Create a .vpax file](https://github.com/microsoft/semantic-link-labs/wiki/Code-Examples#create-a-vpax-file)
|
|
59
60
|
* [Tabular Object Model](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Tabular%20Object%20Model.ipynb) [(TOM)](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.tom.html)
|
|
60
61
|
* [Translate a semantic model's metadata](https://github.com/microsoft/semantic-link-labs/wiki/Code-Examples#translate-a-semantic-model)
|
|
61
62
|
* [Check Direct Lake Guardrails](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.lakehouse.html#sempy_labs.lakehouse.get_lakehouse_tables)
|
|
@@ -154,6 +155,8 @@ An even better way to ensure the semantic-link-labs library is available in your
|
|
|
154
155
|
2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
|
|
155
156
|
|
|
156
157
|
## Version History
|
|
158
|
+
* [0.10.1](https://github.com/microsoft/semantic-link-labs/releases/tag/0.10.1) (June 10, 2025)
|
|
159
|
+
* [0.10.0](https://github.com/microsoft/semantic-link-labs/releases/tag/0.10.0) (May 30, 2025)
|
|
157
160
|
* [0.9.11](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.11) (May 22, 2025)
|
|
158
161
|
* [0.9.10](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.10) (April 24, 2025)
|
|
159
162
|
* [0.9.9](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.9) (April 7, 2025)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Semantic Link Labs
|
|
2
2
|
|
|
3
3
|
[](https://badge.fury.io/py/semantic-link-labs)
|
|
4
|
-
[](https://readthedocs.org/projects/semantic-link-labs/)
|
|
5
5
|
[](https://github.com/psf/black)
|
|
6
6
|
[](https://pepy.tech/project/semantic-link-labs)
|
|
7
7
|
|
|
@@ -30,6 +30,7 @@ Check out the video below for an introduction to Semantic Link, Semantic Link La
|
|
|
30
30
|
* [Migrating an import/DirectQuery semantic model to Direct Lake](https://github.com/microsoft/semantic-link-labs?tab=readme-ov-file#direct-lake-migration)
|
|
31
31
|
* [Model Best Practice Analyzer (BPA)](https://github.com/microsoft/semantic-link-labs/wiki/Code-Examples#model-best-practice-analyzer)
|
|
32
32
|
* [Vertipaq Analyzer](https://github.com/microsoft/semantic-link-labs/wiki/Code-Examples#vertipaq-analyzer)
|
|
33
|
+
* [Create a .vpax file](https://github.com/microsoft/semantic-link-labs/wiki/Code-Examples#create-a-vpax-file)
|
|
33
34
|
* [Tabular Object Model](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Tabular%20Object%20Model.ipynb) [(TOM)](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.tom.html)
|
|
34
35
|
* [Translate a semantic model's metadata](https://github.com/microsoft/semantic-link-labs/wiki/Code-Examples#translate-a-semantic-model)
|
|
35
36
|
* [Check Direct Lake Guardrails](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.lakehouse.html#sempy_labs.lakehouse.get_lakehouse_tables)
|
|
@@ -128,6 +129,8 @@ An even better way to ensure the semantic-link-labs library is available in your
|
|
|
128
129
|
2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
|
|
129
130
|
|
|
130
131
|
## Version History
|
|
132
|
+
* [0.10.1](https://github.com/microsoft/semantic-link-labs/releases/tag/0.10.1) (June 10, 2025)
|
|
133
|
+
* [0.10.0](https://github.com/microsoft/semantic-link-labs/releases/tag/0.10.0) (May 30, 2025)
|
|
131
134
|
* [0.9.11](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.11) (May 22, 2025)
|
|
132
135
|
* [0.9.10](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.10) (April 24, 2025)
|
|
133
136
|
* [0.9.9](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.9) (April 7, 2025)
|
|
@@ -7,7 +7,7 @@ name="semantic-link-labs"
|
|
|
7
7
|
authors = [
|
|
8
8
|
{ name = "Microsoft Corporation" },
|
|
9
9
|
]
|
|
10
|
-
version="0.
|
|
10
|
+
version="0.10.1"
|
|
11
11
|
description="Semantic Link Labs for Microsoft Fabric"
|
|
12
12
|
readme="README.md"
|
|
13
13
|
requires-python=">=3.10,<3.12"
|
|
@@ -23,7 +23,7 @@ classifiers = [
|
|
|
23
23
|
license= { text = "MIT License" }
|
|
24
24
|
|
|
25
25
|
dependencies = [
|
|
26
|
-
"semantic-link-sempy>=0.
|
|
26
|
+
"semantic-link-sempy>=0.11.0",
|
|
27
27
|
"anytree",
|
|
28
28
|
"powerbiclient",
|
|
29
29
|
"polib",
|
{semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1/src/semantic_link_labs.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: semantic-link-labs
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.10.1
|
|
4
4
|
Summary: Semantic Link Labs for Microsoft Fabric
|
|
5
5
|
Author: Microsoft Corporation
|
|
6
6
|
License: MIT License
|
|
@@ -15,7 +15,7 @@ Classifier: Framework :: Jupyter
|
|
|
15
15
|
Requires-Python: <3.12,>=3.10
|
|
16
16
|
Description-Content-Type: text/markdown
|
|
17
17
|
License-File: LICENSE
|
|
18
|
-
Requires-Dist: semantic-link-sempy>=0.
|
|
18
|
+
Requires-Dist: semantic-link-sempy>=0.11.0
|
|
19
19
|
Requires-Dist: anytree
|
|
20
20
|
Requires-Dist: powerbiclient
|
|
21
21
|
Requires-Dist: polib
|
|
@@ -27,7 +27,7 @@ Dynamic: license-file
|
|
|
27
27
|
# Semantic Link Labs
|
|
28
28
|
|
|
29
29
|
[](https://badge.fury.io/py/semantic-link-labs)
|
|
30
|
-
[](https://readthedocs.org/projects/semantic-link-labs/)
|
|
31
31
|
[](https://github.com/psf/black)
|
|
32
32
|
[](https://pepy.tech/project/semantic-link-labs)
|
|
33
33
|
|
|
@@ -56,6 +56,7 @@ Check out the video below for an introduction to Semantic Link, Semantic Link La
|
|
|
56
56
|
* [Migrating an import/DirectQuery semantic model to Direct Lake](https://github.com/microsoft/semantic-link-labs?tab=readme-ov-file#direct-lake-migration)
|
|
57
57
|
* [Model Best Practice Analyzer (BPA)](https://github.com/microsoft/semantic-link-labs/wiki/Code-Examples#model-best-practice-analyzer)
|
|
58
58
|
* [Vertipaq Analyzer](https://github.com/microsoft/semantic-link-labs/wiki/Code-Examples#vertipaq-analyzer)
|
|
59
|
+
* [Create a .vpax file](https://github.com/microsoft/semantic-link-labs/wiki/Code-Examples#create-a-vpax-file)
|
|
59
60
|
* [Tabular Object Model](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Tabular%20Object%20Model.ipynb) [(TOM)](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.tom.html)
|
|
60
61
|
* [Translate a semantic model's metadata](https://github.com/microsoft/semantic-link-labs/wiki/Code-Examples#translate-a-semantic-model)
|
|
61
62
|
* [Check Direct Lake Guardrails](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.lakehouse.html#sempy_labs.lakehouse.get_lakehouse_tables)
|
|
@@ -154,6 +155,8 @@ An even better way to ensure the semantic-link-labs library is available in your
|
|
|
154
155
|
2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
|
|
155
156
|
|
|
156
157
|
## Version History
|
|
158
|
+
* [0.10.1](https://github.com/microsoft/semantic-link-labs/releases/tag/0.10.1) (June 10, 2025)
|
|
159
|
+
* [0.10.0](https://github.com/microsoft/semantic-link-labs/releases/tag/0.10.0) (May 30, 2025)
|
|
157
160
|
* [0.9.11](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.11) (May 22, 2025)
|
|
158
161
|
* [0.9.10](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.10) (April 24, 2025)
|
|
159
162
|
* [0.9.9](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.9) (April 7, 2025)
|
{semantic_link_labs-0.9.11 → semantic_link_labs-0.10.1}/src/semantic_link_labs.egg-info/SOURCES.txt
RENAMED
|
@@ -7,6 +7,7 @@ src/semantic_link_labs.egg-info/dependency_links.txt
|
|
|
7
7
|
src/semantic_link_labs.egg-info/requires.txt
|
|
8
8
|
src/semantic_link_labs.egg-info/top_level.txt
|
|
9
9
|
src/sempy_labs/__init__.py
|
|
10
|
+
src/sempy_labs/_a_lib_info.py
|
|
10
11
|
src/sempy_labs/_ai.py
|
|
11
12
|
src/sempy_labs/_authentication.py
|
|
12
13
|
src/sempy_labs/_capacities.py
|
|
@@ -18,9 +19,11 @@ src/sempy_labs/_data_pipelines.py
|
|
|
18
19
|
src/sempy_labs/_dataflows.py
|
|
19
20
|
src/sempy_labs/_dax.py
|
|
20
21
|
src/sempy_labs/_dax_query_view.py
|
|
22
|
+
src/sempy_labs/_daxformatter.py
|
|
21
23
|
src/sempy_labs/_delta_analyzer.py
|
|
22
24
|
src/sempy_labs/_delta_analyzer_history.py
|
|
23
25
|
src/sempy_labs/_deployment_pipelines.py
|
|
26
|
+
src/sempy_labs/_dictionary_diffs.py
|
|
24
27
|
src/sempy_labs/_documentation.py
|
|
25
28
|
src/sempy_labs/_environments.py
|
|
26
29
|
src/sempy_labs/_eventhouses.py
|
|
@@ -55,9 +58,11 @@ src/sempy_labs/_refresh_semantic_model.py
|
|
|
55
58
|
src/sempy_labs/_semantic_models.py
|
|
56
59
|
src/sempy_labs/_spark.py
|
|
57
60
|
src/sempy_labs/_sql.py
|
|
61
|
+
src/sempy_labs/_sql_endpoints.py
|
|
58
62
|
src/sempy_labs/_sqldatabase.py
|
|
59
63
|
src/sempy_labs/_tags.py
|
|
60
64
|
src/sempy_labs/_translations.py
|
|
65
|
+
src/sempy_labs/_user_delegation_key.py
|
|
61
66
|
src/sempy_labs/_utils.py
|
|
62
67
|
src/sempy_labs/_variable_libraries.py
|
|
63
68
|
src/sempy_labs/_vertipaq.py
|
|
@@ -158,6 +163,9 @@ src/sempy_labs/migration/_migrate_model_objects_to_semantic_model.py
|
|
|
158
163
|
src/sempy_labs/migration/_migrate_tables_columns_to_semantic_model.py
|
|
159
164
|
src/sempy_labs/migration/_migration_validation.py
|
|
160
165
|
src/sempy_labs/migration/_refresh_calc_tables.py
|
|
166
|
+
src/sempy_labs/mirrored_azure_databricks_catalog/__init__.py
|
|
167
|
+
src/sempy_labs/mirrored_azure_databricks_catalog/_discover.py
|
|
168
|
+
src/sempy_labs/mirrored_azure_databricks_catalog/_refresh_catalog_metadata.py
|
|
161
169
|
src/sempy_labs/report/_BPAReportTemplate.json
|
|
162
170
|
src/sempy_labs/report/__init__.py
|
|
163
171
|
src/sempy_labs/report/_download_report.py
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
from sempy_labs._sql_endpoints import (
|
|
2
|
+
list_sql_endpoints,
|
|
3
|
+
refresh_sql_endpoint_metadata,
|
|
4
|
+
)
|
|
1
5
|
from sempy_labs._variable_libraries import (
|
|
2
6
|
list_variable_libraries,
|
|
3
7
|
delete_variable_library,
|
|
@@ -30,6 +34,7 @@ from sempy_labs._semantic_models import (
|
|
|
30
34
|
enable_semantic_model_scheduled_refresh,
|
|
31
35
|
delete_semantic_model,
|
|
32
36
|
update_semantic_model_refresh_schedule,
|
|
37
|
+
list_semantic_model_datasources,
|
|
33
38
|
)
|
|
34
39
|
from sempy_labs._graphQL import (
|
|
35
40
|
list_graphql_apis,
|
|
@@ -275,7 +280,6 @@ from sempy_labs._list_functions import (
|
|
|
275
280
|
get_object_level_security,
|
|
276
281
|
list_datamarts,
|
|
277
282
|
list_lakehouses,
|
|
278
|
-
list_sql_endpoints,
|
|
279
283
|
update_item,
|
|
280
284
|
list_server_properties,
|
|
281
285
|
list_semantic_model_errors,
|
|
@@ -340,6 +344,9 @@ from sempy_labs._vertipaq import (
|
|
|
340
344
|
vertipaq_analyzer,
|
|
341
345
|
import_vertipaq_analyzer,
|
|
342
346
|
)
|
|
347
|
+
from sempy_labs._user_delegation_key import (
|
|
348
|
+
get_user_delegation_key,
|
|
349
|
+
)
|
|
343
350
|
|
|
344
351
|
__all__ = [
|
|
345
352
|
"resolve_warehouse_id",
|
|
@@ -585,4 +592,7 @@ __all__ = [
|
|
|
585
592
|
"update_semantic_model_refresh_schedule",
|
|
586
593
|
"apply_tags",
|
|
587
594
|
"unapply_tags",
|
|
595
|
+
"get_user_delegation_key",
|
|
596
|
+
"refresh_sql_endpoint_metadata",
|
|
597
|
+
"list_semantic_model_datasources",
|
|
588
598
|
]
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import requests
|
|
2
|
+
from typing import List, Optional
|
|
3
|
+
from sempy_labs._a_lib_info import lib_name, lib_version
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def _format_dax(
|
|
7
|
+
expressions: str | List[str],
|
|
8
|
+
skip_space_after_function_name: bool = False,
|
|
9
|
+
metadata: Optional[List[dict]] = None,
|
|
10
|
+
) -> List[str]:
|
|
11
|
+
|
|
12
|
+
if isinstance(expressions, str):
|
|
13
|
+
expressions = [expressions]
|
|
14
|
+
metadata = [metadata] if metadata else [{}]
|
|
15
|
+
|
|
16
|
+
# Add variable assignment to each expression
|
|
17
|
+
expressions = [f"x :={item}" for item in expressions]
|
|
18
|
+
|
|
19
|
+
url = "https://daxformatter.azurewebsites.net/api/daxformatter/daxtextformatmulti"
|
|
20
|
+
|
|
21
|
+
payload = {
|
|
22
|
+
"Dax": expressions,
|
|
23
|
+
"MaxLineLength": 0,
|
|
24
|
+
"SkipSpaceAfterFunctionName": skip_space_after_function_name,
|
|
25
|
+
"ListSeparator": ",",
|
|
26
|
+
"DecimalSeparator": ".",
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
headers = {
|
|
30
|
+
"Accept": "application/json, text/javascript, */*; q=0.01",
|
|
31
|
+
"Accept-Encoding": "gzip,deflate",
|
|
32
|
+
"Accept-Language": "en-US,en;q=0.8",
|
|
33
|
+
"Content-Type": "application/json; charset=UTF-8",
|
|
34
|
+
"Host": "daxformatter.azurewebsites.net",
|
|
35
|
+
"Expect": "100-continue",
|
|
36
|
+
"Connection": "Keep-Alive",
|
|
37
|
+
"CallerApp": lib_name,
|
|
38
|
+
"CallerVersion": lib_version,
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
response = requests.post(url, json=payload, headers=headers)
|
|
42
|
+
result = []
|
|
43
|
+
for idx, dax in enumerate(response.json()):
|
|
44
|
+
formatted_dax = dax.get("formatted")
|
|
45
|
+
errors = dax.get("errors")
|
|
46
|
+
if errors:
|
|
47
|
+
meta = metadata[idx] if metadata and idx < len(metadata) else {}
|
|
48
|
+
obj_name = meta.get("name", "Unknown")
|
|
49
|
+
table_name = meta.get("table", "Unknown")
|
|
50
|
+
obj_type = meta.get("type", "Unknown")
|
|
51
|
+
if obj_type == "calculated_tables":
|
|
52
|
+
raise ValueError(
|
|
53
|
+
f"DAX formatting failed for the '{obj_name}' calculated table: {errors}"
|
|
54
|
+
)
|
|
55
|
+
elif obj_type == "calculated_columns":
|
|
56
|
+
raise ValueError(
|
|
57
|
+
f"DAX formatting failed for the '{table_name}'[{obj_name}] calculated column: {errors}"
|
|
58
|
+
)
|
|
59
|
+
elif obj_type == "calculation_items":
|
|
60
|
+
raise ValueError(
|
|
61
|
+
f"DAX formatting failed for the '{table_name}'[{obj_name}] calculation item: {errors}"
|
|
62
|
+
)
|
|
63
|
+
elif obj_type == "measures":
|
|
64
|
+
raise ValueError(
|
|
65
|
+
f"DAX formatting failed for the '{obj_name}' measure: {errors}"
|
|
66
|
+
)
|
|
67
|
+
elif obj_type == "rls":
|
|
68
|
+
raise ValueError(
|
|
69
|
+
f"DAX formatting failed for the row level security expression on the '{table_name}' table within the '{obj_name}' role: {errors}"
|
|
70
|
+
)
|
|
71
|
+
else:
|
|
72
|
+
NotImplementedError()
|
|
73
|
+
else:
|
|
74
|
+
if formatted_dax.startswith("x :="):
|
|
75
|
+
formatted_dax = formatted_dax[4:]
|
|
76
|
+
formatted_dax = formatted_dax.strip()
|
|
77
|
+
result.append(formatted_dax)
|
|
78
|
+
return result
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import re
|
|
2
|
+
import json
|
|
3
|
+
import difflib
|
|
4
|
+
from collections import defaultdict
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def color_text(text, color_code):
|
|
8
|
+
return f"\033[{color_code}m{text}\033[0m"
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def stringify(payload):
|
|
12
|
+
try:
|
|
13
|
+
if isinstance(payload, list):
|
|
14
|
+
return (
|
|
15
|
+
"[\n" + ",\n".join(f" {json.dumps(item)}" for item in payload) + "\n]"
|
|
16
|
+
)
|
|
17
|
+
return json.dumps(payload, indent=2, sort_keys=True)
|
|
18
|
+
except Exception:
|
|
19
|
+
return str(payload)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def extract_top_level_group(path):
|
|
23
|
+
# For something like: resourcePackages[1].items[1].name → resourcePackages[1].items[1]
|
|
24
|
+
segments = re.split(r"\.(?![^[]*\])", path) # split on dots not in brackets
|
|
25
|
+
return ".".join(segments[:-1]) if len(segments) > 1 else segments[0]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def get_by_path(obj, path):
|
|
29
|
+
"""Navigate into nested dict/list based on a dot/bracket path like: a.b[1].c"""
|
|
30
|
+
tokens = re.findall(r"\w+|\[\d+\]", path)
|
|
31
|
+
for token in tokens:
|
|
32
|
+
if token.startswith("["):
|
|
33
|
+
index = int(token[1:-1])
|
|
34
|
+
obj = obj[index]
|
|
35
|
+
else:
|
|
36
|
+
obj = obj.get(token)
|
|
37
|
+
return obj
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def deep_diff(d1, d2, path=""):
|
|
41
|
+
diffs = []
|
|
42
|
+
if isinstance(d1, dict) and isinstance(d2, dict):
|
|
43
|
+
keys = set(d1) | set(d2)
|
|
44
|
+
for key in sorted(keys):
|
|
45
|
+
new_path = f"{path}.{key}" if path else key
|
|
46
|
+
if key not in d1:
|
|
47
|
+
diffs.append(("+", new_path, None, d2[key]))
|
|
48
|
+
elif key not in d2:
|
|
49
|
+
diffs.append(("-", new_path, d1[key], None))
|
|
50
|
+
else:
|
|
51
|
+
diffs.extend(deep_diff(d1[key], d2[key], new_path))
|
|
52
|
+
elif isinstance(d1, list) and isinstance(d2, list):
|
|
53
|
+
min_len = min(len(d1), len(d2))
|
|
54
|
+
list_changed = False
|
|
55
|
+
for i in range(min_len):
|
|
56
|
+
if d1[i] != d2[i]:
|
|
57
|
+
list_changed = True
|
|
58
|
+
break
|
|
59
|
+
if list_changed or len(d1) != len(d2):
|
|
60
|
+
diffs.append(("~", path, d1, d2))
|
|
61
|
+
elif d1 != d2:
|
|
62
|
+
diffs.append(("~", path, d1, d2))
|
|
63
|
+
return diffs
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def diff_parts(d1, d2):
|
|
67
|
+
|
|
68
|
+
def build_path_map(parts):
|
|
69
|
+
return {part["path"]: part["payload"] for part in parts}
|
|
70
|
+
|
|
71
|
+
try:
|
|
72
|
+
paths1 = build_path_map(d1)
|
|
73
|
+
except Exception:
|
|
74
|
+
paths1 = d1
|
|
75
|
+
try:
|
|
76
|
+
paths2 = build_path_map(d2)
|
|
77
|
+
except Exception:
|
|
78
|
+
paths2 = d2
|
|
79
|
+
all_paths = set(paths1) | set(paths2)
|
|
80
|
+
|
|
81
|
+
for part_path in sorted(all_paths):
|
|
82
|
+
p1 = paths1.get(part_path)
|
|
83
|
+
p2 = paths2.get(part_path)
|
|
84
|
+
|
|
85
|
+
if p1 is None:
|
|
86
|
+
print(color_text(f"+ {part_path}", "32")) # Green
|
|
87
|
+
continue
|
|
88
|
+
elif p2 is None:
|
|
89
|
+
print(color_text(f"- {part_path}", "31")) # Red
|
|
90
|
+
continue
|
|
91
|
+
elif p1 == p2:
|
|
92
|
+
continue
|
|
93
|
+
|
|
94
|
+
if p1 is None or p2 is None:
|
|
95
|
+
print(
|
|
96
|
+
color_text(f"+ {part_path}", "32")
|
|
97
|
+
if p2 and not p1
|
|
98
|
+
else color_text(f"- {part_path}", "31")
|
|
99
|
+
)
|
|
100
|
+
continue
|
|
101
|
+
|
|
102
|
+
# Header for the changed part
|
|
103
|
+
print(color_text(f"~ {part_path}", "33"))
|
|
104
|
+
|
|
105
|
+
# Collect diffs
|
|
106
|
+
diffs = deep_diff(p1, p2)
|
|
107
|
+
# If the diff is only a change of a whole list (like appending to a list), group it under its key
|
|
108
|
+
merged_list_diffs = []
|
|
109
|
+
for change_type, full_path, old_val, new_val in diffs:
|
|
110
|
+
if (
|
|
111
|
+
change_type == "~"
|
|
112
|
+
and isinstance(old_val, list)
|
|
113
|
+
and isinstance(new_val, list)
|
|
114
|
+
):
|
|
115
|
+
merged_list_diffs.append((change_type, full_path, old_val, new_val))
|
|
116
|
+
|
|
117
|
+
# Replace individual item diffs with unified list diff
|
|
118
|
+
if merged_list_diffs:
|
|
119
|
+
diffs = merged_list_diffs
|
|
120
|
+
|
|
121
|
+
# Group diffs by common parent path (e.g. items[1])
|
|
122
|
+
grouped = defaultdict(list)
|
|
123
|
+
for change_type, full_path, old_val, new_val in diffs:
|
|
124
|
+
group_path = extract_top_level_group(full_path)
|
|
125
|
+
grouped[group_path].append((change_type, full_path, old_val, new_val))
|
|
126
|
+
|
|
127
|
+
# Print each group once with unified diff for the full substructure
|
|
128
|
+
for group_path in sorted(grouped):
|
|
129
|
+
print(" " + color_text(f"~ {group_path}", "33"))
|
|
130
|
+
|
|
131
|
+
try:
|
|
132
|
+
old_group = get_by_path(p1, group_path)
|
|
133
|
+
new_group = get_by_path(p2, group_path)
|
|
134
|
+
except Exception:
|
|
135
|
+
old_group = new_group = None
|
|
136
|
+
|
|
137
|
+
# Skip showing diffs for empty/null groups
|
|
138
|
+
if isinstance(old_group, dict) and isinstance(new_group, dict):
|
|
139
|
+
old_keys = set(old_group.keys())
|
|
140
|
+
new_keys = set(new_group.keys())
|
|
141
|
+
|
|
142
|
+
for key in sorted(old_keys - new_keys):
|
|
143
|
+
print(
|
|
144
|
+
" "
|
|
145
|
+
+ color_text(f"- {key}: {json.dumps(old_group[key])}", "31")
|
|
146
|
+
)
|
|
147
|
+
for key in sorted(new_keys - old_keys):
|
|
148
|
+
print(
|
|
149
|
+
" "
|
|
150
|
+
+ color_text(f"+ {key}: {json.dumps(new_group[key])}", "32")
|
|
151
|
+
)
|
|
152
|
+
for key in sorted(old_keys & new_keys):
|
|
153
|
+
if old_group[key] != new_group[key]:
|
|
154
|
+
print(" " + color_text(f"~ {key}:", "33"))
|
|
155
|
+
old_val_str = stringify(old_group[key]).splitlines()
|
|
156
|
+
new_val_str = stringify(new_group[key]).splitlines()
|
|
157
|
+
for line in difflib.unified_diff(
|
|
158
|
+
old_val_str,
|
|
159
|
+
new_val_str,
|
|
160
|
+
fromfile="old",
|
|
161
|
+
tofile="new",
|
|
162
|
+
lineterm="",
|
|
163
|
+
):
|
|
164
|
+
if line.startswith("@@"):
|
|
165
|
+
print(" " + color_text(line, "36"))
|
|
166
|
+
elif line.startswith("-") and not line.startswith("---"):
|
|
167
|
+
print(" " + color_text(line, "31"))
|
|
168
|
+
elif line.startswith("+") and not line.startswith("+++"):
|
|
169
|
+
print(" " + color_text(line, "32"))
|
|
170
|
+
elif old_group is None and new_group is not None:
|
|
171
|
+
if isinstance(new_group, dict):
|
|
172
|
+
# print all added keys
|
|
173
|
+
for key, val in new_group.items():
|
|
174
|
+
print(" " + color_text(f"+ {key}: {json.dumps(val)}", "32"))
|
|
175
|
+
elif isinstance(new_group, list):
|
|
176
|
+
old_str = []
|
|
177
|
+
new_str = stringify(new_group).splitlines()
|
|
178
|
+
for line in difflib.unified_diff(
|
|
179
|
+
old_str, new_str, fromfile="old", tofile="new", lineterm=""
|
|
180
|
+
):
|
|
181
|
+
if line.startswith("@@"):
|
|
182
|
+
print(" " + color_text(line, "36"))
|
|
183
|
+
elif line.startswith("-") and not line.startswith("---"):
|
|
184
|
+
print(" " + color_text(line, "31"))
|
|
185
|
+
elif line.startswith("+") and not line.startswith("+++"):
|
|
186
|
+
print(" " + color_text(line, "32"))
|
|
187
|
+
else:
|
|
188
|
+
print(" " + color_text(f"+ {json.dumps(new_group)}", "32"))
|
|
189
|
+
|
|
190
|
+
elif new_group is None and old_group is not None:
|
|
191
|
+
if isinstance(old_group, dict):
|
|
192
|
+
# print all removed keys
|
|
193
|
+
for key, val in old_group.items():
|
|
194
|
+
print(" " + color_text(f"- {key}: {json.dumps(val)}", "31"))
|
|
195
|
+
elif isinstance(old_group, list):
|
|
196
|
+
old_str = stringify(old_group).splitlines()
|
|
197
|
+
new_str = []
|
|
198
|
+
for line in difflib.unified_diff(
|
|
199
|
+
old_str, new_str, fromfile="old", tofile="new", lineterm=""
|
|
200
|
+
):
|
|
201
|
+
if line.startswith("@@"):
|
|
202
|
+
print(" " + color_text(line, "36"))
|
|
203
|
+
elif line.startswith("-") and not line.startswith("---"):
|
|
204
|
+
print(" " + color_text(line, "31"))
|
|
205
|
+
elif line.startswith("+") and not line.startswith("+++"):
|
|
206
|
+
print(" " + color_text(line, "32"))
|
|
207
|
+
else:
|
|
208
|
+
print(" " + color_text(f"- {json.dumps(old_group)}", "31"))
|
|
209
|
+
else:
|
|
210
|
+
old_str = stringify(old_group).splitlines()
|
|
211
|
+
new_str = stringify(new_group).splitlines()
|
|
212
|
+
|
|
213
|
+
for line in difflib.unified_diff(
|
|
214
|
+
old_str, new_str, fromfile="old", tofile="new", lineterm=""
|
|
215
|
+
):
|
|
216
|
+
if line.startswith("@@"):
|
|
217
|
+
print(" " + color_text(line, "36"))
|
|
218
|
+
elif line.startswith("-") and not line.startswith("---"):
|
|
219
|
+
print(" " + color_text(line, "31"))
|
|
220
|
+
elif line.startswith("+") and not line.startswith("+++"):
|
|
221
|
+
print(" " + color_text(line, "32"))
|