zenml-nightly 0.71.0.dev20250107__py3-none-any.whl → 0.71.0.dev20250111__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.
Files changed (143) hide show
  1. zenml/VERSION +1 -1
  2. zenml/cli/base.py +1 -1
  3. zenml/cli/formatter.py +1 -1
  4. zenml/cli/integration.py +1 -1
  5. zenml/cli/model_registry.py +1 -2
  6. zenml/cli/secret.py +1 -2
  7. zenml/cli/service_connectors.py +1 -1
  8. zenml/cli/stack.py +2 -3
  9. zenml/cli/stack_components.py +4 -6
  10. zenml/cli/text_utils.py +1 -1
  11. zenml/cli/utils.py +4 -5
  12. zenml/client.py +1 -4
  13. zenml/constants.py +1 -0
  14. zenml/entrypoints/step_entrypoint_configuration.py +15 -0
  15. zenml/integrations/azure/__init__.py +1 -1
  16. zenml/integrations/azure/azureml_utils.py +1 -1
  17. zenml/integrations/azure/orchestrators/azureml_orchestrator_entrypoint_config.py +0 -5
  18. zenml/integrations/bitbucket/plugins/event_sources/bitbucket_webhook_event_source.py +3 -3
  19. zenml/integrations/databricks/orchestrators/databricks_orchestrator.py +1 -3
  20. zenml/integrations/evidently/metrics.py +2 -2
  21. zenml/integrations/evidently/tests.py +2 -2
  22. zenml/integrations/gcp/service_connectors/gcp_service_connector.py +3 -3
  23. zenml/integrations/github/plugins/event_sources/github_webhook_event_source.py +3 -3
  24. zenml/integrations/s3/utils.py +1 -2
  25. zenml/logger.py +1 -1
  26. zenml/models/v2/base/scoped.py +37 -34
  27. zenml/models/v2/core/artifact.py +86 -2
  28. zenml/models/v2/core/model.py +81 -2
  29. zenml/models/v2/core/pipeline.py +15 -12
  30. zenml/models/v2/core/pipeline_run.py +2 -0
  31. zenml/services/container/container_service.py +1 -1
  32. zenml/stack/stack_component.py +1 -1
  33. zenml/utils/deprecation_utils.py +6 -6
  34. zenml/utils/filesync_model.py +3 -3
  35. zenml/utils/function_utils.py +1 -1
  36. zenml/utils/pipeline_docker_image_builder.py +1 -1
  37. zenml/zen_server/auth.py +2 -5
  38. zenml/zen_server/dashboard/assets/{404-Cqu3EDCm.js → 404-Dfq64Boz.js} +1 -1
  39. zenml/zen_server/dashboard/assets/{@reactflow-D2Y7BWwz.js → @reactflow-BUNIMFeC.js} +1 -1
  40. zenml/zen_server/dashboard/assets/{AlertDialogDropdownItem-BHd71pVS.js → AlertDialogDropdownItem-B73Vs10T.js} +1 -1
  41. zenml/zen_server/dashboard/assets/{CodeSnippet-DIonwetW.js → CodeSnippet-DIJRT2NT.js} +1 -1
  42. zenml/zen_server/dashboard/assets/{CollapsibleCard-CDnC97pB.js → CollapsibleCard-BzUHGZOU.js} +1 -1
  43. zenml/zen_server/dashboard/assets/{Commands-BVEXKAOj.js → Commands-BEGyld4c.js} +1 -1
  44. zenml/zen_server/dashboard/assets/{ComponentBadge-CrRvovox.js → ComponentBadge-xyKiek1s.js} +1 -1
  45. zenml/zen_server/dashboard/assets/{CopyButton-B6wGAhQv.js → CopyButton-DhW-mapu.js} +1 -1
  46. zenml/zen_server/dashboard/assets/{CsvVizualization-CjcT7LMm.js → CsvVizualization-D8oazBiE.js} +1 -1
  47. zenml/zen_server/dashboard/assets/{DeleteAlertDialog-D2ELtM2W.js → DeleteAlertDialog-WkSIIgfy.js} +1 -1
  48. zenml/zen_server/dashboard/assets/{DialogItem-DXIMhBgU.js → DialogItem-Bgroeg29.js} +1 -1
  49. zenml/zen_server/dashboard/assets/{Error-B8uUfTpL.js → Error-CY5tlu17.js} +1 -1
  50. zenml/zen_server/dashboard/assets/{ExecutionStatus-ibAdY-dG.js → ExecutionStatus-G8mjIaeA.js} +1 -1
  51. zenml/zen_server/dashboard/assets/{Helpbox-BfAfhKHw.js → Helpbox-Bb1ed--O.js} +1 -1
  52. zenml/zen_server/dashboard/assets/{Infobox-M_SMOu96.js → Infobox-Da6-76M2.js} +1 -1
  53. zenml/zen_server/dashboard/assets/{InlineAvatar-DBA0a0-a.js → InlineAvatar-DqnZaBNq.js} +1 -1
  54. zenml/zen_server/dashboard/assets/{NestedCollapsible-DpgmEFKw.js → NestedCollapsible-aK5ojKoF.js} +1 -1
  55. zenml/zen_server/dashboard/assets/{Partials-D_ldD9if.js → Partials-CqZp5NMX.js} +1 -1
  56. zenml/zen_server/dashboard/assets/{ProBadge-DQbfFotM.js → ProBadge-B4tRUYve.js} +1 -1
  57. zenml/zen_server/dashboard/assets/{ProCta-Bcpb4rcY.js → ProCta-CZuP29Qz.js} +1 -1
  58. zenml/zen_server/dashboard/assets/{ProviderIcon-BZpgPigN.js → ProviderIcon-Bd7GUQ1_.js} +1 -1
  59. zenml/zen_server/dashboard/assets/{ProviderRadio-DWPnMuQ1.js → ProviderRadio-mstdqzsS.js} +1 -1
  60. zenml/zen_server/dashboard/assets/{RunSelector-DgRGaAc6.js → RunSelector-CsruSB4i.js} +1 -1
  61. zenml/zen_server/dashboard/assets/{RunsBody-KecfSkjY.js → RunsBody-DxxtWVYz.js} +1 -1
  62. zenml/zen_server/dashboard/assets/{SearchField-n-ILHnaP.js → SearchField-D6tPxyqw.js} +1 -1
  63. zenml/zen_server/dashboard/assets/{SecretTooltip-B8MrX5yu.js → SecretTooltip-CLzJIYW_.js} +1 -1
  64. zenml/zen_server/dashboard/assets/{SetPassword-B_IVq_wg.js → SetPassword-Yn50ooBC.js} +1 -1
  65. zenml/zen_server/dashboard/assets/{StackList-TWPBYnkF.js → StackList-U537qoYd.js} +1 -1
  66. zenml/zen_server/dashboard/assets/{Tabs-Rg857zmd.js → Tabs-CNv-eTYM.js} +1 -1
  67. zenml/zen_server/dashboard/assets/{Tick-COg4A-xo.js → Tick-jEIevzVf.js} +1 -1
  68. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-C6Aj3hm6.js → UpdatePasswordSchemas-C16GW-kX.js} +1 -1
  69. zenml/zen_server/dashboard/assets/{UsageReason-BTLbx7w4.js → UsageReason-Bf2tzhv1.js} +1 -1
  70. zenml/zen_server/dashboard/assets/{WizardFooter-BCAj69Vj.js → WizardFooter-D6i-AP1K.js} +1 -1
  71. zenml/zen_server/dashboard/assets/{all-pipeline-runs-query-DMXkDrV2.js → all-pipeline-runs-query-DUti43aF.js} +1 -1
  72. zenml/zen_server/dashboard/assets/{create-stack-HfdbhLs4.js → create-stack-Ch2WPs9U.js} +1 -1
  73. zenml/zen_server/dashboard/assets/{delete-run-DZ4hIXff.js → delete-run-Byf9hTjA.js} +1 -1
  74. zenml/zen_server/dashboard/assets/{form-schemas-B0AVEd9b.js → form-schemas-BZqKBPBF.js} +1 -1
  75. zenml/zen_server/dashboard/assets/{index-FO-p0GU7.js → index-CE0aQlv8.js} +3 -3
  76. zenml/zen_server/dashboard/assets/{index-DScjfBRb.js → index-CtdYkjUi.js} +1 -1
  77. zenml/zen_server/dashboard/assets/{index-DPqSWjug.js → index-CyBKZcpO.js} +1 -1
  78. zenml/zen_server/dashboard/assets/{index-I3bKUGUj.js → index-v6gQjDEo.js} +1 -1
  79. zenml/zen_server/dashboard/assets/{login-mutation-BQeo4wTY.js → login-mutation-DNDVp_2H.js} +1 -1
  80. zenml/zen_server/dashboard/assets/{not-found-gAJ5aDdR.js → not-found-Bmup4ctE.js} +1 -1
  81. zenml/zen_server/dashboard/assets/{page-I3nKFGie.js → page--XLMzHrn.js} +1 -1
  82. zenml/zen_server/dashboard/assets/{page-DO1UcqPX.js → page-ANYGfEUL.js} +1 -1
  83. zenml/zen_server/dashboard/assets/{page-AUwiQ14W.js → page-B5Sr8pib.js} +1 -1
  84. zenml/zen_server/dashboard/assets/{page-CcQr8CPP.js → page-BC27C_OI.js} +1 -1
  85. zenml/zen_server/dashboard/assets/{page-zaMqB_ao.js → page-BNxYrN0q.js} +1 -1
  86. zenml/zen_server/dashboard/assets/{page-CiYxgZP_.js → page-BYJfqgLN.js} +1 -1
  87. zenml/zen_server/dashboard/assets/{page-h_Stveon.js → page-B_0XkV48.js} +1 -1
  88. zenml/zen_server/dashboard/assets/{page-R5dx3xGF.js → page-BrmJp1Wt.js} +1 -1
  89. zenml/zen_server/dashboard/assets/page-C2nU3Gxn.js +1 -0
  90. zenml/zen_server/dashboard/assets/{page-Dk32IeZm.js → page-C70wZtV2.js} +1 -1
  91. zenml/zen_server/dashboard/assets/{page-CWxT5K5J.js → page-CHRn1fQm.js} +1 -1
  92. zenml/zen_server/dashboard/assets/{page-M0w-n6vn.js → page-CWr96ZKN.js} +1 -1
  93. zenml/zen_server/dashboard/assets/{page-Ce4Hrjnr.js → page-CXAbSyp9.js} +1 -1
  94. zenml/zen_server/dashboard/assets/{page-D8ObrbH8.js → page-CaeI9ptC.js} +1 -1
  95. zenml/zen_server/dashboard/assets/{page-B_Apk3xg.js → page-Cc8ZEuj4.js} +1 -1
  96. zenml/zen_server/dashboard/assets/{page-BxL4qD4_.js → page-CltCNL0T.js} +1 -1
  97. zenml/zen_server/dashboard/assets/{page-D4wdonLm.js → page-CmlYj7Nl.js} +1 -1
  98. zenml/zen_server/dashboard/assets/{page-DFuAUGt4.js → page-D6Ev5P8V.js} +1 -1
  99. zenml/zen_server/dashboard/assets/{page-u_-ZXBKb.js → page-D9Oh05fl.js} +1 -1
  100. zenml/zen_server/dashboard/assets/{page-DRYXdL5o.js → page-DGlm1RVc.js} +1 -1
  101. zenml/zen_server/dashboard/assets/{page-r8XK5vR7.js → page-DN4BVIOL.js} +1 -1
  102. zenml/zen_server/dashboard/assets/{page-DYEquBC2.js → page-Dif8CWyZ.js} +1 -1
  103. zenml/zen_server/dashboard/assets/{page-BdowiCbr.js → page-DlIi5ThM.js} +1 -1
  104. zenml/zen_server/dashboard/assets/{page-9Y9-gig0.js → page-DoW7YxTu.js} +1 -1
  105. zenml/zen_server/dashboard/assets/{page-BKZYc2Zv.js → page-Dth9X1Ih.js} +1 -1
  106. zenml/zen_server/dashboard/assets/{page-bT5pOvcB.js → page-DweqqCkF.js} +1 -1
  107. zenml/zen_server/dashboard/assets/{page-CXuQufSe.js → page-DyOJ_pq3.js} +1 -1
  108. zenml/zen_server/dashboard/assets/{page-DGazBpuP.js → page-Hn8q9iJZ.js} +1 -1
  109. zenml/zen_server/dashboard/assets/{page-hUqK889I.js → page-IhckKFnD.js} +1 -1
  110. zenml/zen_server/dashboard/assets/{page-BU9FG4sR.js → page-LyZ_l8vR.js} +1 -1
  111. zenml/zen_server/dashboard/assets/{page-Cldq1mpe.js → page-PamGpk0j.js} +1 -1
  112. zenml/zen_server/dashboard/assets/page-PxOWfKgF.js +2 -0
  113. zenml/zen_server/dashboard/assets/{persist-DAUi_3za.js → persist-DeXRG61d.js} +1 -1
  114. zenml/zen_server/dashboard/assets/{persist-AppN1B0J.js → persist-vP0-Xl4f.js} +1 -1
  115. zenml/zen_server/dashboard/assets/{service-BqqeXLEe.js → service-DH_oUqQj.js} +1 -1
  116. zenml/zen_server/dashboard/assets/{sharedSchema-uXN9FLLk.js → sharedSchema-Bw1_Wa7l.js} +1 -1
  117. zenml/zen_server/dashboard/assets/{stack-detail-query-XfZBiBP2.js → stack-detail-query-B_0R_fd6.js} +1 -1
  118. zenml/zen_server/dashboard/assets/{update-server-settings-mutation-BWmgVJwA.js → update-server-settings-mutation-D9qYhfaN.js} +1 -1
  119. zenml/zen_server/dashboard/assets/{url-BLwMbzES.js → url-Dh93fvh0.js} +1 -1
  120. zenml/zen_server/dashboard/index.html +3 -3
  121. zenml/zen_server/deploy/deployer.py +1 -1
  122. zenml/zen_server/rbac/rbac_sql_zen_store.py +3 -1
  123. zenml/zen_server/routers/webhook_endpoints.py +1 -2
  124. zenml/zen_stores/migrations/utils.py +1 -2
  125. zenml/zen_stores/migrations/versions/5330ba58bf20_rename_tables_and_foreign_keys.py +7 -9
  126. zenml/zen_stores/rest_zen_store.py +1 -1
  127. zenml/zen_stores/schemas/artifact_schemas.py +19 -19
  128. zenml/zen_stores/schemas/model_schemas.py +19 -19
  129. zenml/zen_stores/schemas/pipeline_run_schemas.py +18 -19
  130. zenml/zen_stores/schemas/pipeline_schemas.py +7 -5
  131. zenml/zen_stores/schemas/run_metadata_schemas.py +1 -45
  132. zenml/zen_stores/schemas/run_template_schemas.py +7 -5
  133. zenml/zen_stores/schemas/step_run_schemas.py +6 -8
  134. zenml/zen_stores/schemas/tag_schemas.py +5 -41
  135. zenml/zen_stores/schemas/utils.py +11 -12
  136. zenml/zen_stores/sql_zen_store.py +9 -3
  137. {zenml_nightly-0.71.0.dev20250107.dist-info → zenml_nightly-0.71.0.dev20250111.dist-info}/METADATA +2 -2
  138. {zenml_nightly-0.71.0.dev20250107.dist-info → zenml_nightly-0.71.0.dev20250111.dist-info}/RECORD +141 -141
  139. zenml/zen_server/dashboard/assets/page-B6XU7yYT.js +0 -2
  140. zenml/zen_server/dashboard/assets/page-Bg8OjTRe.js +0 -1
  141. {zenml_nightly-0.71.0.dev20250107.dist-info → zenml_nightly-0.71.0.dev20250111.dist-info}/LICENSE +0 -0
  142. {zenml_nightly-0.71.0.dev20250107.dist-info → zenml_nightly-0.71.0.dev20250111.dist-info}/WHEEL +0 -0
  143. {zenml_nightly-0.71.0.dev20250107.dist-info → zenml_nightly-0.71.0.dev20250111.dist-info}/entry_points.txt +0 -0
@@ -14,7 +14,7 @@
14
14
  """SQLModel implementation of tag tables."""
15
15
 
16
16
  from datetime import datetime
17
- from typing import TYPE_CHECKING, Any, List
17
+ from typing import Any, List
18
18
  from uuid import UUID
19
19
 
20
20
  from sqlalchemy import VARCHAR, Column
@@ -33,16 +33,6 @@ from zenml.models import (
33
33
  from zenml.zen_stores.schemas.base_schemas import BaseSchema, NamedSchema
34
34
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
35
35
 
36
- if TYPE_CHECKING:
37
- from zenml.zen_stores.schemas.artifact_schemas import (
38
- ArtifactSchema,
39
- ArtifactVersionSchema,
40
- )
41
- from zenml.zen_stores.schemas.model_schemas import (
42
- ModelSchema,
43
- ModelVersionSchema,
44
- )
45
-
46
36
 
47
37
  class TagSchema(NamedSchema, table=True):
48
38
  """SQL Model for tag."""
@@ -52,7 +42,7 @@ class TagSchema(NamedSchema, table=True):
52
42
  color: str = Field(sa_column=Column(VARCHAR(255), nullable=False))
53
43
  links: List["TagResourceSchema"] = Relationship(
54
44
  back_populates="tag",
55
- sa_relationship_kwargs={"cascade": "delete"},
45
+ sa_relationship_kwargs={"overlaps": "tags", "cascade": "delete"},
56
46
  )
57
47
 
58
48
  @classmethod
@@ -130,37 +120,11 @@ class TagResourceSchema(BaseSchema, table=True):
130
120
  ondelete="CASCADE",
131
121
  nullable=False,
132
122
  )
133
- tag: "TagSchema" = Relationship(back_populates="links")
123
+ tag: "TagSchema" = Relationship(
124
+ back_populates="links", sa_relationship_kwargs={"overlaps": "tags"}
125
+ )
134
126
  resource_id: UUID
135
127
  resource_type: str = Field(sa_column=Column(VARCHAR(255), nullable=False))
136
- artifact: List["ArtifactSchema"] = Relationship(
137
- back_populates="tags",
138
- sa_relationship_kwargs=dict(
139
- primaryjoin=f"and_(TagResourceSchema.resource_type=='{TaggableResourceTypes.ARTIFACT.value}', foreign(TagResourceSchema.resource_id)==ArtifactSchema.id)",
140
- overlaps="tags,model,artifact_version,model_version",
141
- ),
142
- )
143
- artifact_version: List["ArtifactVersionSchema"] = Relationship(
144
- back_populates="tags",
145
- sa_relationship_kwargs=dict(
146
- primaryjoin=f"and_(TagResourceSchema.resource_type=='{TaggableResourceTypes.ARTIFACT_VERSION.value}', foreign(TagResourceSchema.resource_id)==ArtifactVersionSchema.id)",
147
- overlaps="tags,model,artifact,model_version",
148
- ),
149
- )
150
- model: List["ModelSchema"] = Relationship(
151
- back_populates="tags",
152
- sa_relationship_kwargs=dict(
153
- primaryjoin=f"and_(TagResourceSchema.resource_type=='{TaggableResourceTypes.MODEL.value}', foreign(TagResourceSchema.resource_id)==ModelSchema.id)",
154
- overlaps="tags,artifact,artifact_version,model_version",
155
- ),
156
- )
157
- model_version: List["ModelVersionSchema"] = Relationship(
158
- back_populates="tags",
159
- sa_relationship_kwargs=dict(
160
- primaryjoin=f"and_(TagResourceSchema.resource_type=='{TaggableResourceTypes.MODEL_VERSION.value}', foreign(TagResourceSchema.resource_id)==ModelVersionSchema.id)",
161
- overlaps="tags,model,artifact,artifact_version",
162
- ),
163
- )
164
128
 
165
129
  @classmethod
166
130
  def from_request(cls, request: TagResourceRequest) -> "TagResourceSchema":
@@ -75,35 +75,34 @@ def get_page_from_list(
75
75
  class RunMetadataInterface:
76
76
  """The interface for entities with run metadata."""
77
77
 
78
- run_metadata_resources = Relationship()
78
+ run_metadata = Relationship()
79
79
 
80
80
  def fetch_metadata_collection(self) -> Dict[str, List[RunMetadataEntry]]:
81
- """Fetches all the metadata entries related to the artifact version.
81
+ """Fetches all the metadata entries related to the entity.
82
82
 
83
83
  Returns:
84
- a dictionary, where the key is the key of the metadata entry
84
+ A dictionary, where the key is the key of the metadata entry
85
85
  and the values represent the list of entries with this key.
86
86
  """
87
87
  metadata_collection: Dict[str, List[RunMetadataEntry]] = {}
88
88
 
89
- # Fetch the metadata related to this step
90
- for rm in self.run_metadata_resources:
91
- if rm.run_metadata.key not in metadata_collection:
92
- metadata_collection[rm.run_metadata.key] = []
93
- metadata_collection[rm.run_metadata.key].append(
89
+ for rm in self.run_metadata:
90
+ if rm.key not in metadata_collection:
91
+ metadata_collection[rm.key] = []
92
+ metadata_collection[rm.key].append(
94
93
  RunMetadataEntry(
95
- value=json.loads(rm.run_metadata.value),
96
- created=rm.run_metadata.created,
94
+ value=json.loads(rm.value),
95
+ created=rm.created,
97
96
  )
98
97
  )
99
98
 
100
99
  return metadata_collection
101
100
 
102
101
  def fetch_metadata(self) -> Dict[str, MetadataType]:
103
- """Fetches the latest metadata entry related to the artifact version.
102
+ """Fetches the latest metadata entry related to the entity.
104
103
 
105
104
  Returns:
106
- a dictionary, where the key is the key of the metadata entry
105
+ A dictionary, where the key is the key of the metadata entry
107
106
  and the values represent the latest entry with this key.
108
107
  """
109
108
  metadata_collection = self.fetch_metadata_collection()
@@ -64,6 +64,13 @@ from sqlalchemy.exc import (
64
64
  )
65
65
  from sqlalchemy.orm import Mapped, noload
66
66
  from sqlalchemy.util import immutabledict
67
+
68
+ # Important to note: The select function of SQLModel works slightly differently
69
+ # from the select function of sqlalchemy. If you input only one entity on the
70
+ # select function of SQLModel, it automatically maps it to a SelectOfScalar.
71
+ # As a result, it will not return a tuple as a result, but the first entity in
72
+ # the tuple. While this is convenient in most cases, in unique cases like using
73
+ # the "add_columns" functionality, one might encounter unexpected results.
67
74
  from sqlmodel import (
68
75
  Session,
69
76
  SQLModel,
@@ -1362,8 +1369,7 @@ class SqlZenStore(BaseZenStore):
1362
1369
  os.remove(dump_file)
1363
1370
  except OSError:
1364
1371
  logger.warning(
1365
- f"Failed to cleanup database dump file "
1366
- f"{dump_file}."
1372
+ f"Failed to cleanup database dump file {dump_file}."
1367
1373
  )
1368
1374
  else:
1369
1375
  logger.info(
@@ -7392,7 +7398,7 @@ class SqlZenStore(BaseZenStore):
7392
7398
  )
7393
7399
  except (ValueError, AuthorizationException) as e:
7394
7400
  error = (
7395
- f'Failed to fetch {resource_type or "available"} '
7401
+ f"Failed to fetch {resource_type or 'available'} "
7396
7402
  f"resources from service connector {connector.name}/"
7397
7403
  f"{connector.id}: {e}"
7398
7404
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: zenml-nightly
3
- Version: 0.71.0.dev20250107
3
+ Version: 0.71.0.dev20250111
4
4
  Summary: ZenML: Write production-ready ML code.
5
5
  Home-page: https://zenml.io
6
6
  License: Apache-2.0
@@ -44,7 +44,7 @@ Requires-Dist: Jinja2 ; extra == "server"
44
44
  Requires-Dist: adlfs (>=2021.10.0) ; extra == "adlfs"
45
45
  Requires-Dist: alembic (>=1.8.1,<1.9.0)
46
46
  Requires-Dist: aws-profile-manager (>=0.5.0) ; extra == "connectors-aws"
47
- Requires-Dist: azure-ai-ml (==1.18.0) ; extra == "azureml"
47
+ Requires-Dist: azure-ai-ml (==1.23.1) ; extra == "azureml"
48
48
  Requires-Dist: azure-identity (>=1.4.0) ; extra == "secrets-azure" or extra == "connectors-azure"
49
49
  Requires-Dist: azure-keyvault-secrets (>=4.0.0) ; extra == "secrets-azure"
50
50
  Requires-Dist: azure-mgmt-containerregistry (>=10.0.0) ; extra == "connectors-azure"