semantic-link-labs 0.9.2__tar.gz → 0.9.4__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.2 → semantic_link_labs-0.9.4}/.github/workflows/build.yaml +2 -2
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/PKG-INFO +10 -6
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/README.md +9 -5
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/docs/source/conf.py +1 -1
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/notebooks/Delta Analyzer.ipynb +20 -4
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/pyproject.toml +1 -1
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/semantic_link_labs.egg-info/PKG-INFO +10 -6
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/semantic_link_labs.egg-info/SOURCES.txt +10 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/__init__.py +27 -1
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_ai.py +8 -5
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_capacity_migration.py +3 -2
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_connections.py +45 -9
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_dax.py +17 -3
- semantic_link_labs-0.9.4/src/sempy_labs/_delta_analyzer.py +473 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_eventhouses.py +70 -1
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_gateways.py +56 -8
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_generate_semantic_model.py +30 -9
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_helper_functions.py +84 -9
- semantic_link_labs-0.9.4/src/sempy_labs/_job_scheduler.py +439 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_list_functions.py +42 -19
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_ml_experiments.py +1 -1
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_model_bpa.py +17 -2
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_model_bpa_rules.py +20 -8
- semantic_link_labs-0.9.4/src/sempy_labs/_semantic_models.py +117 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_sql.py +73 -6
- semantic_link_labs-0.9.4/src/sempy_labs/_sqldatabase.py +227 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_translations.py +2 -2
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_vertipaq.py +3 -3
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_warehouses.py +1 -1
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/admin/__init__.py +49 -8
- semantic_link_labs-0.9.4/src/sempy_labs/admin/_activities.py +166 -0
- semantic_link_labs-0.9.4/src/sempy_labs/admin/_apps.py +143 -0
- semantic_link_labs-0.9.4/src/sempy_labs/admin/_basic_functions.py +480 -0
- semantic_link_labs-0.9.4/src/sempy_labs/admin/_capacities.py +250 -0
- semantic_link_labs-0.9.4/src/sempy_labs/admin/_datasets.py +184 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/admin/_domains.py +1 -3
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/admin/_items.py +3 -1
- semantic_link_labs-0.9.4/src/sempy_labs/admin/_reports.py +165 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/admin/_scanner.py +53 -49
- semantic_link_labs-0.9.4/src/sempy_labs/admin/_shared.py +74 -0
- semantic_link_labs-0.9.4/src/sempy_labs/admin/_tenant.py +489 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/directlake/_dl_helper.py +0 -1
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/directlake/_update_directlake_partition_entity.py +6 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/graph/_teams.py +1 -1
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/graph/_users.py +9 -1
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/lakehouse/_get_lakehouse_columns.py +2 -2
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/lakehouse/_get_lakehouse_tables.py +2 -2
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/lakehouse/_lakehouse.py +3 -3
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/lakehouse/_shortcuts.py +29 -16
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/migration/_migrate_calctables_to_lakehouse.py +2 -2
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/migration/_refresh_calc_tables.py +2 -2
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/__init__.py +3 -1
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_download_report.py +4 -1
- semantic_link_labs-0.9.4/src/sempy_labs/report/_export_report.py +272 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_report_functions.py +11 -263
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_report_rebind.py +1 -1
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/tom/_model.py +281 -29
- semantic_link_labs-0.9.2/src/sempy_labs/_delta_analyzer.py +0 -303
- semantic_link_labs-0.9.2/src/sempy_labs/_job_scheduler.py +0 -215
- semantic_link_labs-0.9.2/src/sempy_labs/admin/_basic_functions.py +0 -1100
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/.github/ISSUE_TEMPLATE/issue--question---advice-needed.md +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/.github/workflows/codeql.yaml +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/.gitignore +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/.readthedocs.yaml +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/.vscode/settings.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/CODE_OF_CONDUCT.md +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/LICENSE +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/SECURITY.md +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/SUPPORT.md +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/docs/Makefile +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/docs/make.bat +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/docs/requirements.txt +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/docs/source/index.rst +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/docs/source/modules.rst +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/environment.yml +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/notebooks/Best Practice Analyzer Report.ipynb +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/notebooks/Capacity Migration.ipynb +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/notebooks/Migration to Direct Lake.ipynb +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/notebooks/Model Optimization.ipynb +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/notebooks/Query Scale Out.ipynb +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/notebooks/Report Analysis.ipynb +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/notebooks/SQL.ipynb +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/notebooks/Semantic Model Management.ipynb +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/notebooks/Semantic Model Refresh.ipynb +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/notebooks/Service Principal.ipynb +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/notebooks/Tabular Object Model.ipynb +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/setup.cfg +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/semantic_link_labs.egg-info/dependency_links.txt +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/semantic_link_labs.egg-info/requires.txt +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/semantic_link_labs.egg-info/top_level.txt +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_authentication.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_am-ET.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_ar-AE.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_bg-BG.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_ca-ES.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_cs-CZ.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_da-DK.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_de-DE.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_el-GR.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_es-ES.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_fa-IR.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_fi-FI.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_fr-FR.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_ga-IE.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_he-IL.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_hi-IN.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_hu-HU.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_id-ID.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_is-IS.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_it-IT.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_ja-JP.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_ko-KR.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_mt-MT.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_nl-NL.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_pl-PL.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_pt-BR.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_pt-PT.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_ro-RO.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_ru-RU.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_sk-SK.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_sl-SL.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_sv-SE.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_ta-IN.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_te-IN.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_th-TH.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_tr-TR.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_uk-UA.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_zh-CN.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_bpa_translation/_model/_translations_zu-ZA.po +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_capacities.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_clear_cache.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_data_pipelines.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_dataflows.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_deployment_pipelines.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_documentation.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_environments.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_eventstreams.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_external_data_shares.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_git.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_graphQL.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_icons.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_kql_databases.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_kql_querysets.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_managed_private_endpoints.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_mirrored_databases.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_mirrored_warehouses.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_ml_models.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_model_auto_build.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_model_bpa_bulk.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_model_dependencies.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_notebooks.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_one_lake_integration.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_query_scale_out.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_refresh_semantic_model.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_spark.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_workloads.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_workspace_identity.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/_workspaces.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/admin/_external_data_share.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/admin/_git.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/directlake/__init__.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/directlake/_directlake_schema_compare.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/directlake/_directlake_schema_sync.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/directlake/_generate_shared_expression.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/directlake/_get_directlake_lakehouse.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/directlake/_get_shared_expression.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/directlake/_guardrails.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/directlake/_list_directlake_model_calc_tables.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/directlake/_show_unsupported_directlake_objects.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/directlake/_update_directlake_model_lakehouse_connection.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/directlake/_warm_cache.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/graph/__init__.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/graph/_groups.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/lakehouse/__init__.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/migration/__init__.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/migration/_create_pqt_file.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/migration/_direct_lake_to_import.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/migration/_migrate_calctables_to_semantic_model.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/migration/_migrate_model_objects_to_semantic_model.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/migration/_migrate_tables_columns_to_semantic_model.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/migration/_migration_validation.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_BPAReportTemplate.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/.pbi/localSettings.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/.platform +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/StaticResources/SharedResources/BaseThemes/CY24SU06.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/page.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/1b08bce3bebabb0a27a8/visual.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/2f22ddb70c301693c165/visual.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/3b1182230aa6c600b43a/visual.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/58577ba6380c69891500/visual.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/a2a8fa5028b3b776c96c/visual.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/adfd47ef30652707b987/visual.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/b6a80ee459e716e170b1/visual.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/01d72098bda5055bd500/visuals/ce3130a721c020cc3d81/visual.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/page.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/92735ae19b31712208ad/visuals/66e60dfb526437cd78d1/visual.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/page.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/07deb8bce824e1be37d7/visual.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0b1c68838818b32ad03b/visual.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0c171de9d2683d10b930/visual.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/0efa01be0510e40a645e/visual.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/6bf2f0eb830ab53cc668/visual.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/88d8141cb8500b60030c/visual.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/a753273590beed656a03/visual.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visuals/b8fdc82cddd61ac447bc/visual.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/page.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/visuals/ce8532a7e25020271077/visual.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/pages/pages.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/report.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition/version.json +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_bpareporttemplate/definition.pbir +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_generate_report.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_paginated.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_report_bpa.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_report_bpa_rules.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_report_helper.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_report_list_functions.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/report/_reportwrapper.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/sempy_labs/tom/__init__.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/tests/__init__.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/tests/test_friendly_case.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/tests/test_shortcuts.py +0 -0
- {semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/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@
|
|
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@
|
|
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.
|
|
3
|
+
Version: 0.9.4
|
|
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
|
[](https://badge.fury.io/py/semantic-link-labs)
|
|
29
|
-
[](https://readthedocs.org/projects/semantic-link-labs/)
|
|
30
30
|
[](https://github.com/psf/black)
|
|
31
31
|
[](https://pepy.tech/project/semantic-link-labs)
|
|
32
32
|
|
|
@@ -66,6 +66,7 @@ Check out the video below for an introduction to Semantic Link, Semantic Link La
|
|
|
66
66
|
* [View unique columns touched in a single (or multiple) DAX query(ies)](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.get_dax_query_dependencies)
|
|
67
67
|
* [Analyze delta tables for Direct Lake semantic models using Delta Analyzer](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Delta%20Analyzer.ipynb)
|
|
68
68
|
* [View synonyms from the linguistic schema](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.list_synonyms)
|
|
69
|
+
* [Add](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.tom.html#sempy_labs.tom.TOMWrapper.add_incremental_refresh_policy), [update](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.tom.html#sempy_labs.tom.TOMWrapper.update_incremental_refresh_policy) and [view](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.tom.html#sempy_labs.tom.TOMWrapper.show_incremental_refresh_policy) an incremental refresh policy.
|
|
69
70
|
* Reports
|
|
70
71
|
* [Report Best Practice Analyzer (BPA)](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.report.html#sempy_labs.report.run_report_bpa)
|
|
71
72
|
* [View report metadata](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Report%20Analysis.ipynb)
|
|
@@ -144,6 +145,8 @@ An even better way to ensure the semantic-link-labs library is available in your
|
|
|
144
145
|
2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
|
|
145
146
|
|
|
146
147
|
## Version History
|
|
148
|
+
* [0.9.4](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.4) (February 27, 2025)
|
|
149
|
+
* [0.9.3](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.3) (February 13, 2025)
|
|
147
150
|
* [0.9.2](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.2) (February 5, 2025)
|
|
148
151
|
* [0.9.1](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.1) (January 22, 2025)
|
|
149
152
|
* [0.9.0](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.0) (January 22, 2025)
|
|
@@ -283,10 +286,11 @@ python -m build
|
|
|
283
286
|
|
|
284
287
|
#### Running and testing the .whl file
|
|
285
288
|
1. Open a notebook in a Fabric workspace.
|
|
286
|
-
2. Navigate to 'Resources' within the Explorer tab.
|
|
287
|
-
3. Upload the .whl file
|
|
288
|
-
4.
|
|
289
|
-
5.
|
|
289
|
+
2. Navigate to 'Resources' within the Explorer tab on the left pane. Do not use the 'Files' section.
|
|
290
|
+
3. Upload the .whl file to the 'Resource' section.
|
|
291
|
+
4. Click on the '...' next to the .whl file and click 'Copy relative path'.
|
|
292
|
+
5. Enter '%pip install ""' into a notebook cell. Within the double quotes, paste the copied path from step 4.
|
|
293
|
+
6. Run the notebook cell.
|
|
290
294
|
|
|
291
295
|
#### Submitting a Pull Request (PR)
|
|
292
296
|
1. Within the 'Source Control' tab, commit your changes to the branch.
|
|
@@ -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
|
|
|
@@ -41,6 +41,7 @@ Check out the video below for an introduction to Semantic Link, Semantic Link La
|
|
|
41
41
|
* [View unique columns touched in a single (or multiple) DAX query(ies)](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.get_dax_query_dependencies)
|
|
42
42
|
* [Analyze delta tables for Direct Lake semantic models using Delta Analyzer](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Delta%20Analyzer.ipynb)
|
|
43
43
|
* [View synonyms from the linguistic schema](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.list_synonyms)
|
|
44
|
+
* [Add](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.tom.html#sempy_labs.tom.TOMWrapper.add_incremental_refresh_policy), [update](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.tom.html#sempy_labs.tom.TOMWrapper.update_incremental_refresh_policy) and [view](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.tom.html#sempy_labs.tom.TOMWrapper.show_incremental_refresh_policy) an incremental refresh policy.
|
|
44
45
|
* Reports
|
|
45
46
|
* [Report Best Practice Analyzer (BPA)](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.report.html#sempy_labs.report.run_report_bpa)
|
|
46
47
|
* [View report metadata](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Report%20Analysis.ipynb)
|
|
@@ -119,6 +120,8 @@ An even better way to ensure the semantic-link-labs library is available in your
|
|
|
119
120
|
2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
|
|
120
121
|
|
|
121
122
|
## Version History
|
|
123
|
+
* [0.9.4](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.4) (February 27, 2025)
|
|
124
|
+
* [0.9.3](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.3) (February 13, 2025)
|
|
122
125
|
* [0.9.2](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.2) (February 5, 2025)
|
|
123
126
|
* [0.9.1](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.1) (January 22, 2025)
|
|
124
127
|
* [0.9.0](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.0) (January 22, 2025)
|
|
@@ -258,10 +261,11 @@ python -m build
|
|
|
258
261
|
|
|
259
262
|
#### Running and testing the .whl file
|
|
260
263
|
1. Open a notebook in a Fabric workspace.
|
|
261
|
-
2. Navigate to 'Resources' within the Explorer tab.
|
|
262
|
-
3. Upload the .whl file
|
|
263
|
-
4.
|
|
264
|
-
5.
|
|
264
|
+
2. Navigate to 'Resources' within the Explorer tab on the left pane. Do not use the 'Files' section.
|
|
265
|
+
3. Upload the .whl file to the 'Resource' section.
|
|
266
|
+
4. Click on the '...' next to the .whl file and click 'Copy relative path'.
|
|
267
|
+
5. Enter '%pip install ""' into a notebook cell. Within the double quotes, paste the copied path from step 4.
|
|
268
|
+
6. Run the notebook cell.
|
|
265
269
|
|
|
266
270
|
#### Submitting a Pull Request (PR)
|
|
267
271
|
1. Within the 'Source Control' tab, commit your changes to the branch.
|
|
@@ -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.
|
|
16
|
+
release = '0.9.4'
|
|
17
17
|
|
|
18
18
|
# -- General configuration ---------------------------------------------------
|
|
19
19
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
|
|
@@ -52,7 +52,9 @@
|
|
|
52
52
|
"outputs": [],
|
|
53
53
|
"source": [
|
|
54
54
|
"import sempy_labs as labs\n",
|
|
55
|
-
"table_name = 'MyTable'"
|
|
55
|
+
"table_name = 'MyTable' # Enter the name of the delta table\n",
|
|
56
|
+
"lakehouse = 'MyLakehouse' # Enter the name or ID of the lakehouse in which the delta table resides\n",
|
|
57
|
+
"workspace = 'MyWorkspace' # Enter the name or ID of the workspace in which the lakehouse resides"
|
|
56
58
|
]
|
|
57
59
|
},
|
|
58
60
|
{
|
|
@@ -70,7 +72,11 @@
|
|
|
70
72
|
"metadata": {},
|
|
71
73
|
"outputs": [],
|
|
72
74
|
"source": [
|
|
73
|
-
"x = labs.delta_analyzer(
|
|
75
|
+
"x = labs.delta_analyzer(\n",
|
|
76
|
+
" table_name=table_name,\n",
|
|
77
|
+
" lakehouse=lakehouse,\n",
|
|
78
|
+
" workspace=workspace\n",
|
|
79
|
+
")"
|
|
74
80
|
]
|
|
75
81
|
},
|
|
76
82
|
{
|
|
@@ -100,7 +106,12 @@
|
|
|
100
106
|
"metadata": {},
|
|
101
107
|
"outputs": [],
|
|
102
108
|
"source": [
|
|
103
|
-
"x = labs.delta_analyzer(
|
|
109
|
+
"x = labs.delta_analyzer(\n",
|
|
110
|
+
" table_name=table_name,\n",
|
|
111
|
+
" approx_distinct_count=False,\n",
|
|
112
|
+
" lakehouse=lakehouse,\n",
|
|
113
|
+
" workspace=workspace\n",
|
|
114
|
+
" )"
|
|
104
115
|
]
|
|
105
116
|
},
|
|
106
117
|
{
|
|
@@ -119,7 +130,12 @@
|
|
|
119
130
|
"metadata": {},
|
|
120
131
|
"outputs": [],
|
|
121
132
|
"source": [
|
|
122
|
-
"x = labs.delta_analyzer(
|
|
133
|
+
"x = labs.delta_analyzer(\n",
|
|
134
|
+
" table_name=table_name,\n",
|
|
135
|
+
" lakehouse=lakehouse,\n",
|
|
136
|
+
" workspace=workspace,\n",
|
|
137
|
+
" export=True\n",
|
|
138
|
+
" )"
|
|
123
139
|
]
|
|
124
140
|
}
|
|
125
141
|
],
|
{semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/semantic_link_labs.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: semantic-link-labs
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.4
|
|
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
|
[](https://badge.fury.io/py/semantic-link-labs)
|
|
29
|
-
[](https://readthedocs.org/projects/semantic-link-labs/)
|
|
30
30
|
[](https://github.com/psf/black)
|
|
31
31
|
[](https://pepy.tech/project/semantic-link-labs)
|
|
32
32
|
|
|
@@ -66,6 +66,7 @@ Check out the video below for an introduction to Semantic Link, Semantic Link La
|
|
|
66
66
|
* [View unique columns touched in a single (or multiple) DAX query(ies)](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.get_dax_query_dependencies)
|
|
67
67
|
* [Analyze delta tables for Direct Lake semantic models using Delta Analyzer](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Delta%20Analyzer.ipynb)
|
|
68
68
|
* [View synonyms from the linguistic schema](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.html#sempy_labs.list_synonyms)
|
|
69
|
+
* [Add](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.tom.html#sempy_labs.tom.TOMWrapper.add_incremental_refresh_policy), [update](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.tom.html#sempy_labs.tom.TOMWrapper.update_incremental_refresh_policy) and [view](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.tom.html#sempy_labs.tom.TOMWrapper.show_incremental_refresh_policy) an incremental refresh policy.
|
|
69
70
|
* Reports
|
|
70
71
|
* [Report Best Practice Analyzer (BPA)](https://semantic-link-labs.readthedocs.io/en/stable/sempy_labs.report.html#sempy_labs.report.run_report_bpa)
|
|
71
72
|
* [View report metadata](https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Report%20Analysis.ipynb)
|
|
@@ -144,6 +145,8 @@ An even better way to ensure the semantic-link-labs library is available in your
|
|
|
144
145
|
2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
|
|
145
146
|
|
|
146
147
|
## Version History
|
|
148
|
+
* [0.9.4](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.4) (February 27, 2025)
|
|
149
|
+
* [0.9.3](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.3) (February 13, 2025)
|
|
147
150
|
* [0.9.2](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.2) (February 5, 2025)
|
|
148
151
|
* [0.9.1](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.1) (January 22, 2025)
|
|
149
152
|
* [0.9.0](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.0) (January 22, 2025)
|
|
@@ -283,10 +286,11 @@ python -m build
|
|
|
283
286
|
|
|
284
287
|
#### Running and testing the .whl file
|
|
285
288
|
1. Open a notebook in a Fabric workspace.
|
|
286
|
-
2. Navigate to 'Resources' within the Explorer tab.
|
|
287
|
-
3. Upload the .whl file
|
|
288
|
-
4.
|
|
289
|
-
5.
|
|
289
|
+
2. Navigate to 'Resources' within the Explorer tab on the left pane. Do not use the 'Files' section.
|
|
290
|
+
3. Upload the .whl file to the 'Resource' section.
|
|
291
|
+
4. Click on the '...' next to the .whl file and click 'Copy relative path'.
|
|
292
|
+
5. Enter '%pip install ""' into a notebook cell. Within the double quotes, paste the copied path from step 4.
|
|
293
|
+
6. Run the notebook cell.
|
|
290
294
|
|
|
291
295
|
#### Submitting a Pull Request (PR)
|
|
292
296
|
1. Within the 'Source Control' tab, commit your changes to the branch.
|
{semantic_link_labs-0.9.2 → semantic_link_labs-0.9.4}/src/semantic_link_labs.egg-info/SOURCES.txt
RENAMED
|
@@ -77,8 +77,10 @@ src/sempy_labs/_notebooks.py
|
|
|
77
77
|
src/sempy_labs/_one_lake_integration.py
|
|
78
78
|
src/sempy_labs/_query_scale_out.py
|
|
79
79
|
src/sempy_labs/_refresh_semantic_model.py
|
|
80
|
+
src/sempy_labs/_semantic_models.py
|
|
80
81
|
src/sempy_labs/_spark.py
|
|
81
82
|
src/sempy_labs/_sql.py
|
|
83
|
+
src/sempy_labs/_sqldatabase.py
|
|
82
84
|
src/sempy_labs/_translations.py
|
|
83
85
|
src/sempy_labs/_vertipaq.py
|
|
84
86
|
src/sempy_labs/_warehouses.py
|
|
@@ -124,12 +126,19 @@ src/sempy_labs/_bpa_translation/_model/_translations_uk-UA.po
|
|
|
124
126
|
src/sempy_labs/_bpa_translation/_model/_translations_zh-CN.po
|
|
125
127
|
src/sempy_labs/_bpa_translation/_model/_translations_zu-ZA.po
|
|
126
128
|
src/sempy_labs/admin/__init__.py
|
|
129
|
+
src/sempy_labs/admin/_activities.py
|
|
130
|
+
src/sempy_labs/admin/_apps.py
|
|
127
131
|
src/sempy_labs/admin/_basic_functions.py
|
|
132
|
+
src/sempy_labs/admin/_capacities.py
|
|
133
|
+
src/sempy_labs/admin/_datasets.py
|
|
128
134
|
src/sempy_labs/admin/_domains.py
|
|
129
135
|
src/sempy_labs/admin/_external_data_share.py
|
|
130
136
|
src/sempy_labs/admin/_git.py
|
|
131
137
|
src/sempy_labs/admin/_items.py
|
|
138
|
+
src/sempy_labs/admin/_reports.py
|
|
132
139
|
src/sempy_labs/admin/_scanner.py
|
|
140
|
+
src/sempy_labs/admin/_shared.py
|
|
141
|
+
src/sempy_labs/admin/_tenant.py
|
|
133
142
|
src/sempy_labs/directlake/__init__.py
|
|
134
143
|
src/sempy_labs/directlake/_directlake_schema_compare.py
|
|
135
144
|
src/sempy_labs/directlake/_directlake_schema_sync.py
|
|
@@ -164,6 +173,7 @@ src/sempy_labs/migration/_refresh_calc_tables.py
|
|
|
164
173
|
src/sempy_labs/report/_BPAReportTemplate.json
|
|
165
174
|
src/sempy_labs/report/__init__.py
|
|
166
175
|
src/sempy_labs/report/_download_report.py
|
|
176
|
+
src/sempy_labs/report/_export_report.py
|
|
167
177
|
src/sempy_labs/report/_generate_report.py
|
|
168
178
|
src/sempy_labs/report/_paginated.py
|
|
169
179
|
src/sempy_labs/report/_report_bpa.py
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
from sempy_labs._semantic_models import (
|
|
2
|
+
get_semantic_model_refresh_schedule,
|
|
3
|
+
enable_semantic_model_scheduled_refresh,
|
|
4
|
+
)
|
|
1
5
|
from sempy_labs._graphQL import (
|
|
2
6
|
list_graphql_apis,
|
|
3
7
|
create_graphql_api,
|
|
@@ -5,8 +9,14 @@ from sempy_labs._graphQL import (
|
|
|
5
9
|
from sempy_labs._job_scheduler import (
|
|
6
10
|
list_item_job_instances,
|
|
7
11
|
list_item_schedules,
|
|
12
|
+
create_item_schedule_cron,
|
|
13
|
+
create_item_schedule_daily,
|
|
14
|
+
create_item_schedule_weekly,
|
|
15
|
+
)
|
|
16
|
+
from sempy_labs._delta_analyzer import (
|
|
17
|
+
delta_analyzer,
|
|
18
|
+
get_delta_table_history,
|
|
8
19
|
)
|
|
9
|
-
from sempy_labs._delta_analyzer import delta_analyzer
|
|
10
20
|
from sempy_labs._gateways import (
|
|
11
21
|
list_gateway_members,
|
|
12
22
|
list_gateway_role_assigments,
|
|
@@ -75,6 +85,7 @@ from sempy_labs._eventhouses import (
|
|
|
75
85
|
create_eventhouse,
|
|
76
86
|
list_eventhouses,
|
|
77
87
|
delete_eventhouse,
|
|
88
|
+
get_eventhouse_definition,
|
|
78
89
|
)
|
|
79
90
|
from sempy_labs._eventstreams import (
|
|
80
91
|
list_eventstreams,
|
|
@@ -158,6 +169,11 @@ from sempy_labs._notebooks import (
|
|
|
158
169
|
from sempy_labs._sql import (
|
|
159
170
|
ConnectWarehouse,
|
|
160
171
|
ConnectLakehouse,
|
|
172
|
+
ConnectSQLDatabase,
|
|
173
|
+
)
|
|
174
|
+
from sempy_labs._sqldatabase import (
|
|
175
|
+
get_sql_database_columns,
|
|
176
|
+
get_sql_database_tables,
|
|
161
177
|
)
|
|
162
178
|
from sempy_labs._workspace_identity import (
|
|
163
179
|
provision_workspace_identity,
|
|
@@ -291,6 +307,7 @@ __all__ = [
|
|
|
291
307
|
"resolve_warehouse_id",
|
|
292
308
|
"ConnectWarehouse",
|
|
293
309
|
"ConnectLakehouse",
|
|
310
|
+
"ConnectSQLDatabase",
|
|
294
311
|
"update_semantic_model_from_bim",
|
|
295
312
|
"list_connections",
|
|
296
313
|
"get_semantic_model_size",
|
|
@@ -499,4 +516,13 @@ __all__ = [
|
|
|
499
516
|
"delta_analyzer",
|
|
500
517
|
# "dax_perf_test",
|
|
501
518
|
# "dax_perf_test_bulk",
|
|
519
|
+
"get_semantic_model_refresh_schedule",
|
|
520
|
+
"get_eventhouse_definition",
|
|
521
|
+
"enable_semantic_model_scheduled_refresh",
|
|
522
|
+
"get_delta_table_history",
|
|
523
|
+
"get_sql_database_columns",
|
|
524
|
+
"get_sql_database_tables",
|
|
525
|
+
"create_item_schedule_cron",
|
|
526
|
+
"create_item_schedule_daily",
|
|
527
|
+
"create_item_schedule_weekly",
|
|
502
528
|
]
|
|
@@ -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
|
-
|
|
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 =
|
|
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 =
|
|
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']
|
|
@@ -2,10 +2,11 @@ import sempy.fabric as fabric
|
|
|
2
2
|
from typing import Optional, List
|
|
3
3
|
from sempy._utils._log import log
|
|
4
4
|
import sempy_labs._icons as icons
|
|
5
|
-
from sempy.fabric.exceptions import FabricHTTPException
|
|
6
5
|
from sempy_labs._workspaces import assign_workspace_to_capacity
|
|
7
|
-
from sempy_labs.admin
|
|
6
|
+
from sempy_labs.admin import (
|
|
8
7
|
assign_workspaces_to_capacity,
|
|
8
|
+
)
|
|
9
|
+
from sempy_labs.admin._capacities import (
|
|
9
10
|
_list_capacities_meta,
|
|
10
11
|
list_capacities,
|
|
11
12
|
)
|
|
@@ -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(
|
|
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",
|
|
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
|
|
140
|
-
"Connection
|
|
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(
|
|
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",
|
|
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",
|
|
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",
|
|
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(
|
|
@@ -62,9 +62,23 @@ def evaluate_dax_impersonation(
|
|
|
62
62
|
payload=payload,
|
|
63
63
|
)
|
|
64
64
|
data = response.json()["results"][0]["tables"]
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
|
|
66
|
+
# Get all possible column names from all rows because null columns aren't returned
|
|
67
|
+
all_columns = set()
|
|
68
|
+
for item in data:
|
|
69
|
+
for row in item["rows"]:
|
|
70
|
+
all_columns.update(row.keys())
|
|
71
|
+
|
|
72
|
+
# Create rows with all columns, filling missing values with None
|
|
73
|
+
rows = []
|
|
74
|
+
for item in data:
|
|
75
|
+
for row in item["rows"]:
|
|
76
|
+
# Create a new row with all columns, defaulting to None
|
|
77
|
+
new_row = {col: row.get(col) for col in all_columns}
|
|
78
|
+
rows.append(new_row)
|
|
79
|
+
|
|
80
|
+
# Create DataFrame from the processed rows
|
|
81
|
+
df = pd.DataFrame(rows)
|
|
68
82
|
|
|
69
83
|
return df
|
|
70
84
|
|