semantic-link-labs 0.8.10__py3-none-any.whl → 0.9.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (81) hide show
  1. {semantic_link_labs-0.8.10.dist-info → semantic_link_labs-0.9.0.dist-info}/METADATA +6 -5
  2. {semantic_link_labs-0.8.10.dist-info → semantic_link_labs-0.9.0.dist-info}/RECORD +81 -80
  3. {semantic_link_labs-0.8.10.dist-info → semantic_link_labs-0.9.0.dist-info}/WHEEL +1 -1
  4. sempy_labs/__init__.py +34 -3
  5. sempy_labs/_authentication.py +80 -4
  6. sempy_labs/_capacities.py +770 -200
  7. sempy_labs/_capacity_migration.py +7 -37
  8. sempy_labs/_clear_cache.py +37 -35
  9. sempy_labs/_connections.py +13 -13
  10. sempy_labs/_data_pipelines.py +20 -20
  11. sempy_labs/_dataflows.py +27 -28
  12. sempy_labs/_dax.py +41 -47
  13. sempy_labs/_deployment_pipelines.py +1 -1
  14. sempy_labs/_environments.py +26 -23
  15. sempy_labs/_eventhouses.py +16 -15
  16. sempy_labs/_eventstreams.py +16 -15
  17. sempy_labs/_external_data_shares.py +18 -20
  18. sempy_labs/_gateways.py +16 -14
  19. sempy_labs/_generate_semantic_model.py +107 -62
  20. sempy_labs/_git.py +105 -43
  21. sempy_labs/_helper_functions.py +251 -194
  22. sempy_labs/_job_scheduler.py +227 -0
  23. sempy_labs/_kql_databases.py +16 -15
  24. sempy_labs/_kql_querysets.py +16 -15
  25. sempy_labs/_list_functions.py +150 -126
  26. sempy_labs/_managed_private_endpoints.py +19 -17
  27. sempy_labs/_mirrored_databases.py +51 -48
  28. sempy_labs/_mirrored_warehouses.py +5 -4
  29. sempy_labs/_ml_experiments.py +16 -15
  30. sempy_labs/_ml_models.py +15 -14
  31. sempy_labs/_model_bpa.py +210 -207
  32. sempy_labs/_model_bpa_bulk.py +2 -2
  33. sempy_labs/_model_bpa_rules.py +3 -3
  34. sempy_labs/_model_dependencies.py +55 -29
  35. sempy_labs/_notebooks.py +29 -25
  36. sempy_labs/_one_lake_integration.py +23 -26
  37. sempy_labs/_query_scale_out.py +75 -64
  38. sempy_labs/_refresh_semantic_model.py +25 -26
  39. sempy_labs/_spark.py +33 -32
  40. sempy_labs/_sql.py +19 -12
  41. sempy_labs/_translations.py +10 -7
  42. sempy_labs/_vertipaq.py +38 -33
  43. sempy_labs/_warehouses.py +26 -25
  44. sempy_labs/_workspace_identity.py +11 -10
  45. sempy_labs/_workspaces.py +40 -33
  46. sempy_labs/admin/_basic_functions.py +166 -115
  47. sempy_labs/admin/_domains.py +7 -2
  48. sempy_labs/admin/_external_data_share.py +3 -3
  49. sempy_labs/admin/_git.py +4 -1
  50. sempy_labs/admin/_items.py +11 -6
  51. sempy_labs/admin/_scanner.py +10 -5
  52. sempy_labs/directlake/_directlake_schema_compare.py +25 -16
  53. sempy_labs/directlake/_directlake_schema_sync.py +24 -12
  54. sempy_labs/directlake/_dl_helper.py +74 -55
  55. sempy_labs/directlake/_generate_shared_expression.py +10 -9
  56. sempy_labs/directlake/_get_directlake_lakehouse.py +32 -36
  57. sempy_labs/directlake/_get_shared_expression.py +4 -3
  58. sempy_labs/directlake/_guardrails.py +12 -6
  59. sempy_labs/directlake/_list_directlake_model_calc_tables.py +15 -9
  60. sempy_labs/directlake/_show_unsupported_directlake_objects.py +16 -10
  61. sempy_labs/directlake/_update_directlake_model_lakehouse_connection.py +35 -31
  62. sempy_labs/directlake/_update_directlake_partition_entity.py +39 -31
  63. sempy_labs/directlake/_warm_cache.py +87 -65
  64. sempy_labs/lakehouse/_get_lakehouse_columns.py +23 -26
  65. sempy_labs/lakehouse/_get_lakehouse_tables.py +27 -38
  66. sempy_labs/lakehouse/_lakehouse.py +7 -20
  67. sempy_labs/lakehouse/_shortcuts.py +42 -23
  68. sempy_labs/migration/_create_pqt_file.py +16 -11
  69. sempy_labs/migration/_refresh_calc_tables.py +16 -10
  70. sempy_labs/report/_download_report.py +9 -8
  71. sempy_labs/report/_generate_report.py +85 -44
  72. sempy_labs/report/_paginated.py +9 -9
  73. sempy_labs/report/_report_bpa.py +15 -11
  74. sempy_labs/report/_report_functions.py +80 -91
  75. sempy_labs/report/_report_helper.py +8 -4
  76. sempy_labs/report/_report_list_functions.py +24 -13
  77. sempy_labs/report/_report_rebind.py +17 -16
  78. sempy_labs/report/_reportwrapper.py +41 -33
  79. sempy_labs/tom/_model.py +139 -21
  80. {semantic_link_labs-0.8.10.dist-info → semantic_link_labs-0.9.0.dist-info}/LICENSE +0 -0
  81. {semantic_link_labs-0.8.10.dist-info → semantic_link_labs-0.9.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: semantic-link-labs
3
- Version: 0.8.10
3
+ Version: 0.9.0
4
4
  Summary: Semantic Link Labs for Microsoft Fabric
5
5
  Author: Microsoft Corporation
6
6
  License: MIT License
@@ -15,11 +15,10 @@ 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.8.3
18
+ Requires-Dist: semantic-link-sempy>=0.8.5
19
19
  Requires-Dist: anytree
20
20
  Requires-Dist: powerbiclient
21
21
  Requires-Dist: polib
22
- Requires-Dist: azure.mgmt.resource
23
22
  Requires-Dist: jsonpath_ng
24
23
  Provides-Extra: test
25
24
  Requires-Dist: pytest>=8.2.1; extra == "test"
@@ -27,7 +26,7 @@ Requires-Dist: pytest>=8.2.1; extra == "test"
27
26
  # Semantic Link Labs
28
27
 
29
28
  [![PyPI version](https://badge.fury.io/py/semantic-link-labs.svg)](https://badge.fury.io/py/semantic-link-labs)
30
- [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.8.10&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
29
+ [![Read The Docs](https://readthedocs.org/projects/semantic-link-labs/badge/?version=0.9.0&style=flat)](https://readthedocs.org/projects/semantic-link-labs/)
31
30
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
32
31
  [![Downloads](https://static.pepy.tech/badge/semantic-link-labs)](https://pepy.tech/project/semantic-link-labs)
33
32
 
@@ -142,6 +141,8 @@ An even better way to ensure the semantic-link-labs library is available in your
142
141
  2. Select your newly created environment within the 'Environment' drop down in the navigation bar at the top of the notebook
143
142
 
144
143
  ## Version History
144
+ * [0.9.0](https://github.com/microsoft/semantic-link-labs/releases/tag/0.9.0) (January 22, 2024)
145
+ * [0.8.11](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.11) (December 19, 2024)
145
146
  * [0.8.10](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.10) (December 16, 2024)
146
147
  * [0.8.9](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.9) (December 4, 2024)
147
148
  * [0.8.8](https://github.com/microsoft/semantic-link-labs/releases/tag/0.8.8) (November 28, 2024)
@@ -1,49 +1,50 @@
1
- sempy_labs/__init__.py,sha256=WyNDrg52pNpAj0s3H7o1vWNYnIpXZrXrKJVYVeC47GQ,13090
1
+ sempy_labs/__init__.py,sha256=JkIsrdcqLJL0-jR32hFeRzSzOURnYargMZrWRbnyoRM,14001
2
2
  sempy_labs/_ai.py,sha256=CzsNw6Wpd2B5Rd0RcY250-_p0L-0gFoMNLEc_KmrobU,16177
3
- sempy_labs/_authentication.py,sha256=a4sPN8IAf7w-Jftm3PvtF62HqWLkCD69tXgze_G59Zg,4642
4
- sempy_labs/_capacities.py,sha256=HWX1ivlWpyS7Ea_ny-39kUAQYFGMzo42kWMGdJMINos,25466
5
- sempy_labs/_capacity_migration.py,sha256=PCIodWXas9v7q93hqD2m8EanJHPJzke52jbCWOfnLZk,27764
6
- sempy_labs/_clear_cache.py,sha256=ttHsXXR6SRRw4eC0cS8I5h38UbWU9YJii1y-uR9R3KM,12493
7
- sempy_labs/_connections.py,sha256=-Z3rfLGlUKx5iIGmvwWOICIVZ478ydwvCjxusoJb1RI,17647
8
- sempy_labs/_data_pipelines.py,sha256=WdZjTELNuN_7suWj6NrZUxGnMTzAgIxFw8V6YMb8ags,5644
9
- sempy_labs/_dataflows.py,sha256=D-OuuoUhSrGEhW1mAMBeHULfhULXmmTqIoOdV-se3vs,8250
10
- sempy_labs/_dax.py,sha256=5lY0p9bS0O2OWViaqTw_9K0WfZsyBW3gK4rIv1bqjjE,9411
11
- sempy_labs/_deployment_pipelines.py,sha256=WBBQM85-3-MkXb5OmRPF6U83xLyhKSlYUyhRlkvcl4k,6027
3
+ sempy_labs/_authentication.py,sha256=c9hDBj6vZ91CiWLys2Zoo0Dl-YyRjWMeX7bJllB0Tf8,6921
4
+ sempy_labs/_capacities.py,sha256=8FdjQ5Uc6kDarqxpfeeNedsigJLGPyGyXqzEgIQQrvc,45294
5
+ sempy_labs/_capacity_migration.py,sha256=F74x6ptdYi1joeleoZ_jKVI-G73tQEDKO4_IrKAeQbU,26152
6
+ sempy_labs/_clear_cache.py,sha256=02zw7ccbKZtvCIgr5u5MyyJEgevzFFcxtU727y4eafM,12780
7
+ sempy_labs/_connections.py,sha256=l6iDJgB-ZGR7jhNHGlhM1__xRVciLNAyILWLo8IX5bs,17693
8
+ sempy_labs/_data_pipelines.py,sha256=1elajdbtNySi-XSqeshG6q9dVUsjNvb6lvVQqelpzoI,5754
9
+ sempy_labs/_dataflows.py,sha256=hchdtA4pIC4R7q0QOKkE5Lmef_HBfRftoRorvp8-rt4,8311
10
+ sempy_labs/_dax.py,sha256=64yaKbSUpoDnub7uKXsuznJ6u_0peN_RfAZJYEB6uPY,9302
11
+ sempy_labs/_deployment_pipelines.py,sha256=LdrzvcU7JmspGAWBkSMViVyp0ZR-VGhChSGnk3SFRho,6027
12
12
  sempy_labs/_documentation.py,sha256=yVA8VPEzx_fmljtcvSxtB7-BeupYsfdMXXjp6Fpnyo8,5007
13
- sempy_labs/_environments.py,sha256=avpLSfZyyQFdEDIIxWv2THLjPZwbs9XGXT7ob9l_-ao,5326
14
- sempy_labs/_eventhouses.py,sha256=vgIFQkXcBPC4SnlrBzT7SRmembExxkm6n0gdKnc7Hlk,4036
15
- sempy_labs/_eventstreams.py,sha256=Rht0eWoZbYF6XKtE3AOUvGgA21smxC9gdN599z-jY3s,4061
16
- sempy_labs/_external_data_shares.py,sha256=lUsKy1mexNSmhyFwxSeE2jZKNdDAWDP6iC6UPTXCvyU,6799
17
- sempy_labs/_gateways.py,sha256=j7REuoG9vGvPcJdII-gOJagprPJctsx3bi-ekUe5q6w,16228
18
- sempy_labs/_generate_semantic_model.py,sha256=YsPULWDkh2VE-jU3F3jIn0AmZPl3dq03sG-QfuHG2GI,16757
19
- sempy_labs/_git.py,sha256=gvFR6kCZbegoO_j_hubt-fxuaxRl1KsVldtQNJfnA9U,13870
20
- sempy_labs/_helper_functions.py,sha256=FtkzTlIJudgGRxrZzjfyon5ehuD8w8KR6sBV74R0XtY,39124
13
+ sempy_labs/_environments.py,sha256=m0bZNUWERS0zMwVbGaHhJBbugpmql89V_QuFx4n20BI,5574
14
+ sempy_labs/_eventhouses.py,sha256=cmGrvH2j7SnpOIiYiILBRpgUVeFq18vBhSOzLiMAMV4,4161
15
+ sempy_labs/_eventstreams.py,sha256=MNjeHQCfKQ99vxr9J42qDR85Kmg4D5x3on3irRxwViQ,4186
16
+ sempy_labs/_external_data_shares.py,sha256=lKuAoW2M3SkWo4Tp0isd3W_Ich473605odAJcrtBm-c,6793
17
+ sempy_labs/_gateways.py,sha256=nmxfSLf6FdEGrtcnJBI7IFk7b9gPWofjy8bXBQjqZNw,16337
18
+ sempy_labs/_generate_semantic_model.py,sha256=eOugdIGf7m-Tdh8fFSgRbz0NkzqUSj16wTUF_R5ekYE,18391
19
+ sempy_labs/_git.py,sha256=ZHIo5qnR9QbV1DVKayBSb0i9iBxthkEtfm4YMKbUwNo,15926
20
+ sempy_labs/_helper_functions.py,sha256=JjkMTpvK8GWxAGBxOHb_jrsOwwXZqNXGafjVunpyfck,41615
21
21
  sempy_labs/_icons.py,sha256=ez2dx_LCti71S_-eB6WYQ-kOMyiBL8ZJN12-ev5dcmA,3579
22
- sempy_labs/_kql_databases.py,sha256=oNX9oKnXu5SLkzl4kTMQguh4In-i-0Forcoy1phOe1s,4621
23
- sempy_labs/_kql_querysets.py,sha256=A-79LiLBKxlADPTuSK9ipy_LjXKcsJZwQHknUXFpVl0,4157
24
- sempy_labs/_list_functions.py,sha256=_5mxBwfTh-BUFWK2lXNPXSpZO0OtP7FlcWaSxwD-Mgs,60939
25
- sempy_labs/_managed_private_endpoints.py,sha256=bCuC9V4yMFBw1BNlsoxARdIEMPAySW-ljHrhvuziQfw,6179
26
- sempy_labs/_mirrored_databases.py,sha256=5_5phu50KIvhHNQJ-RQAxd92W4D7GUVMyjAnOb7ZY3Q,14360
27
- sempy_labs/_mirrored_warehouses.py,sha256=t2fBH5L0UzNahDB4lATDLvmCqYTU-V93_ZVLb5ZISSg,1764
28
- sempy_labs/_ml_experiments.py,sha256=UVh3cwNvpY-otCBIaKW-sgtzyjwAuu8qJDLhZGBHToE,4196
29
- sempy_labs/_ml_models.py,sha256=phYLySjN7MO2YYfq7ZQKMS6w18G6L1-7DdNWB4fcLjQ,4044
22
+ sempy_labs/_job_scheduler.py,sha256=Xfpn-_jyWPrv9Gnj_GBrXTyQPHCS1zLD1oNjZKNd3ZU,7697
23
+ sempy_labs/_kql_databases.py,sha256=z4UmjkLPOoIspystiCqA-4inpK5jv6IGYf-DsEcihhg,4746
24
+ sempy_labs/_kql_querysets.py,sha256=csnvTKB3jtcf_tv6D6okY0k445DVNcSmN253y6dRZww,4282
25
+ sempy_labs/_list_functions.py,sha256=nnNptMa_768jclvFmow1AC_pba3k6y5C7BkqFPlPoDc,62795
26
+ sempy_labs/_managed_private_endpoints.py,sha256=Cbql3ppCfLiCPqAvaApXL2wmjDyyljdZwibMFNsYYCk,6299
27
+ sempy_labs/_mirrored_databases.py,sha256=vbgbezabeO1QvN20IEmLCgag_aPAHsozDJIpkRNAgRU,14704
28
+ sempy_labs/_mirrored_warehouses.py,sha256=Q4fyl3Ov753nS68uG99EHSc9MwgAwwI4DEuQmx5XNaM,1816
29
+ sempy_labs/_ml_experiments.py,sha256=_Lj_aJJbhWAWg98Q1NY77wmelq-h5jLkTSnfv-Xnhds,4321
30
+ sempy_labs/_ml_models.py,sha256=74ncPj0PcTSrCkMmx3aKFYtel9B-Bb6OdV0TbiVJrjc,4166
30
31
  sempy_labs/_model_auto_build.py,sha256=PTQo3dufzLSFcQ5shFkmBWAVSdP7cTJgpUclrcXyNbg,5105
31
- sempy_labs/_model_bpa.py,sha256=nhHAoq9RtOe0lAKRIg9Hr9TBMKxxbGOSCCCs1I8oy1s,21778
32
- sempy_labs/_model_bpa_bulk.py,sha256=jU-kaeUeE1Slz5HEh3lSbnILzj2tfzMwvaOqOQG16Wg,16027
33
- sempy_labs/_model_bpa_rules.py,sha256=96_GkXQGhON-_uyUATgUibk4W9y7e9wl1QciUr96gIQ,45544
34
- sempy_labs/_model_dependencies.py,sha256=PL_-ozj3d2L03xR1S-4b-rGhghKbed3QY47x6i5BnfI,12070
35
- sempy_labs/_notebooks.py,sha256=DTz0byyNMP-JIEn4h85SJ8zMXNrkoChoeV-QE_TvPhE,8280
36
- sempy_labs/_one_lake_integration.py,sha256=eIuLxlw8eXfUH2avKhsyLmXZbTllSwGsz2j_HMAikpQ,6234
37
- sempy_labs/_query_scale_out.py,sha256=xoHnuDUgPYsg-NlUplB9ieb0bClcBQeG4veJNo_4TNw,15708
38
- sempy_labs/_refresh_semantic_model.py,sha256=LSfwuViimX6TFq1KlQCMHue7ylzBwaBSrcPzJuvVz2M,17465
39
- sempy_labs/_spark.py,sha256=RIJt9b_l5Sp5XrebhvRD0DEBKDTQdA8Rh7fByV27ngQ,20109
40
- sempy_labs/_sql.py,sha256=KttKi95iGxTT8UA1QOpT9ygAdwCfHHlcQSQ5d9gml0E,5358
41
- sempy_labs/_translations.py,sha256=CVRd_yJ1pjUzxY_6H8tSCLh67bHhxRyS7DICY20Lqlc,16112
42
- sempy_labs/_vertipaq.py,sha256=sS9wFPxZfr_5dsOIXd-oeQIeCyXkVeCHbp30Kd7raUU,37662
43
- sempy_labs/_warehouses.py,sha256=KI7Ww5Slw4jfhby4ensGVlDHLWq6u2SvdMCa2R9i778,7205
32
+ sempy_labs/_model_bpa.py,sha256=7NIKlF7Mhxm0RxLK42Pi3aLOiRmxFFb_20aPTHLM9W4,21413
33
+ sempy_labs/_model_bpa_bulk.py,sha256=F_AzebdpMm7QvYuSuSj52NTg6jYE9H1FJJDpdnyNF-g,16039
34
+ sempy_labs/_model_bpa_rules.py,sha256=rYDIsGcoynntcdNA1O3sLf-e6R6dspIBByhWrziV59Q,45555
35
+ sempy_labs/_model_dependencies.py,sha256=rMh5FWrVNNs5uHC1AWIH1MwhZ3lvpb08ECwNQ7-7zvs,13111
36
+ sempy_labs/_notebooks.py,sha256=oesdAFq195F2ccI-co6DBGypiwQiranSRFY4A83jbIY,8491
37
+ sempy_labs/_one_lake_integration.py,sha256=fnmM6MeiME5ks1Jd7r3tWYKSafU37Um90K6iDx5S5zg,6223
38
+ sempy_labs/_query_scale_out.py,sha256=uHF4w6Bp1fiX-5FSr_BGwlr-lNRe_El7WtK8j3V9fXw,16454
39
+ sempy_labs/_refresh_semantic_model.py,sha256=G6j1Pj9HBTRbJQ2UX_fxYzoBrzgUmlxy_7_eEijqLtc,17547
40
+ sempy_labs/_spark.py,sha256=txetwju75jz1mkQNY-QUscp0at7StDYHLpjvJ0-v7xQ,20340
41
+ sempy_labs/_sql.py,sha256=-YYal5uqpQvmpy8MOZtUPEcjGLuVk_5dBNjO9ykkLJg,5532
42
+ sempy_labs/_translations.py,sha256=CxpfnyCmn6hAiImxTOvz6x1HG4ppZORHCemJogKPV-M,16193
43
+ sempy_labs/_vertipaq.py,sha256=YX69B1sMzKyQqVquU74yLidR7eEgzOrg6hc2GY-9jr4,37972
44
+ sempy_labs/_warehouses.py,sha256=oiKK4UFmfisvbmnrd1lGQr1rt_kzl34x2a52KDMTdRU,7430
44
45
  sempy_labs/_workloads.py,sha256=x3dS2mOkrS9rA-p70z8849DZlMIvMbzTjMzO_YmnHRg,4449
45
- sempy_labs/_workspace_identity.py,sha256=d5cdiiqjyUVoSoDiqU8mzWYOvbt2oJrt7sm-ZGEEkDk,2261
46
- sempy_labs/_workspaces.py,sha256=Ya_F-2b9LU08xN9bKKRS5LeGs_Ie2o4h26Xgy57IExk,11234
46
+ sempy_labs/_workspace_identity.py,sha256=Av_9hHBHzgOZE3mYiE9v6015tnAJfzfRyqm2_zUOt5c,2357
47
+ sempy_labs/_workspaces.py,sha256=iDVbGsHksDDli_6_v1wcL3a0xLIyXY8Bd1FDHpcRlOE,11510
47
48
  sempy_labs/_bpa_translation/_model/_translations_am-ET.po,sha256=zQVjJ-t0vtgIYan-HaXtUVJLB_PJvB53Nf5BNoOReU4,39199
48
49
  sempy_labs/_bpa_translation/_model/_translations_ar-AE.po,sha256=QP1PjDLFccLDs9zq456crdAST57wrcWVk5rRiqqoCws,36959
49
50
  sempy_labs/_bpa_translation/_model/_translations_bg-BG.po,sha256=sqezjpS3wfk09WD7x27bHoCBtgmqeHtyHNKTwG7-bkI,44132
@@ -83,50 +84,50 @@ sempy_labs/_bpa_translation/_model/_translations_uk-UA.po,sha256=3NsFN8hoor_5L67
83
84
  sempy_labs/_bpa_translation/_model/_translations_zh-CN.po,sha256=ipMbnet7ZI5mZoC8KonYKVwGmFLHFB_9KIDOoBgSNfo,26815
84
85
  sempy_labs/_bpa_translation/_model/_translations_zu-ZA.po,sha256=5v6tVKGruqneAeMoa6F3tyg_JBL8qOpqOJofWpq2W3U,31518
85
86
  sempy_labs/admin/__init__.py,sha256=YYOwKRfRr6alAez4BImlPcX9bQExATrb856BRq7a3O8,1945
86
- sempy_labs/admin/_basic_functions.py,sha256=5EEHWDhIFEt94-9yKNecIAMN-KzdBg1uqfdZNoXmnwA,37068
87
- sempy_labs/admin/_domains.py,sha256=5mv2SzIZCibvHwd4tgm-Lelj0zi66A2KKzQjDQgT9ms,12385
88
- sempy_labs/admin/_external_data_share.py,sha256=ITsPDgRDfgvZn1cjzpUWyR6lpnoOP0-gJVxjRA3Mp8w,3489
89
- sempy_labs/admin/_git.py,sha256=OY2F5ICKBXrB1HhlYDWdXQPnhTwSrMfWzEa2xcutClc,2181
90
- sempy_labs/admin/_items.py,sha256=LqjBYWL3NZCX8f0H-zzjOzy9zlBC7XR4LiknJv_JLT0,8428
91
- sempy_labs/admin/_scanner.py,sha256=OkP2Nc_s-DkYEmfLqiMIf8i3EhVyHfvnT1bPSSnVVss,4476
87
+ sempy_labs/admin/_basic_functions.py,sha256=sGkUUM0v0G6aEqzy-WEoEyICe8uXz1FFDeN2yvZrmaQ,39846
88
+ sempy_labs/admin/_domains.py,sha256=XXkCusjdAnRe2zW1aFty0YnUpsgeV_U1XeYhD3U3UgU,12857
89
+ sempy_labs/admin/_external_data_share.py,sha256=NNdkBbs0OhSmZHNCN0QehWEdbx-amkxxLXAPBBKh11I,3512
90
+ sempy_labs/admin/_git.py,sha256=yvqfpvFyprV_BhNUcD6Bp76vDWGQM0um53wbJzBlauw,2438
91
+ sempy_labs/admin/_items.py,sha256=7f6pDDdqORgy1wg-qBv96exYwLphkOb767AWA2p13tg,8936
92
+ sempy_labs/admin/_scanner.py,sha256=5NfCMkafBkJQB9eq0q03dOgc2_FpD3b6S9tbNWwsZ_k,4785
92
93
  sempy_labs/directlake/__init__.py,sha256=etaj-3wqe5t93mu74tGYjEOQ6gtHWUogidOygiVvlq8,2131
93
- sempy_labs/directlake/_directlake_schema_compare.py,sha256=ocHFU6E6HSKgcNLywGM0dx0ie9AXYwk-E7o7EYcqiN4,4422
94
- sempy_labs/directlake/_directlake_schema_sync.py,sha256=fhh6Xjd42HjI5x_Ejwq1N4qqnXQsKpXmyPcYl7cNG6A,4151
95
- sempy_labs/directlake/_dl_helper.py,sha256=tG3b0-BJbk-Kwk2B0fyPwoaMgTXS920L61Qz55COex8,9647
96
- sempy_labs/directlake/_generate_shared_expression.py,sha256=EauK1M4fabCZjsHYAWxEYaVJKqxJ99nZQaN2pKdd1lg,3077
97
- sempy_labs/directlake/_get_directlake_lakehouse.py,sha256=sovI4ds2SEgkp4Fi465jtJ4seRvQxdYgcixRDvsUwNM,2321
98
- sempy_labs/directlake/_get_shared_expression.py,sha256=rJ2twFSAMpjdjXl4zkqei_qxzxmGn5DxiDW2KxLcUog,1081
99
- sempy_labs/directlake/_guardrails.py,sha256=elPIrqBy7gX7ZhVC7dBqhuFohET9QX9cCX1Harwrw3A,2525
100
- sempy_labs/directlake/_list_directlake_model_calc_tables.py,sha256=_rpnbgsFAz2W16PpgIOB0Rj_Fs1ZKrDbz3DUaaR_bfU,2143
101
- sempy_labs/directlake/_show_unsupported_directlake_objects.py,sha256=xm6bih0mbYfWP6ca8BKMZobfS4hhcHNFIhR5I6sNpgw,3181
102
- sempy_labs/directlake/_update_directlake_model_lakehouse_connection.py,sha256=CyluSlo4VVnjl5bEzSLkkhvwDs3YnzSil2lphtlS_KE,5826
103
- sempy_labs/directlake/_update_directlake_partition_entity.py,sha256=Z67WolTLIrflLFBvRuhmE_MxYGhSBQCFvjqojz6yavw,7614
104
- sempy_labs/directlake/_warm_cache.py,sha256=b7XvH74nQrEoraOflrXs4-fVuiLtRrmsQI35TBnYEqs,8307
94
+ sempy_labs/directlake/_directlake_schema_compare.py,sha256=Cjw1l05jCetWPKvnqmcp7kzCe_RIWb9Pd-uwSbDrnVI,4989
95
+ sempy_labs/directlake/_directlake_schema_sync.py,sha256=5nDyE-8ApeaUJO9aJLasop8G9bG9TjPamDQvgAlCUew,4671
96
+ sempy_labs/directlake/_dl_helper.py,sha256=IVhZHBxK7LTFxlSgTTFowhR8Ygu_Z8ZnLCFDIoCJ9Y4,10722
97
+ sempy_labs/directlake/_generate_shared_expression.py,sha256=93ufAnD-qM0beRQp7lSzsuOAvhnMXqkoJoZei2RNVYg,3141
98
+ sempy_labs/directlake/_get_directlake_lakehouse.py,sha256=LzB-2aj2m8YqfOfWIGqm8mA_LOn2YSbdYWIMpMOhnrQ,2338
99
+ sempy_labs/directlake/_get_shared_expression.py,sha256=qc85kXggkx_7Sz_rAAli_yPnLzrGZpgD8IfVbTfZhQM,1133
100
+ sempy_labs/directlake/_guardrails.py,sha256=YO8OycXDxmWrtH8nTz5a4AddfnpskM83rTPEPBVpqbM,2701
101
+ sempy_labs/directlake/_list_directlake_model_calc_tables.py,sha256=QA35_8YWK4b8-wEvHiRnCm9me_XD2noLqxAtE2pCgnY,2451
102
+ sempy_labs/directlake/_show_unsupported_directlake_objects.py,sha256=xu2PUaXtZAbgYksc0YSlIZvL9rh-oI6rLhHnHwoNjYI,3453
103
+ sempy_labs/directlake/_update_directlake_model_lakehouse_connection.py,sha256=DC8Ig8oJtPY5qdWytIy03iiqYiQxLoRmQ5hsu6I69Sw,6348
104
+ sempy_labs/directlake/_update_directlake_partition_entity.py,sha256=z6dSrzPzRTQOVByLcGigMyXOF9YAUjSEqeAyAeVGh5U,8335
105
+ sempy_labs/directlake/_warm_cache.py,sha256=mFwyhtsCPJd3nDKcwMkyFtXbDhE77WCPBZkYppIRVq4,9207
105
106
  sempy_labs/lakehouse/__init__.py,sha256=6LVQltQ3cjyiuxvjXTuNdJ163zSqi4h_tEZY4zsxuSw,647
106
- sempy_labs/lakehouse/_get_lakehouse_columns.py,sha256=Bb_iCTlNwl0wdN4dW_E7tVnfbHhHwQT_l0SUqvcbYpo,2582
107
- sempy_labs/lakehouse/_get_lakehouse_tables.py,sha256=zizPKtwDojIN6wbPhrQOUL6-_-kq8zqfbsT8BmS94i8,9010
108
- sempy_labs/lakehouse/_lakehouse.py,sha256=_yn0ySUrJQD9nySa3gFpEGr6AvF-vOKIMNJruotfxHQ,5224
109
- sempy_labs/lakehouse/_shortcuts.py,sha256=tHkeLcSOiDv36XFysyiQBSKsq9-ohb20vXziU-lf0G4,7337
107
+ sempy_labs/lakehouse/_get_lakehouse_columns.py,sha256=y1WZ0D5HfzVVqWQvpzz6DuEhpncNN8LgQnBfghbh0vA,2638
108
+ sempy_labs/lakehouse/_get_lakehouse_tables.py,sha256=UOZ70YX7gwVg6xaJsJ53vTFz2OJ_Eif_COT-4Ogxf1c,8682
109
+ sempy_labs/lakehouse/_lakehouse.py,sha256=Yg1PxUIGFYnmXyAAFTLcXtBdwhyZ-YuRmeiuCg1BweI,4808
110
+ sempy_labs/lakehouse/_shortcuts.py,sha256=YqII1rBOLebNPz8OroaTAgZFb96T61Lxqfzz4gct_Fo,8103
110
111
  sempy_labs/migration/__init__.py,sha256=w4vvGk6wTWXVfofJDmio2yIFvSSJsxOpjv6mvNGmrOI,1043
111
- sempy_labs/migration/_create_pqt_file.py,sha256=oJJrHfwkq32p_UKBFi0LccjaVI5j4CbRvtYhnDC0b6c,9391
112
+ sempy_labs/migration/_create_pqt_file.py,sha256=eRK0Jz9ZeV_7jV3kNRze0bTAIqxsAZXLKMGE_loKOaY,9677
112
113
  sempy_labs/migration/_migrate_calctables_to_lakehouse.py,sha256=5fSZHylS8yLmk7maYDsvKbOqB9unxT4sQZq5HxBZwQY,17969
113
114
  sempy_labs/migration/_migrate_calctables_to_semantic_model.py,sha256=yNSx126ru7-mUXI3iISwmw8a5jRCwcWw4l5eMXldrcU,6253
114
115
  sempy_labs/migration/_migrate_model_objects_to_semantic_model.py,sha256=8IN45AKxic3_4yrC-N5rqWMzO6bCLF9qoyWxbxrvBHc,22900
115
116
  sempy_labs/migration/_migrate_tables_columns_to_semantic_model.py,sha256=EiWWaIkNqBGlRKG64lo7gKO31XBuwym_IVvG405PzvM,7118
116
117
  sempy_labs/migration/_migration_validation.py,sha256=pl5Yv4BwRHZfAL0p2soj_Gk8FL3UcwiqKbX23pJe1oQ,2788
117
- sempy_labs/migration/_refresh_calc_tables.py,sha256=gUFssZ5vyN4OmViLYkBNkLmYscvQTk8RBZ-i_lrCJYU,5239
118
+ sempy_labs/migration/_refresh_calc_tables.py,sha256=lKkwVBN7eyDoMJd0cv4jkLyO6iGjsuh96RPv6_Iiwrc,5537
118
119
  sempy_labs/report/_BPAReportTemplate.json,sha256=9Uh-7E6d2ooxQ7j5JRayv_ayEULc7Gzg42kZGKdOqH8,63920
119
120
  sempy_labs/report/__init__.py,sha256=esE_i1lL2AdcwWs7cE8AKSXZy_7w_4jJJtFULFkDPcU,1244
120
- sempy_labs/report/_download_report.py,sha256=C3jsUJ59L5iv8H9NJWVlIuMUrr66VCnVG4xJJ-hACXs,2772
121
- sempy_labs/report/_generate_report.py,sha256=0Tp8ILRjmKj_EvQZkeyr9Wu81X8CgkAMOgLN3WdhAxQ,12773
122
- sempy_labs/report/_paginated.py,sha256=-u0vV6byPOBWUOmeBtjPCTmarymucoRv_DvXA54FIHY,2281
123
- sempy_labs/report/_report_bpa.py,sha256=b1rnp-kCjdWAs1YMJDO_wo665v9BYT38PBDjEQcFmlQ,13697
121
+ sempy_labs/report/_download_report.py,sha256=BtgcHiz1jYeC1fr908oPot9_K00Ej_OadCYfd2BKL6E,2848
122
+ sempy_labs/report/_generate_report.py,sha256=bzyMgov414v3rrTOHRDNf24C_E_3mFH73znAP8OmL30,14331
123
+ sempy_labs/report/_paginated.py,sha256=khQHoanEsxoVL3g08WrOPcsI3ggo9TAlb5cNXgOs7dg,2278
124
+ sempy_labs/report/_report_bpa.py,sha256=bMZlvFVKypRCC7uC0QmkqV9i4n5nMj3X-tI2N6OOxLc,13861
124
125
  sempy_labs/report/_report_bpa_rules.py,sha256=tPVGA0hmE6QMLlWtig7Va7Ksr2yXWl_Lndq--tWWd6w,4959
125
- sempy_labs/report/_report_functions.py,sha256=nKqsVsjGrv8TUXsBXpb5ejEopAaFELc7YzhGerJUTBI,30099
126
- sempy_labs/report/_report_helper.py,sha256=pKIsca-XWaioQd97FgbEfsGPWy4X_NxSyYm22W3C23E,10461
127
- sempy_labs/report/_report_list_functions.py,sha256=Y0fkoo1gGoVDnihveKruNXFgPJNSiEQ5Fus8bw0nqcU,3381
128
- sempy_labs/report/_report_rebind.py,sha256=GbOfEb9qz4SdXVGopiWSkGMDKnneJxd7wx4_OWKZ1Js,5188
129
- sempy_labs/report/_reportwrapper.py,sha256=ZFcWuZMo9SOzvZ8aPG-DvlZq_MkXRALUJusVIHn7dxE,83049
126
+ sempy_labs/report/_report_functions.py,sha256=49TrYBIeWqth__q9GodacXIRdn90HBZfzBUv5nI01Gw,30007
127
+ sempy_labs/report/_report_helper.py,sha256=NcdWgFuh1GjDwVPzy6QWwg3ecaJKoWzZdhbxT6hbbdA,10599
128
+ sempy_labs/report/_report_list_functions.py,sha256=JDKb0RVN5hdytjf65PtQ1HJANMIj1FhvPCk3rmGxze4,3929
129
+ sempy_labs/report/_report_rebind.py,sha256=Q3J7I5EWmFWQ39s5W4x1kiobWjugxQsCpzj8RnaRAeM,5168
130
+ sempy_labs/report/_reportwrapper.py,sha256=hhCFw7ErQxR4rBk3m4mXt1pW5l87c9ia0I9y4CMrCHI,83328
130
131
  sempy_labs/report/_bpareporttemplate/.platform,sha256=kWRa6B_KwSYLsvVFDx372mQriQO8v7dJ_YzQV_cfD-Q,303
131
132
  sempy_labs/report/_bpareporttemplate/definition.pbir,sha256=bttyHZYKqjA8OBb_cezGlX4H82cDvGZVCl1QB3fij4E,343
132
133
  sempy_labs/report/_bpareporttemplate/.pbi/localSettings.json,sha256=kzjBlNdjbsSBBSHBwbQc298AJCr9Vp6Ex0D5PemUuT0,1578
@@ -157,9 +158,9 @@ sempy_labs/report/_bpareporttemplate/definition/pages/c597da16dc7e63222a82/visua
157
158
  sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/page.json,sha256=wBVuNc8S2NaUA0FC708w6stmR2djNZp8nAsHMqesgsc,293
158
159
  sempy_labs/report/_bpareporttemplate/definition/pages/d37dce724a0ccc30044b/visuals/ce8532a7e25020271077/visual.json,sha256=mlY6t9OlSe-Y6_QmXJpS1vggU6Y3FjISUKECL8FVSg8,931
159
160
  sempy_labs/tom/__init__.py,sha256=Qbs8leW0fjzvWwOjyWK3Hjeehu7IvpB1beASGsi28bk,121
160
- sempy_labs/tom/_model.py,sha256=rBMI9BTSuTEH1MnJsUIVtsc45x7EOQ2fAxcYkwYgfZw,173575
161
- semantic_link_labs-0.8.10.dist-info/LICENSE,sha256=ws_MuBL-SCEBqPBFl9_FqZkaaydIJmxHrJG2parhU4M,1141
162
- semantic_link_labs-0.8.10.dist-info/METADATA,sha256=eITmLRcqLr0Yuitj1Q1LXmWYDH5AA-fbpwWUDGWQuO4,21196
163
- semantic_link_labs-0.8.10.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
164
- semantic_link_labs-0.8.10.dist-info/top_level.txt,sha256=kiQX1y42Dbein1l3Q8jMUYyRulDjdlc2tMepvtrvixQ,11
165
- semantic_link_labs-0.8.10.dist-info/RECORD,,
161
+ sempy_labs/tom/_model.py,sha256=Hju9gqw374JQSNfdiujauRGnHxz7dUgXSXyN1Xhgdr8,178744
162
+ semantic_link_labs-0.9.0.dist-info/LICENSE,sha256=ws_MuBL-SCEBqPBFl9_FqZkaaydIJmxHrJG2parhU4M,1141
163
+ semantic_link_labs-0.9.0.dist-info/METADATA,sha256=uJItbGxzVXYs6fJw6oSX4e-jilLK1ZPcvWkCI1_XHug,21356
164
+ semantic_link_labs-0.9.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
165
+ semantic_link_labs-0.9.0.dist-info/top_level.txt,sha256=kiQX1y42Dbein1l3Q8jMUYyRulDjdlc2tMepvtrvixQ,11
166
+ semantic_link_labs-0.9.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
sempy_labs/__init__.py CHANGED
@@ -1,3 +1,7 @@
1
+ from sempy_labs._job_scheduler import (
2
+ list_item_job_instances,
3
+ list_item_schedules,
4
+ )
1
5
  from sempy_labs._gateways import (
2
6
  list_gateway_members,
3
7
  list_gateway_role_assigments,
@@ -10,9 +14,9 @@ from sempy_labs._gateways import (
10
14
  update_on_premises_gateway,
11
15
  bind_semantic_model_to_gateway,
12
16
  )
13
-
14
17
  from sempy_labs._authentication import (
15
18
  ServicePrincipalTokenProvider,
19
+ service_principal_authentication,
16
20
  )
17
21
  from sempy_labs._mirrored_databases import (
18
22
  get_mirrored_database_definition,
@@ -117,6 +121,17 @@ from sempy_labs._capacities import (
117
121
  delete_embedded_capacity,
118
122
  delete_premium_capacity,
119
123
  create_resource_group,
124
+ list_skus,
125
+ list_skus_for_capacity,
126
+ list_subscriptions,
127
+ list_tenants,
128
+ get_subscription,
129
+ check_resource_group_existence,
130
+ list_storage_accounts,
131
+ create_storage_account,
132
+ create_or_update_resource_group,
133
+ list_resource_groups,
134
+ get_resource_group,
120
135
  )
121
136
  from sempy_labs._spark import (
122
137
  get_spark_settings,
@@ -160,7 +175,8 @@ from sempy_labs._git import (
160
175
  commit_to_git,
161
176
  initialize_git_connection,
162
177
  update_from_git,
163
- connect_workspace_to_git,
178
+ connect_workspace_to_azure_dev_ops,
179
+ connect_workspace_to_github,
164
180
  disconnect_workspace_from_git,
165
181
  )
166
182
  from sempy_labs._dataflows import (
@@ -368,7 +384,8 @@ __all__ = [
368
384
  "commit_to_git",
369
385
  "initialize_git_connection",
370
386
  "update_from_git",
371
- "connect_workspace_to_git",
387
+ "connect_workspace_to_azure_dev_ops",
388
+ "connect_workspace_to_github",
372
389
  "disconnect_workspace_from_git",
373
390
  "create_environment",
374
391
  "delete_environment",
@@ -466,4 +483,18 @@ __all__ = [
466
483
  "list_server_properties",
467
484
  "bind_semantic_model_to_gateway",
468
485
  "list_semantic_model_errors",
486
+ "list_item_job_instances",
487
+ "list_item_schedules",
488
+ "list_skus",
489
+ "list_skus_for_capacity",
490
+ "list_subscriptions",
491
+ "list_tenants",
492
+ "get_subscription",
493
+ "check_resource_group_existence",
494
+ "list_storage_accounts",
495
+ "create_storage_account",
496
+ "create_or_update_resource_group",
497
+ "list_resource_groups",
498
+ "get_resource_group",
499
+ "service_principal_authentication",
469
500
  ]
@@ -1,6 +1,9 @@
1
- from typing import Literal
1
+ from typing import Literal, Optional
2
2
  from sempy.fabric._token_provider import TokenProvider
3
3
  from azure.identity import ClientSecretCredential
4
+ from sempy._utils._log import log
5
+ from contextlib import contextmanager
6
+ import contextvars
4
7
 
5
8
 
6
9
  class ServicePrincipalTokenProvider(TokenProvider):
@@ -14,6 +17,7 @@ class ServicePrincipalTokenProvider(TokenProvider):
14
17
 
15
18
  self.credential = credential
16
19
 
20
+ @log
17
21
  @classmethod
18
22
  def from_aad_application_key_authentication(
19
23
  cls, tenant_id: str, client_id: str, client_secret: str
@@ -41,8 +45,13 @@ class ServicePrincipalTokenProvider(TokenProvider):
41
45
  tenant_id=tenant_id, client_id=client_id, client_secret=client_secret
42
46
  )
43
47
 
48
+ cls.tenant_id = tenant_id
49
+ cls.client_id = client_id
50
+ cls.client_secret = client_secret
51
+
44
52
  return cls(credential)
45
53
 
54
+ @log
46
55
  @classmethod
47
56
  def from_azure_key_vault(
48
57
  cls,
@@ -89,16 +98,26 @@ class ServicePrincipalTokenProvider(TokenProvider):
89
98
  tenant_id=tenant_id, client_id=client_id, client_secret=client_secret
90
99
  )
91
100
 
101
+ cls.tenant_id = tenant_id
102
+ cls.client_id = client_id
103
+ cls.client_secret = client_secret
104
+
92
105
  return cls(credential)
93
106
 
94
107
  def __call__(
95
- self, audience: Literal["pbi", "storage", "azure", "graph"] = "pbi"
108
+ self,
109
+ audience: Literal[
110
+ "pbi", "storage", "azure", "graph", "asazure", "keyvault"
111
+ ] = "pbi",
112
+ region: Optional[str] = None,
96
113
  ) -> str:
97
114
  """
98
115
  Parameters
99
116
  ----------
100
- audience : Literal["pbi", "storage", "azure", "graph"] = "pbi") -> str
117
+ audience : Literal["pbi", "storage", "azure", "graph", "asazure", "keyvault"] = "pbi") -> str
101
118
  Literal if it's for PBI/Fabric API call or OneLake/Storage Account call.
119
+ region : str, default=None
120
+ The region of the Azure Analysis Services. For example: 'westus2'.
102
121
  """
103
122
  if audience == "pbi":
104
123
  return self.credential.get_token(
@@ -114,12 +133,21 @@ class ServicePrincipalTokenProvider(TokenProvider):
114
133
  return self.credential.get_token(
115
134
  "https://graph.microsoft.com/.default"
116
135
  ).token
136
+ elif audience == "asazure":
137
+ return self.credential.get_token(
138
+ f"https://{region}.asazure.windows.net/.default"
139
+ ).token
140
+ elif audience == "keyvault":
141
+ return self.credential.get_token("https://vault.azure.net/.default").token
117
142
  else:
118
143
  raise NotImplementedError
119
144
 
120
145
 
121
146
  def _get_headers(
122
- token_provider: str, audience: Literal["pbi", "storage", "azure", "graph"] = "azure"
147
+ token_provider: str,
148
+ audience: Literal[
149
+ "pbi", "storage", "azure", "graph", "asazure", "keyvault"
150
+ ] = "azure",
123
151
  ):
124
152
  """
125
153
  Generates headers for an API request.
@@ -135,3 +163,51 @@ def _get_headers(
135
163
  headers["Content-Type"] = "application/json"
136
164
 
137
165
  return headers
166
+
167
+
168
+ token_provider = contextvars.ContextVar("token_provider", default=None)
169
+
170
+
171
+ @log
172
+ @contextmanager
173
+ def service_principal_authentication(
174
+ key_vault_uri: str,
175
+ key_vault_tenant_id: str,
176
+ key_vault_client_id: str,
177
+ key_vault_client_secret: str,
178
+ ):
179
+ """
180
+ Establishes an authentication via Service Principal.
181
+
182
+ Parameters
183
+ ----------
184
+ key_vault_uri : str
185
+ Azure Key Vault URI.
186
+ key_vault_tenant_id : str
187
+ Name of the secret in the Key Vault with the Fabric Tenant ID.
188
+ key_vault_client_id : str
189
+ Name of the secret in the Key Vault with the Service Principal Client ID.
190
+ key_vault_client_secret : str
191
+ Name of the secret in the Key Vault with the Service Principal Client Secret.
192
+ """
193
+
194
+ # Save the prior state
195
+ prior_token = token_provider.get()
196
+
197
+ # Set the new token_provider in a thread-safe manner
198
+ token_provider.set(
199
+ ServicePrincipalTokenProvider.from_azure_key_vault(
200
+ key_vault_uri=key_vault_uri,
201
+ key_vault_tenant_id=key_vault_tenant_id,
202
+ key_vault_client_id=key_vault_client_id,
203
+ key_vault_client_secret=key_vault_client_secret,
204
+ )
205
+ )
206
+ try:
207
+ yield
208
+ finally:
209
+ # Restore the prior state
210
+ if prior_token is None:
211
+ token_provider.set(None)
212
+ else:
213
+ token_provider.set(prior_token)