apache-airflow-providers-microsoft-azure 8.4.0rc1__tar.gz → 8.5.0__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.
Files changed (50) hide show
  1. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/PKG-INFO +7 -7
  2. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/README.rst +3 -3
  3. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/__init__.py +1 -1
  4. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/fs/adls.py +12 -23
  5. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/get_provider_info.py +2 -1
  6. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/hooks/asb.py +4 -4
  7. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/hooks/base_azure.py +4 -4
  8. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/hooks/container_registry.py +2 -2
  9. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/hooks/container_volume.py +4 -4
  10. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/hooks/cosmos.py +4 -4
  11. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/hooks/data_factory.py +4 -4
  12. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/hooks/data_lake.py +4 -4
  13. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/hooks/fileshare.py +6 -4
  14. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/hooks/synapse.py +8 -8
  15. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/hooks/wasb.py +4 -4
  16. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/operators/adls.py +3 -3
  17. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/operators/container_instances.py +23 -23
  18. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/pyproject.toml +4 -4
  19. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/LICENSE +0 -0
  20. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/fs/__init__.py +0 -0
  21. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/hooks/__init__.py +0 -0
  22. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/hooks/adx.py +0 -0
  23. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/hooks/batch.py +0 -0
  24. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/hooks/container_instance.py +0 -0
  25. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/log/__init__.py +0 -0
  26. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/log/wasb_task_handler.py +0 -0
  27. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/operators/__init__.py +0 -0
  28. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/operators/adx.py +0 -0
  29. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/operators/asb.py +0 -0
  30. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/operators/batch.py +0 -0
  31. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/operators/cosmos.py +0 -0
  32. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/operators/data_factory.py +0 -0
  33. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/operators/synapse.py +0 -0
  34. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/operators/wasb_delete_blob.py +0 -0
  35. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/secrets/__init__.py +0 -0
  36. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/secrets/key_vault.py +0 -0
  37. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/sensors/__init__.py +0 -0
  38. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/sensors/cosmos.py +0 -0
  39. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/sensors/data_factory.py +0 -0
  40. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/sensors/wasb.py +0 -0
  41. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/transfers/__init__.py +0 -0
  42. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/transfers/azure_blob_to_gcs.py +0 -0
  43. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/transfers/local_to_adls.py +0 -0
  44. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/transfers/local_to_wasb.py +0 -0
  45. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/transfers/oracle_to_azure_data_lake.py +0 -0
  46. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/transfers/sftp_to_wasb.py +0 -0
  47. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/triggers/__init__.py +0 -0
  48. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/triggers/data_factory.py +0 -0
  49. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/triggers/wasb.py +0 -0
  50. {apache_airflow_providers_microsoft_azure-8.4.0rc1 → apache_airflow_providers_microsoft_azure-8.5.0}/airflow/providers/microsoft/azure/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: apache-airflow-providers-microsoft-azure
3
- Version: 8.4.0rc1
3
+ Version: 8.5.0
4
4
  Summary: Provider package apache-airflow-providers-microsoft-azure for Apache Airflow
5
5
  Keywords: airflow-provider,microsoft.azure,airflow,integration
6
6
  Author-email: Apache Software Foundation <dev@airflow.apache.org>
@@ -22,7 +22,7 @@ Classifier: Programming Language :: Python :: 3.11
22
22
  Classifier: Topic :: System :: Monitoring
23
23
  Requires-Dist: adal>=1.2.7
24
24
  Requires-Dist: adlfs>=2023.10.0
25
- Requires-Dist: apache-airflow>=2.6.0.dev0
25
+ Requires-Dist: apache-airflow>=2.6.0
26
26
  Requires-Dist: azure-batch>=8.0.0
27
27
  Requires-Dist: azure-cosmos>=4.0.0
28
28
  Requires-Dist: azure-datalake-store>=0.0.45
@@ -46,8 +46,8 @@ Requires-Dist: apache-airflow-providers-google ; extra == "google"
46
46
  Requires-Dist: apache-airflow-providers-oracle ; extra == "oracle"
47
47
  Requires-Dist: apache-airflow-providers-sftp ; extra == "sftp"
48
48
  Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
49
- Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/8.4.0/changelog.html
50
- Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/8.4.0
49
+ Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/8.5.0/changelog.html
50
+ Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/8.5.0
51
51
  Project-URL: Slack Chat, https://s.apache.org/airflow-slack
52
52
  Project-URL: Source Code, https://github.com/apache/airflow
53
53
  Project-URL: Twitter, https://twitter.com/ApacheAirflow
@@ -100,7 +100,7 @@ Provides-Extra: sftp
100
100
 
101
101
  Package ``apache-airflow-providers-microsoft-azure``
102
102
 
103
- Release: ``8.4.0.rc1``
103
+ Release: ``8.5.0``
104
104
 
105
105
 
106
106
  `Microsoft Azure <https://azure.microsoft.com/>`__
@@ -113,7 +113,7 @@ This is a provider package for ``microsoft.azure`` provider. All classes for thi
113
113
  are in ``airflow.providers.microsoft.azure`` python package.
114
114
 
115
115
  You can find package information and changelog for the provider
116
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/8.4.0/>`_.
116
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/8.5.0/>`_.
117
117
 
118
118
  Installation
119
119
  ------------
@@ -176,4 +176,4 @@ Dependent package
176
176
  ==================================================================================================== ==========
177
177
 
178
178
  The changelog for the provider package can be found in the
179
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/8.4.0/changelog.html>`_.
179
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/8.5.0/changelog.html>`_.
@@ -42,7 +42,7 @@
42
42
 
43
43
  Package ``apache-airflow-providers-microsoft-azure``
44
44
 
45
- Release: ``8.4.0.rc1``
45
+ Release: ``8.5.0``
46
46
 
47
47
 
48
48
  `Microsoft Azure <https://azure.microsoft.com/>`__
@@ -55,7 +55,7 @@ This is a provider package for ``microsoft.azure`` provider. All classes for thi
55
55
  are in ``airflow.providers.microsoft.azure`` python package.
56
56
 
57
57
  You can find package information and changelog for the provider
58
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/8.4.0/>`_.
58
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/8.5.0/>`_.
59
59
 
60
60
  Installation
61
61
  ------------
@@ -118,4 +118,4 @@ Dependent package
118
118
  ==================================================================================================== ==========
119
119
 
120
120
  The changelog for the provider package can be found in the
121
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/8.4.0/changelog.html>`_.
121
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/8.5.0/changelog.html>`_.
@@ -27,7 +27,7 @@ import packaging.version
27
27
 
28
28
  __all__ = ["__version__"]
29
29
 
30
- __version__ = "8.4.0"
30
+ __version__ = "8.5.0"
31
31
 
32
32
  try:
33
33
  from airflow import __version__ as airflow_version
@@ -16,7 +16,7 @@
16
16
  # under the License.
17
17
  from __future__ import annotations
18
18
 
19
- from typing import TYPE_CHECKING
19
+ from typing import TYPE_CHECKING, Any
20
20
 
21
21
  from airflow.hooks.base import BaseHook
22
22
  from airflow.providers.microsoft.azure.utils import get_field
@@ -27,7 +27,7 @@ if TYPE_CHECKING:
27
27
  schemes = ["abfs", "abfss", "adl"]
28
28
 
29
29
 
30
- def get_fs(conn_id: str | None) -> AbstractFileSystem:
30
+ def get_fs(conn_id: str | None, storage_options: dict[str, Any] | None = None) -> AbstractFileSystem:
31
31
  from adlfs import AzureBlobFileSystem
32
32
 
33
33
  if conn_id is None:
@@ -36,24 +36,13 @@ def get_fs(conn_id: str | None) -> AbstractFileSystem:
36
36
  conn = BaseHook.get_connection(conn_id)
37
37
  extras = conn.extra_dejson
38
38
 
39
- connection_string = get_field(
40
- conn_id=conn_id, conn_type="azure_data_lake", extras=extras, field_name="connection_string"
41
- )
42
- account_name = get_field(
43
- conn_id=conn_id, conn_type="azure_data_lake", extras=extras, field_name="account_name"
44
- )
45
- account_key = get_field(
46
- conn_id=conn_id, conn_type="azure_data_lake", extras=extras, field_name="account_key"
47
- )
48
- sas_token = get_field(conn_id=conn_id, conn_type="azure_data_lake", extras=extras, field_name="sas_token")
49
- tenant = get_field(conn_id=conn_id, conn_type="azure_data_lake", extras=extras, field_name="tenant")
50
-
51
- return AzureBlobFileSystem(
52
- connection_string=connection_string,
53
- account_name=account_name,
54
- account_key=account_key,
55
- sas_token=sas_token,
56
- tenant_id=tenant,
57
- client_id=conn.login,
58
- client_secret=conn.password,
59
- )
39
+ options = {}
40
+ fields = ["connection_string", "account_name", "account_key", "sas_token", "tenant"]
41
+ for field in fields:
42
+ options[field] = get_field(
43
+ conn_id=conn_id, conn_type="azure_data_lake", extras=extras, field_name=field
44
+ )
45
+
46
+ options.update(storage_options or {})
47
+
48
+ return AzureBlobFileSystem(**options)
@@ -28,8 +28,9 @@ def get_provider_info():
28
28
  "name": "Microsoft Azure",
29
29
  "description": "`Microsoft Azure <https://azure.microsoft.com/>`__\n",
30
30
  "suspended": False,
31
- "source-date-epoch": 1701983392,
31
+ "source-date-epoch": 1703288146,
32
32
  "versions": [
33
+ "8.5.0",
33
34
  "8.4.0",
34
35
  "8.3.0",
35
36
  "8.2.0",
@@ -45,9 +45,9 @@ class BaseAzureServiceBusHook(BaseHook):
45
45
  conn_type = "azure_service_bus"
46
46
  hook_name = "Azure Service Bus"
47
47
 
48
- @staticmethod
48
+ @classmethod
49
49
  @add_managed_identity_connection_widgets
50
- def get_connection_form_widgets() -> dict[str, Any]:
50
+ def get_connection_form_widgets(cls) -> dict[str, Any]:
51
51
  """Returns connection widgets to add to connection form."""
52
52
  from flask_appbuilder.fieldwidgets import BS3TextFieldWidget
53
53
  from flask_babel import lazy_gettext
@@ -60,8 +60,8 @@ class BaseAzureServiceBusHook(BaseHook):
60
60
  "credential": PasswordField(lazy_gettext("Credential"), widget=BS3TextFieldWidget()),
61
61
  }
62
62
 
63
- @staticmethod
64
- def get_ui_field_behaviour() -> dict[str, Any]:
63
+ @classmethod
64
+ def get_ui_field_behaviour(cls) -> dict[str, Any]:
65
65
  """Returns custom field behaviour."""
66
66
  return {
67
67
  "hidden_fields": ["port", "host", "extra", "login", "password"],
@@ -47,9 +47,9 @@ class AzureBaseHook(BaseHook):
47
47
  conn_type = "azure"
48
48
  hook_name = "Azure"
49
49
 
50
- @staticmethod
50
+ @classmethod
51
51
  @add_managed_identity_connection_widgets
52
- def get_connection_form_widgets() -> dict[str, Any]:
52
+ def get_connection_form_widgets(cls) -> dict[str, Any]:
53
53
  """Returns connection widgets to add to connection form."""
54
54
  from flask_appbuilder.fieldwidgets import BS3TextFieldWidget
55
55
  from flask_babel import lazy_gettext
@@ -60,8 +60,8 @@ class AzureBaseHook(BaseHook):
60
60
  "subscriptionId": StringField(lazy_gettext("Azure Subscription ID"), widget=BS3TextFieldWidget()),
61
61
  }
62
62
 
63
- @staticmethod
64
- def get_ui_field_behaviour() -> dict[str, Any]:
63
+ @classmethod
64
+ def get_ui_field_behaviour(cls) -> dict[str, Any]:
65
65
  """Returns custom field behaviour."""
66
66
  import json
67
67
 
@@ -46,9 +46,9 @@ class AzureContainerRegistryHook(BaseHook):
46
46
  conn_type = "azure_container_registry"
47
47
  hook_name = "Azure Container Registry"
48
48
 
49
- @staticmethod
49
+ @classmethod
50
50
  @add_managed_identity_connection_widgets
51
- def get_connection_form_widgets() -> dict[str, Any]:
51
+ def get_connection_form_widgets(cls) -> dict[str, Any]:
52
52
  """Returns connection widgets to add to connection form."""
53
53
  from flask_appbuilder.fieldwidgets import BS3TextFieldWidget
54
54
  from flask_babel import lazy_gettext
@@ -43,9 +43,9 @@ class AzureContainerVolumeHook(BaseHook):
43
43
  conn_type = "azure_container_volume"
44
44
  hook_name = "Azure Container Volume"
45
45
 
46
- @staticmethod
46
+ @classmethod
47
47
  @add_managed_identity_connection_widgets
48
- def get_connection_form_widgets() -> dict[str, Any]:
48
+ def get_connection_form_widgets(cls) -> dict[str, Any]:
49
49
  """Returns connection widgets to add to connection form."""
50
50
  from flask_appbuilder.fieldwidgets import BS3PasswordFieldWidget, BS3TextFieldWidget
51
51
  from flask_babel import lazy_gettext
@@ -65,8 +65,8 @@ class AzureContainerVolumeHook(BaseHook):
65
65
  ),
66
66
  }
67
67
 
68
- @staticmethod
69
- def get_ui_field_behaviour() -> dict[str, Any]:
68
+ @classmethod
69
+ def get_ui_field_behaviour(cls) -> dict[str, Any]:
70
70
  """Returns custom field behaviour."""
71
71
  return {
72
72
  "hidden_fields": ["schema", "port", "host", "extra"],
@@ -59,9 +59,9 @@ class AzureCosmosDBHook(BaseHook):
59
59
  conn_type = "azure_cosmos"
60
60
  hook_name = "Azure CosmosDB"
61
61
 
62
- @staticmethod
62
+ @classmethod
63
63
  @add_managed_identity_connection_widgets
64
- def get_connection_form_widgets() -> dict[str, Any]:
64
+ def get_connection_form_widgets(cls) -> dict[str, Any]:
65
65
  """Returns connection widgets to add to connection form."""
66
66
  from flask_appbuilder.fieldwidgets import BS3TextFieldWidget
67
67
  from flask_babel import lazy_gettext
@@ -84,8 +84,8 @@ class AzureCosmosDBHook(BaseHook):
84
84
  ),
85
85
  }
86
86
 
87
- @staticmethod
88
- def get_ui_field_behaviour() -> dict[str, Any]:
87
+ @classmethod
88
+ def get_ui_field_behaviour(cls) -> dict[str, Any]:
89
89
  """Returns custom field behaviour."""
90
90
  return {
91
91
  "hidden_fields": ["schema", "port", "host", "extra"],
@@ -156,9 +156,9 @@ class AzureDataFactoryHook(BaseHook):
156
156
  default_conn_name: str = "azure_data_factory_default"
157
157
  hook_name: str = "Azure Data Factory"
158
158
 
159
- @staticmethod
159
+ @classmethod
160
160
  @add_managed_identity_connection_widgets
161
- def get_connection_form_widgets() -> dict[str, Any]:
161
+ def get_connection_form_widgets(cls) -> dict[str, Any]:
162
162
  """Returns connection widgets to add to connection form."""
163
163
  from flask_appbuilder.fieldwidgets import BS3TextFieldWidget
164
164
  from flask_babel import lazy_gettext
@@ -173,8 +173,8 @@ class AzureDataFactoryHook(BaseHook):
173
173
  "factory_name": StringField(lazy_gettext("Factory Name"), widget=BS3TextFieldWidget()),
174
174
  }
175
175
 
176
- @staticmethod
177
- def get_ui_field_behaviour() -> dict[str, Any]:
176
+ @classmethod
177
+ def get_ui_field_behaviour(cls) -> dict[str, Any]:
178
178
  """Returns custom field behaviour."""
179
179
  return {
180
180
  "hidden_fields": ["schema", "port", "host", "extra"],
@@ -65,9 +65,9 @@ class AzureDataLakeHook(BaseHook):
65
65
  conn_type = "azure_data_lake"
66
66
  hook_name = "Azure Data Lake"
67
67
 
68
- @staticmethod
68
+ @classmethod
69
69
  @add_managed_identity_connection_widgets
70
- def get_connection_form_widgets() -> dict[str, Any]:
70
+ def get_connection_form_widgets(cls) -> dict[str, Any]:
71
71
  """Returns connection widgets to add to connection form."""
72
72
  from flask_appbuilder.fieldwidgets import BS3TextFieldWidget
73
73
  from flask_babel import lazy_gettext
@@ -80,8 +80,8 @@ class AzureDataLakeHook(BaseHook):
80
80
  ),
81
81
  }
82
82
 
83
- @staticmethod
84
- def get_ui_field_behaviour() -> dict[str, Any]:
83
+ @classmethod
84
+ def get_ui_field_behaviour(cls) -> dict[str, Any]:
85
85
  """Returns custom field behaviour."""
86
86
  return {
87
87
  "hidden_fields": ["schema", "port", "host", "extra"],
@@ -42,9 +42,9 @@ class AzureFileShareHook(BaseHook):
42
42
  conn_type = "azure_fileshare"
43
43
  hook_name = "Azure FileShare"
44
44
 
45
- @staticmethod
45
+ @classmethod
46
46
  @add_managed_identity_connection_widgets
47
- def get_connection_form_widgets() -> dict[str, Any]:
47
+ def get_connection_form_widgets(cls) -> dict[str, Any]:
48
48
  """Returns connection widgets to add to connection form."""
49
49
  from flask_appbuilder.fieldwidgets import BS3PasswordFieldWidget, BS3TextFieldWidget
50
50
  from flask_babel import lazy_gettext
@@ -57,8 +57,8 @@ class AzureFileShareHook(BaseHook):
57
57
  ),
58
58
  }
59
59
 
60
- @staticmethod
61
- def get_ui_field_behaviour() -> dict[str, Any]:
60
+ @classmethod
61
+ def get_ui_field_behaviour(cls) -> dict[str, Any]:
62
62
  """Returns custom field behaviour."""
63
63
  return {
64
64
  "hidden_fields": ["schema", "port", "host", "extra"],
@@ -135,6 +135,7 @@ class AzureFileShareHook(BaseHook):
135
135
 
136
136
  @property
137
137
  def share_directory_client(self):
138
+ self.get_conn()
138
139
  if self._connection_string:
139
140
  return ShareDirectoryClient.from_connection_string(
140
141
  conn_str=self._connection_string,
@@ -160,6 +161,7 @@ class AzureFileShareHook(BaseHook):
160
161
 
161
162
  @property
162
163
  def share_file_client(self):
164
+ self.get_conn()
163
165
  if self._connection_string:
164
166
  return ShareFileClient.from_connection_string(
165
167
  conn_str=self._connection_string,
@@ -69,9 +69,9 @@ class AzureSynapseHook(BaseHook):
69
69
  default_conn_name: str = "azure_synapse_default"
70
70
  hook_name: str = "Azure Synapse"
71
71
 
72
- @staticmethod
72
+ @classmethod
73
73
  @add_managed_identity_connection_widgets
74
- def get_connection_form_widgets() -> dict[str, Any]:
74
+ def get_connection_form_widgets(cls) -> dict[str, Any]:
75
75
  """Returns connection widgets to add to connection form."""
76
76
  from flask_appbuilder.fieldwidgets import BS3TextFieldWidget
77
77
  from flask_babel import lazy_gettext
@@ -82,8 +82,8 @@ class AzureSynapseHook(BaseHook):
82
82
  "subscriptionId": StringField(lazy_gettext("Subscription ID"), widget=BS3TextFieldWidget()),
83
83
  }
84
84
 
85
- @staticmethod
86
- def get_ui_field_behaviour() -> dict[str, Any]:
85
+ @classmethod
86
+ def get_ui_field_behaviour(cls) -> dict[str, Any]:
87
87
  """Returns custom field behaviour."""
88
88
  return {
89
89
  "hidden_fields": ["schema", "port", "extra"],
@@ -253,8 +253,8 @@ class AzureSynapsePipelineHook(BaseHook):
253
253
  default_conn_name: str = "azure_synapse_connection"
254
254
  hook_name: str = "Azure Synapse Pipeline"
255
255
 
256
- @staticmethod
257
- def get_connection_form_widgets() -> dict[str, Any]:
256
+ @classmethod
257
+ def get_connection_form_widgets(cls) -> dict[str, Any]:
258
258
  """Returns connection widgets to add to connection form."""
259
259
  from flask_appbuilder.fieldwidgets import BS3TextFieldWidget
260
260
  from flask_babel import lazy_gettext
@@ -264,8 +264,8 @@ class AzureSynapsePipelineHook(BaseHook):
264
264
  "tenantId": StringField(lazy_gettext("Tenant ID"), widget=BS3TextFieldWidget()),
265
265
  }
266
266
 
267
- @staticmethod
268
- def get_ui_field_behaviour() -> dict[str, Any]:
267
+ @classmethod
268
+ def get_ui_field_behaviour(cls) -> dict[str, Any]:
269
269
  """Returns custom field behaviour."""
270
270
  return {
271
271
  "hidden_fields": ["schema", "port", "extra"],
@@ -81,9 +81,9 @@ class WasbHook(BaseHook):
81
81
  conn_type = "wasb"
82
82
  hook_name = "Azure Blob Storage"
83
83
 
84
- @staticmethod
84
+ @classmethod
85
85
  @add_managed_identity_connection_widgets
86
- def get_connection_form_widgets() -> dict[str, Any]:
86
+ def get_connection_form_widgets(cls) -> dict[str, Any]:
87
87
  """Returns connection widgets to add to connection form."""
88
88
  from flask_appbuilder.fieldwidgets import BS3PasswordFieldWidget, BS3TextFieldWidget
89
89
  from flask_babel import lazy_gettext
@@ -102,8 +102,8 @@ class WasbHook(BaseHook):
102
102
  "sas_token": PasswordField(lazy_gettext("SAS Token (optional)"), widget=BS3PasswordFieldWidget()),
103
103
  }
104
104
 
105
- @staticmethod
106
- def get_ui_field_behaviour() -> dict[str, Any]:
105
+ @classmethod
106
+ def get_ui_field_behaviour(cls) -> dict[str, Any]:
107
107
  """Returns custom field behaviour."""
108
108
  return {
109
109
  "hidden_fields": ["schema", "port"],
@@ -78,9 +78,9 @@ class ADLSListOperator(BaseOperator):
78
78
  folder in the specified ADLS account ::
79
79
 
80
80
  adls_files = ADLSListOperator(
81
- task_id='adls_files',
82
- path='folder/output/*.parquet',
83
- azure_data_lake_conn_id='azure_data_lake_default'
81
+ task_id="adls_files",
82
+ path="folder/output/*.parquet",
83
+ azure_data_lake_conn_id="azure_data_lake_default",
84
84
  )
85
85
  """
86
86
 
@@ -93,29 +93,29 @@ class AzureContainerInstancesOperator(BaseOperator):
93
93
 
94
94
  **Example**::
95
95
 
96
- AzureContainerInstancesOperator(
97
- ci_conn_id = "azure_service_principal",
98
- registry_conn_id = "azure_registry_user",
99
- resource_group = "my-resource-group",
100
- name = "my-container-name-{{ ds }}",
101
- image = "myprivateregistry.azurecr.io/my_container:latest",
102
- region = "westeurope",
103
- environment_variables = {"MODEL_PATH": "my_value",
104
- "POSTGRES_LOGIN": "{{ macros.connection('postgres_default').login }}",
105
- "POSTGRES_PASSWORD": "{{ macros.connection('postgres_default').password }}",
106
- "JOB_GUID": "{{ ti.xcom_pull(task_ids='task1', key='guid') }}" },
107
- secured_variables = ['POSTGRES_PASSWORD'],
108
- volumes = [("azure_container_instance_conn_id",
109
- "my_storage_container",
110
- "my_fileshare",
111
- "/input-data",
112
- True),],
113
- memory_in_gb=14.0,
114
- cpu=4.0,
115
- gpu=GpuResource(count=1, sku='K80'),
116
- command=["/bin/echo", "world"],
117
- task_id="start_container"
118
- )
96
+ AzureContainerInstancesOperator(
97
+ ci_conn_id="azure_service_principal",
98
+ registry_conn_id="azure_registry_user",
99
+ resource_group="my-resource-group",
100
+ name="my-container-name-{{ ds }}",
101
+ image="myprivateregistry.azurecr.io/my_container:latest",
102
+ region="westeurope",
103
+ environment_variables={
104
+ "MODEL_PATH": "my_value",
105
+ "POSTGRES_LOGIN": "{{ macros.connection('postgres_default').login }}",
106
+ "POSTGRES_PASSWORD": "{{ macros.connection('postgres_default').password }}",
107
+ "JOB_GUID": "{{ ti.xcom_pull(task_ids='task1', key='guid') }}",
108
+ },
109
+ secured_variables=["POSTGRES_PASSWORD"],
110
+ volumes=[
111
+ ("azure_container_instance_conn_id", "my_storage_container", "my_fileshare", "/input-data", True),
112
+ ],
113
+ memory_in_gb=14.0,
114
+ cpu=4.0,
115
+ gpu=GpuResource(count=1, sku="K80"),
116
+ command=["/bin/echo", "world"],
117
+ task_id="start_container",
118
+ )
119
119
  """
120
120
 
121
121
  template_fields: Sequence[str] = ("name", "image", "command", "environment_variables", "volumes")
@@ -28,7 +28,7 @@ build-backend = "flit_core.buildapi"
28
28
 
29
29
  [project]
30
30
  name = "apache-airflow-providers-microsoft-azure"
31
- version = "8.4.0.rc1"
31
+ version = "8.5.0"
32
32
  description = "Provider package apache-airflow-providers-microsoft-azure for Apache Airflow"
33
33
  readme = "README.rst"
34
34
  authors = [
@@ -57,7 +57,7 @@ requires-python = "~=3.8"
57
57
  dependencies = [
58
58
  "adal>=1.2.7",
59
59
  "adlfs>=2023.10.0",
60
- "apache-airflow>=2.6.0.dev0",
60
+ "apache-airflow>=2.6.0",
61
61
  "azure-batch>=8.0.0",
62
62
  "azure-cosmos>=4.0.0",
63
63
  "azure-datalake-store>=0.0.45",
@@ -80,8 +80,8 @@ dependencies = [
80
80
  ]
81
81
 
82
82
  [project.urls]
83
- "Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/8.4.0"
84
- "Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/8.4.0/changelog.html"
83
+ "Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/8.5.0"
84
+ "Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/8.5.0/changelog.html"
85
85
  "Bug Tracker" = "https://github.com/apache/airflow/issues"
86
86
  "Source Code" = "https://github.com/apache/airflow"
87
87
  "Slack Chat" = "https://s.apache.org/airflow-slack"