apache-airflow-providers-microsoft-azure 11.1.0__tar.gz → 12.0.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 (58) hide show
  1. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/PKG-INFO +21 -21
  2. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/README.rst +13 -13
  3. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/__init__.py +3 -3
  4. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/get_provider_info.py +8 -9
  5. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/hooks/adx.py +1 -9
  6. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/hooks/base_azure.py +1 -19
  7. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/hooks/container_instance.py +1 -42
  8. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/hooks/cosmos.py +2 -2
  9. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/hooks/data_factory.py +1 -10
  10. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/hooks/msgraph.py +48 -0
  11. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/hooks/powerbi.py +1 -0
  12. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/hooks/synapse.py +1 -9
  13. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/operators/adls.py +2 -1
  14. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/operators/adx.py +4 -10
  15. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/operators/asb.py +2 -1
  16. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/operators/batch.py +3 -8
  17. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/operators/container_instances.py +2 -1
  18. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/operators/cosmos.py +2 -1
  19. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/operators/data_factory.py +2 -1
  20. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/operators/msgraph.py +2 -2
  21. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/operators/powerbi.py +3 -4
  22. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/operators/synapse.py +2 -1
  23. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/operators/wasb_delete_blob.py +2 -1
  24. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/secrets/key_vault.py +0 -20
  25. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/sensors/cosmos.py +2 -1
  26. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/sensors/data_factory.py +2 -1
  27. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/sensors/msgraph.py +3 -2
  28. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/sensors/wasb.py +3 -34
  29. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/transfers/local_to_adls.py +2 -1
  30. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/transfers/local_to_wasb.py +2 -1
  31. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/transfers/oracle_to_azure_data_lake.py +2 -1
  32. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/transfers/s3_to_wasb.py +2 -1
  33. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/transfers/sftp_to_wasb.py +2 -1
  34. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/triggers/data_factory.py +2 -1
  35. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/triggers/msgraph.py +1 -2
  36. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/triggers/powerbi.py +17 -14
  37. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/triggers/wasb.py +2 -1
  38. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/pyproject.toml +8 -8
  39. apache_airflow_providers_microsoft_azure-11.1.0/airflow/providers/microsoft/azure/transfers/azure_blob_to_gcs.py +0 -44
  40. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/LICENSE +0 -0
  41. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/fs/__init__.py +0 -0
  42. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/fs/adls.py +0 -0
  43. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/hooks/__init__.py +0 -0
  44. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/hooks/asb.py +0 -0
  45. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/hooks/batch.py +0 -0
  46. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/hooks/container_registry.py +0 -0
  47. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/hooks/container_volume.py +0 -0
  48. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/hooks/data_lake.py +0 -0
  49. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/hooks/fileshare.py +0 -0
  50. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/hooks/wasb.py +0 -0
  51. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/log/__init__.py +0 -0
  52. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/log/wasb_task_handler.py +0 -0
  53. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/operators/__init__.py +0 -0
  54. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/secrets/__init__.py +0 -0
  55. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/sensors/__init__.py +0 -0
  56. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/transfers/__init__.py +0 -0
  57. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/triggers/__init__.py +0 -0
  58. {apache_airflow_providers_microsoft_azure-11.1.0 → apache_airflow_providers_microsoft_azure-12.0.0}/airflow/providers/microsoft/azure/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: apache-airflow-providers-microsoft-azure
3
- Version: 11.1.0
3
+ Version: 12.0.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.12
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.8.0
25
+ Requires-Dist: apache-airflow>=2.9.0
26
26
  Requires-Dist: azure-batch>=8.0.0
27
27
  Requires-Dist: azure-cosmos>=4.6.0
28
28
  Requires-Dist: azure-datalake-store>=0.0.45
@@ -46,20 +46,20 @@ Requires-Dist: microsoft-kiota-abstractions<1.4.0
46
46
  Requires-Dist: microsoft-kiota-http>=1.3.0,!=1.3.4
47
47
  Requires-Dist: microsoft-kiota-serialization-json==1.0.0
48
48
  Requires-Dist: microsoft-kiota-serialization-text==1.0.0
49
- Requires-Dist: msgraph-core>=1.0.0
49
+ Requires-Dist: msgraph-core>=1.0.0,!=1.1.8
50
50
  Requires-Dist: apache-airflow-providers-amazon ; extra == "amazon"
51
- Requires-Dist: apache-airflow-providers-google ; extra == "google"
51
+ Requires-Dist: apache-airflow-providers-common-compat ; extra == "common-compat"
52
52
  Requires-Dist: apache-airflow-providers-oracle ; extra == "oracle"
53
53
  Requires-Dist: apache-airflow-providers-sftp ; extra == "sftp"
54
54
  Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
55
- Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/11.1.0/changelog.html
56
- Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/11.1.0
55
+ Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/12.0.0/changelog.html
56
+ Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/12.0.0
57
57
  Project-URL: Slack Chat, https://s.apache.org/airflow-slack
58
58
  Project-URL: Source Code, https://github.com/apache/airflow
59
- Project-URL: Twitter, https://twitter.com/ApacheAirflow
59
+ Project-URL: Twitter, https://x.com/ApacheAirflow
60
60
  Project-URL: YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/
61
61
  Provides-Extra: amazon
62
- Provides-Extra: google
62
+ Provides-Extra: common-compat
63
63
  Provides-Extra: oracle
64
64
  Provides-Extra: sftp
65
65
 
@@ -107,7 +107,7 @@ Provides-Extra: sftp
107
107
 
108
108
  Package ``apache-airflow-providers-microsoft-azure``
109
109
 
110
- Release: ``11.1.0``
110
+ Release: ``12.0.0``
111
111
 
112
112
 
113
113
  `Microsoft Azure <https://azure.microsoft.com/>`__
@@ -120,7 +120,7 @@ This is a provider package for ``microsoft.azure`` provider. All classes for thi
120
120
  are in ``airflow.providers.microsoft.azure`` python package.
121
121
 
122
122
  You can find package information and changelog for the provider
123
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/11.1.0/>`_.
123
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/12.0.0/>`_.
124
124
 
125
125
  Installation
126
126
  ------------
@@ -137,7 +137,7 @@ Requirements
137
137
  ====================================== ===================
138
138
  PIP package Version required
139
139
  ====================================== ===================
140
- ``apache-airflow`` ``>=2.8.0``
140
+ ``apache-airflow`` ``>=2.9.0``
141
141
  ``adlfs`` ``>=2023.10.0``
142
142
  ``azure-batch`` ``>=8.0.0``
143
143
  ``azure-cosmos`` ``>=4.6.0``
@@ -159,7 +159,7 @@ PIP package Version required
159
159
  ``azure-mgmt-datafactory`` ``>=2.0.0``
160
160
  ``azure-mgmt-containerregistry`` ``>=8.0.0``
161
161
  ``azure-mgmt-containerinstance`` ``>=10.1.0``
162
- ``msgraph-core`` ``>=1.0.0``
162
+ ``msgraph-core`` ``>=1.0.0,!=1.1.8``
163
163
  ``microsoft-kiota-http`` ``>=1.3.0,!=1.3.4``
164
164
  ``microsoft-kiota-serialization-json`` ``==1.0.0``
165
165
  ``microsoft-kiota-serialization-text`` ``==1.0.0``
@@ -179,14 +179,14 @@ You can install such cross-provider dependencies when installing from PyPI. For
179
179
  pip install apache-airflow-providers-microsoft-azure[amazon]
180
180
 
181
181
 
182
- ==================================================================================================== ==========
183
- Dependent package Extra
184
- ==================================================================================================== ==========
185
- `apache-airflow-providers-amazon <https://airflow.apache.org/docs/apache-airflow-providers-amazon>`_ ``amazon``
186
- `apache-airflow-providers-google <https://airflow.apache.org/docs/apache-airflow-providers-google>`_ ``google``
187
- `apache-airflow-providers-oracle <https://airflow.apache.org/docs/apache-airflow-providers-oracle>`_ ``oracle``
188
- `apache-airflow-providers-sftp <https://airflow.apache.org/docs/apache-airflow-providers-sftp>`_ ``sftp``
189
- ==================================================================================================== ==========
182
+ ================================================================================================================== =================
183
+ Dependent package Extra
184
+ ================================================================================================================== =================
185
+ `apache-airflow-providers-amazon <https://airflow.apache.org/docs/apache-airflow-providers-amazon>`_ ``amazon``
186
+ `apache-airflow-providers-common-compat <https://airflow.apache.org/docs/apache-airflow-providers-common-compat>`_ ``common.compat``
187
+ `apache-airflow-providers-oracle <https://airflow.apache.org/docs/apache-airflow-providers-oracle>`_ ``oracle``
188
+ `apache-airflow-providers-sftp <https://airflow.apache.org/docs/apache-airflow-providers-sftp>`_ ``sftp``
189
+ ================================================================================================================== =================
190
190
 
191
191
  The changelog for the provider package can be found in the
192
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/11.1.0/changelog.html>`_.
192
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/12.0.0/changelog.html>`_.
@@ -42,7 +42,7 @@
42
42
 
43
43
  Package ``apache-airflow-providers-microsoft-azure``
44
44
 
45
- Release: ``11.1.0``
45
+ Release: ``12.0.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/11.1.0/>`_.
58
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/12.0.0/>`_.
59
59
 
60
60
  Installation
61
61
  ------------
@@ -72,7 +72,7 @@ Requirements
72
72
  ====================================== ===================
73
73
  PIP package Version required
74
74
  ====================================== ===================
75
- ``apache-airflow`` ``>=2.8.0``
75
+ ``apache-airflow`` ``>=2.9.0``
76
76
  ``adlfs`` ``>=2023.10.0``
77
77
  ``azure-batch`` ``>=8.0.0``
78
78
  ``azure-cosmos`` ``>=4.6.0``
@@ -94,7 +94,7 @@ PIP package Version required
94
94
  ``azure-mgmt-datafactory`` ``>=2.0.0``
95
95
  ``azure-mgmt-containerregistry`` ``>=8.0.0``
96
96
  ``azure-mgmt-containerinstance`` ``>=10.1.0``
97
- ``msgraph-core`` ``>=1.0.0``
97
+ ``msgraph-core`` ``>=1.0.0,!=1.1.8``
98
98
  ``microsoft-kiota-http`` ``>=1.3.0,!=1.3.4``
99
99
  ``microsoft-kiota-serialization-json`` ``==1.0.0``
100
100
  ``microsoft-kiota-serialization-text`` ``==1.0.0``
@@ -114,14 +114,14 @@ You can install such cross-provider dependencies when installing from PyPI. For
114
114
  pip install apache-airflow-providers-microsoft-azure[amazon]
115
115
 
116
116
 
117
- ==================================================================================================== ==========
118
- Dependent package Extra
119
- ==================================================================================================== ==========
120
- `apache-airflow-providers-amazon <https://airflow.apache.org/docs/apache-airflow-providers-amazon>`_ ``amazon``
121
- `apache-airflow-providers-google <https://airflow.apache.org/docs/apache-airflow-providers-google>`_ ``google``
122
- `apache-airflow-providers-oracle <https://airflow.apache.org/docs/apache-airflow-providers-oracle>`_ ``oracle``
123
- `apache-airflow-providers-sftp <https://airflow.apache.org/docs/apache-airflow-providers-sftp>`_ ``sftp``
124
- ==================================================================================================== ==========
117
+ ================================================================================================================== =================
118
+ Dependent package Extra
119
+ ================================================================================================================== =================
120
+ `apache-airflow-providers-amazon <https://airflow.apache.org/docs/apache-airflow-providers-amazon>`_ ``amazon``
121
+ `apache-airflow-providers-common-compat <https://airflow.apache.org/docs/apache-airflow-providers-common-compat>`_ ``common.compat``
122
+ `apache-airflow-providers-oracle <https://airflow.apache.org/docs/apache-airflow-providers-oracle>`_ ``oracle``
123
+ `apache-airflow-providers-sftp <https://airflow.apache.org/docs/apache-airflow-providers-sftp>`_ ``sftp``
124
+ ================================================================================================================== =================
125
125
 
126
126
  The changelog for the provider package can be found in the
127
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/11.1.0/changelog.html>`_.
127
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/12.0.0/changelog.html>`_.
@@ -29,11 +29,11 @@ from airflow import __version__ as airflow_version
29
29
 
30
30
  __all__ = ["__version__"]
31
31
 
32
- __version__ = "11.1.0"
32
+ __version__ = "12.0.0"
33
33
 
34
34
  if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
35
- "2.8.0"
35
+ "2.9.0"
36
36
  ):
37
37
  raise RuntimeError(
38
- f"The package `apache-airflow-providers-microsoft-azure:{__version__}` needs Apache Airflow 2.8.0+"
38
+ f"The package `apache-airflow-providers-microsoft-azure:{__version__}` needs Apache Airflow 2.9.0+"
39
39
  )
@@ -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
  "state": "ready",
31
- "source-date-epoch": 1731570356,
31
+ "source-date-epoch": 1734535249,
32
32
  "versions": [
33
+ "12.0.0",
33
34
  "11.1.0",
34
35
  "11.0.0",
35
36
  "10.5.1",
@@ -93,7 +94,7 @@ def get_provider_info():
93
94
  "1.0.0",
94
95
  ],
95
96
  "dependencies": [
96
- "apache-airflow>=2.8.0",
97
+ "apache-airflow>=2.9.0",
97
98
  "adlfs>=2023.10.0",
98
99
  "azure-batch>=8.0.0",
99
100
  "azure-cosmos>=4.6.0",
@@ -115,7 +116,7 @@ def get_provider_info():
115
116
  "azure-mgmt-datafactory>=2.0.0",
116
117
  "azure-mgmt-containerregistry>=8.0.0",
117
118
  "azure-mgmt-containerinstance>=10.1.0",
118
- "msgraph-core>=1.0.0",
119
+ "msgraph-core>=1.0.0,!=1.1.8",
119
120
  "microsoft-kiota-http>=1.3.0,!=1.3.4",
120
121
  "microsoft-kiota-serialization-json==1.0.0",
121
122
  "microsoft-kiota-serialization-text==1.0.0",
@@ -398,12 +399,6 @@ def get_provider_info():
398
399
  "how-to-guide": "/docs/apache-airflow-providers-microsoft-azure/transfer/s3_to_wasb.rst",
399
400
  "python-module": "airflow.providers.microsoft.azure.transfers.s3_to_wasb",
400
401
  },
401
- {
402
- "source-integration-name": "Microsoft Azure Blob Storage",
403
- "target-integration-name": "Google Cloud Storage (GCS)",
404
- "how-to-guide": "/docs/apache-airflow-providers-microsoft-azure/transfer/azure_blob_to_gcs.rst",
405
- "python-module": "airflow.providers.microsoft.azure.transfers.azure_blob_to_gcs",
406
- },
407
402
  ],
408
403
  "connection-types": [
409
404
  {
@@ -462,6 +457,10 @@ def get_provider_info():
462
457
  "hook-class-name": "airflow.providers.microsoft.azure.hooks.data_lake.AzureDataLakeStorageV2Hook",
463
458
  "connection-type": "adls",
464
459
  },
460
+ {
461
+ "hook-class-name": "airflow.providers.microsoft.azure.hooks.msgraph.KiotaRequestAdapterHook",
462
+ "connection-type": "msgraph",
463
+ },
465
464
  {
466
465
  "hook-class-name": "airflow.providers.microsoft.azure.hooks.powerbi.PowerBIHook",
467
466
  "connection-type": "powerbi",
@@ -33,7 +33,7 @@ from typing import TYPE_CHECKING, Any
33
33
  from azure.kusto.data import ClientRequestProperties, KustoClient, KustoConnectionStringBuilder
34
34
  from azure.kusto.data.exceptions import KustoServiceError
35
35
 
36
- from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning
36
+ from airflow.exceptions import AirflowException
37
37
  from airflow.hooks.base import BaseHook
38
38
  from airflow.providers.microsoft.azure.utils import (
39
39
  add_managed_identity_connection_widgets,
@@ -161,14 +161,6 @@ class AzureDataExplorerHook(BaseHook):
161
161
  value = extras.get(name)
162
162
  if value:
163
163
  warn_if_collison(name, backcompat_key)
164
- if not value and extras.get(backcompat_key):
165
- warnings.warn(
166
- f"`{backcompat_key}` is deprecated in azure connection extra,"
167
- f" please use `{name}` instead",
168
- AirflowProviderDeprecationWarning,
169
- stacklevel=2,
170
- )
171
- value = extras.get(backcompat_key)
172
164
  if not value:
173
165
  raise AirflowException(f"Required connection parameter is missing: `{name}`")
174
166
  return value
@@ -16,13 +16,12 @@
16
16
  # under the License.
17
17
  from __future__ import annotations
18
18
 
19
- import warnings
20
19
  from typing import Any
21
20
 
22
21
  from azure.common.client_factory import get_client_from_auth_file, get_client_from_json_dict
23
22
  from azure.common.credentials import ServicePrincipalCredentials
24
23
 
25
- from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning
24
+ from airflow.exceptions import AirflowException
26
25
  from airflow.hooks.base import BaseHook
27
26
  from airflow.providers.microsoft.azure.utils import (
28
27
  AzureIdentityCredentialAdapter,
@@ -99,24 +98,7 @@ class AzureBaseHook(BaseHook):
99
98
  """
100
99
  conn = self.get_connection(self.conn_id)
101
100
  tenant = conn.extra_dejson.get("tenantId")
102
- if not tenant and conn.extra_dejson.get("extra__azure__tenantId"):
103
- warnings.warn(
104
- "`extra__azure__tenantId` is deprecated in azure connection extra, "
105
- "please use `tenantId` instead",
106
- AirflowProviderDeprecationWarning,
107
- stacklevel=2,
108
- )
109
- tenant = conn.extra_dejson.get("extra__azure__tenantId")
110
101
  subscription_id = conn.extra_dejson.get("subscriptionId")
111
- if not subscription_id and conn.extra_dejson.get("extra__azure__subscriptionId"):
112
- warnings.warn(
113
- "`extra__azure__subscriptionId` is deprecated in azure connection extra, "
114
- "please use `subscriptionId` instead",
115
- AirflowProviderDeprecationWarning,
116
- stacklevel=2,
117
- )
118
- subscription_id = conn.extra_dejson.get("extra__azure__subscriptionId")
119
-
120
102
  key_path = conn.extra_dejson.get("key_path")
121
103
  if key_path:
122
104
  if not key_path.endswith(".json"):
@@ -23,18 +23,14 @@ from typing import TYPE_CHECKING, Any, cast
23
23
  from azure.common.client_factory import get_client_from_auth_file, get_client_from_json_dict
24
24
  from azure.identity import ClientSecretCredential, DefaultAzureCredential
25
25
  from azure.mgmt.containerinstance import ContainerInstanceManagementClient
26
- from deprecated import deprecated
27
26
 
28
- from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning
27
+ from airflow.exceptions import AirflowException
29
28
  from airflow.providers.microsoft.azure.hooks.base_azure import AzureBaseHook
30
29
  from airflow.providers.microsoft.azure.utils import get_sync_default_azure_credential
31
30
 
32
31
  if TYPE_CHECKING:
33
32
  from azure.mgmt.containerinstance.models import (
34
33
  ContainerGroup,
35
- ContainerPropertiesInstanceView,
36
- ContainerState,
37
- Event,
38
34
  )
39
35
 
40
36
 
@@ -116,43 +112,6 @@ class AzureContainerInstanceHook(AzureBaseHook):
116
112
  """
117
113
  self.connection.container_groups.begin_create_or_update(resource_group, name, container_group)
118
114
 
119
- @deprecated(
120
- reason="get_state_exitcode_details() is deprecated. Related method is get_state()",
121
- category=AirflowProviderDeprecationWarning,
122
- )
123
- def get_state_exitcode_details(self, resource_group: str, name: str) -> tuple:
124
- """
125
- Get the state and exitcode of a container group.
126
-
127
- :param resource_group: the name of the resource group
128
- :param name: the name of the container group
129
- :return: A tuple with the state, exitcode, and details.
130
- If the exitcode is unknown 0 is returned.
131
- """
132
- cg_state = self.get_state(resource_group, name)
133
- container = cg_state.containers[0]
134
- instance_view: ContainerPropertiesInstanceView = container.instance_view # type: ignore[assignment]
135
- c_state: ContainerState = instance_view.current_state # type: ignore[assignment]
136
- return c_state.state, c_state.exit_code, c_state.detail_status
137
-
138
- @deprecated(
139
- reason="get_messages() is deprecated. Related method is get_state()",
140
- category=AirflowProviderDeprecationWarning,
141
- )
142
- def get_messages(self, resource_group: str, name: str) -> list:
143
- """
144
- Get the messages of a container group.
145
-
146
- :param resource_group: the name of the resource group
147
- :param name: the name of the container group
148
- :return: A list of the event messages
149
- """
150
- cg_state = self.get_state(resource_group, name)
151
- container = cg_state.containers[0]
152
- instance_view: ContainerPropertiesInstanceView = container.instance_view # type: ignore[assignment]
153
- events: list[Event] = instance_view.events # type: ignore[assignment]
154
- return [event.message for event in events]
155
-
156
115
  def get_state(self, resource_group: str, name: str) -> ContainerGroup:
157
116
  """
158
117
  Get the state of a container group.
@@ -27,7 +27,7 @@ the default database and collection to use (see connection `azure_cosmos_default
27
27
  from __future__ import annotations
28
28
 
29
29
  import uuid
30
- from typing import TYPE_CHECKING, Any, List, Union
30
+ from typing import TYPE_CHECKING, Any, Union
31
31
  from urllib.parse import urlparse
32
32
 
33
33
  from azure.cosmos import PartitionKey
@@ -44,7 +44,7 @@ from airflow.providers.microsoft.azure.utils import (
44
44
  )
45
45
 
46
46
  if TYPE_CHECKING:
47
- PartitionKeyType = Union[str, List[str]]
47
+ PartitionKeyType = Union[str, list[str]]
48
48
 
49
49
 
50
50
  class AzureCosmosDBHook(BaseHook):
@@ -35,7 +35,6 @@ from __future__ import annotations
35
35
 
36
36
  import inspect
37
37
  import time
38
- import warnings
39
38
  from functools import wraps
40
39
  from typing import IO, TYPE_CHECKING, Any, Callable, TypeVar, Union, cast
41
40
 
@@ -48,7 +47,7 @@ from azure.identity.aio import (
48
47
  from azure.mgmt.datafactory import DataFactoryManagementClient
49
48
  from azure.mgmt.datafactory.aio import DataFactoryManagementClient as AsyncDataFactoryManagementClient
50
49
 
51
- from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning
50
+ from airflow.exceptions import AirflowException
52
51
  from airflow.hooks.base import BaseHook
53
52
  from airflow.providers.microsoft.azure.utils import (
54
53
  add_managed_identity_connection_widgets,
@@ -1095,14 +1094,6 @@ def provide_targeted_factory_async(func: T) -> T:
1095
1094
  default_value = extras.get(default_key) or extras.get(
1096
1095
  f"extra__azure_data_factory__{default_key}"
1097
1096
  )
1098
- if not default_value and extras.get(f"extra__azure_data_factory__{default_key}"):
1099
- warnings.warn(
1100
- f"`extra__azure_data_factory__{default_key}` is deprecated in azure connection extra,"
1101
- f" please use `{default_key}` instead",
1102
- AirflowProviderDeprecationWarning,
1103
- stacklevel=2,
1104
- )
1105
- default_value = extras.get(f"extra__azure_data_factory__{default_key}")
1106
1097
  if not default_value:
1107
1098
  raise AirflowException("Could not determine the targeted data factory.")
1108
1099
 
@@ -108,7 +108,10 @@ class KiotaRequestAdapterHook(BaseHook):
108
108
 
109
109
  DEFAULT_HEADERS = {"Accept": "application/json;q=1"}
110
110
  cached_request_adapters: dict[str, tuple[APIVersion, RequestAdapter]] = {}
111
+ conn_type: str = "msgraph"
112
+ conn_name_attr: str = "conn_id"
111
113
  default_conn_name: str = "msgraph_default"
114
+ hook_name: str = "Microsoft Graph API"
112
115
 
113
116
  def __init__(
114
117
  self,
@@ -127,6 +130,51 @@ class KiotaRequestAdapterHook(BaseHook):
127
130
  self.scopes = scopes or ["https://graph.microsoft.com/.default"]
128
131
  self._api_version = self.resolve_api_version_from_value(api_version)
129
132
 
133
+ @classmethod
134
+ def get_connection_form_widgets(cls) -> dict[str, Any]:
135
+ """Return connection widgets to add to connection form."""
136
+ from flask_appbuilder.fieldwidgets import BS3TextAreaFieldWidget, BS3TextFieldWidget
137
+ from flask_babel import lazy_gettext
138
+ from wtforms.fields import BooleanField, StringField
139
+
140
+ return {
141
+ "tenant_id": StringField(lazy_gettext("Tenant ID"), widget=BS3TextFieldWidget()),
142
+ "api_version": StringField(
143
+ lazy_gettext("API Version"), widget=BS3TextFieldWidget(), default="v1.0"
144
+ ),
145
+ "authority": StringField(lazy_gettext("Authority"), widget=BS3TextFieldWidget()),
146
+ "scopes": StringField(
147
+ lazy_gettext("Scopes"),
148
+ widget=BS3TextFieldWidget(),
149
+ default="https://graph.microsoft.com/.default",
150
+ ),
151
+ "disable_instance_discovery": BooleanField(
152
+ lazy_gettext("Disable instance discovery"), default=False
153
+ ),
154
+ "allowed_hosts": StringField(lazy_gettext("Allowed"), widget=BS3TextFieldWidget()),
155
+ "proxies": StringField(lazy_gettext("Proxies"), widget=BS3TextAreaFieldWidget()),
156
+ "stream": BooleanField(lazy_gettext("Stream"), default=False),
157
+ "verify": BooleanField(lazy_gettext("Verify"), default=True),
158
+ "trust_env": BooleanField(lazy_gettext("Trust environment"), default=True),
159
+ "base_url": StringField(lazy_gettext("Base URL"), widget=BS3TextFieldWidget()),
160
+ }
161
+
162
+ @classmethod
163
+ def get_ui_field_behaviour(cls) -> dict[str, Any]:
164
+ """Return custom field behaviour."""
165
+ return {
166
+ "hidden_fields": ["extra"],
167
+ "relabeling": {
168
+ "login": "Client ID",
169
+ "password": "Client Secret",
170
+ },
171
+ "default_values": {
172
+ "schema": "https",
173
+ "host": NationalClouds.Global.value,
174
+ "port": 443,
175
+ },
176
+ }
177
+
130
178
  @property
131
179
  def api_version(self) -> str | None:
132
180
  self.get_conn() # Make sure config has been loaded through get_conn to have correct api version!
@@ -44,6 +44,7 @@ class PowerBIDatasetRefreshStatus:
44
44
  DISABLED = "Disabled"
45
45
 
46
46
  TERMINAL_STATUSES = {FAILED, COMPLETED}
47
+ FAILURE_STATUSES = {FAILED, DISABLED}
47
48
 
48
49
 
49
50
  class PowerBIDatasetRefreshException(AirflowException):
@@ -17,7 +17,6 @@
17
17
  from __future__ import annotations
18
18
 
19
19
  import time
20
- import warnings
21
20
  from typing import TYPE_CHECKING, Any, Union
22
21
 
23
22
  from azure.core.exceptions import ServiceRequestError
@@ -25,7 +24,7 @@ from azure.identity import ClientSecretCredential, DefaultAzureCredential
25
24
  from azure.synapse.artifacts import ArtifactsClient
26
25
  from azure.synapse.spark import SparkClient
27
26
 
28
- from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning, AirflowTaskTimeout
27
+ from airflow.exceptions import AirflowException, AirflowTaskTimeout
29
28
  from airflow.hooks.base import BaseHook
30
29
  from airflow.providers.microsoft.azure.utils import (
31
30
  add_managed_identity_connection_widgets,
@@ -307,13 +306,6 @@ class AzureSynapsePipelineHook(BaseAzureSynapseHook):
307
306
  azure_synapse_conn_id: str = default_conn_name,
308
307
  **kwargs,
309
308
  ):
310
- # Handling deprecation of "default_conn_name"
311
- if azure_synapse_conn_id == self.default_conn_name:
312
- warnings.warn(
313
- "The usage of `default_conn_name=azure_synapse_connection` is deprecated and will be removed in future. Please update your code to use the new default connection name: `default_conn_name=azure_synapse_default`. ",
314
- AirflowProviderDeprecationWarning,
315
- stacklevel=2,
316
- )
317
309
  self._conn: ArtifactsClient | None = None
318
310
  self.azure_synapse_workspace_dev_endpoint = azure_synapse_workspace_dev_endpoint
319
311
  super().__init__(azure_synapse_conn_id=azure_synapse_conn_id, **kwargs)
@@ -16,7 +16,8 @@
16
16
  # under the License.
17
17
  from __future__ import annotations
18
18
 
19
- from typing import IO, TYPE_CHECKING, Any, AnyStr, Iterable, Sequence
19
+ from collections.abc import Iterable, Sequence
20
+ from typing import IO, TYPE_CHECKING, Any, AnyStr
20
21
 
21
22
  from airflow.models import BaseOperator
22
23
  from airflow.providers.microsoft.azure.hooks.data_lake import AzureDataLakeHook, AzureDataLakeStorageV2Hook
@@ -19,13 +19,11 @@
19
19
 
20
20
  from __future__ import annotations
21
21
 
22
+ from collections.abc import Sequence
22
23
  from functools import cached_property
23
- from typing import TYPE_CHECKING, Sequence
24
-
25
- from deprecated.classic import deprecated
24
+ from typing import TYPE_CHECKING
26
25
 
27
26
  from airflow.configuration import conf
28
- from airflow.exceptions import AirflowProviderDeprecationWarning
29
27
  from airflow.models import BaseOperator
30
28
  from airflow.providers.microsoft.azure.hooks.adx import AzureDataExplorerHook
31
29
 
@@ -71,11 +69,6 @@ class AzureDataExplorerQueryOperator(BaseOperator):
71
69
  """Return new instance of AzureDataExplorerHook."""
72
70
  return AzureDataExplorerHook(self.azure_data_explorer_conn_id)
73
71
 
74
- @deprecated(reason="use `hook` property instead.", category=AirflowProviderDeprecationWarning)
75
- def get_hook(self) -> AzureDataExplorerHook:
76
- """Return new instance of AzureDataExplorerHook."""
77
- return self.hook
78
-
79
72
  def execute(self, context: Context) -> KustoResultTable | str:
80
73
  """
81
74
  Run KQL Query on Azure Data Explorer (Kusto).
@@ -85,7 +78,8 @@ class AzureDataExplorerQueryOperator(BaseOperator):
85
78
  https://docs.microsoft.com/en-us/azure/kusto/api/rest/response2
86
79
  """
87
80
  response = self.hook.run_query(self.query, self.database, self.options)
88
- if conf.getboolean("core", "enable_xcom_pickling"):
81
+ # TODO: Remove this after minimum Airflow version is 3.0
82
+ if conf.getboolean("core", "enable_xcom_pickling", fallback=False):
89
83
  return response.primary_results[0]
90
84
  else:
91
85
  return str(response.primary_results[0])
@@ -16,7 +16,8 @@
16
16
  # under the License.
17
17
  from __future__ import annotations
18
18
 
19
- from typing import TYPE_CHECKING, Any, Callable, Sequence
19
+ from collections.abc import Sequence
20
+ from typing import TYPE_CHECKING, Any, Callable
20
21
 
21
22
  from azure.core.exceptions import ResourceNotFoundError
22
23
 
@@ -17,13 +17,13 @@
17
17
  # under the License.
18
18
  from __future__ import annotations
19
19
 
20
+ from collections.abc import Sequence
20
21
  from functools import cached_property
21
- from typing import TYPE_CHECKING, Any, Sequence
22
+ from typing import TYPE_CHECKING, Any
22
23
 
23
24
  from azure.batch import models as batch_models
24
- from deprecated.classic import deprecated
25
25
 
26
- from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning
26
+ from airflow.exceptions import AirflowException
27
27
  from airflow.models import BaseOperator
28
28
  from airflow.providers.microsoft.azure.hooks.batch import AzureBatchHook
29
29
 
@@ -183,11 +183,6 @@ class AzureBatchOperator(BaseOperator):
183
183
  """Create and return an AzureBatchHook (cached)."""
184
184
  return AzureBatchHook(self.azure_batch_conn_id)
185
185
 
186
- @deprecated(reason="use `hook` property instead.", category=AirflowProviderDeprecationWarning)
187
- def get_hook(self) -> AzureBatchHook:
188
- """Create and return an AzureBatchHook."""
189
- return self.hook
190
-
191
186
  def _check_inputs(self) -> Any:
192
187
  if not self.os_family and not self.vm_publisher:
193
188
  raise AirflowException("You must specify either vm_publisher or os_family")
@@ -20,7 +20,8 @@ from __future__ import annotations
20
20
  import re
21
21
  import time
22
22
  from collections import namedtuple
23
- from typing import TYPE_CHECKING, Any, Sequence
23
+ from collections.abc import Sequence
24
+ from typing import TYPE_CHECKING, Any
24
25
 
25
26
  from azure.mgmt.containerinstance.models import (
26
27
  Container,
@@ -17,7 +17,8 @@
17
17
  # under the License.
18
18
  from __future__ import annotations
19
19
 
20
- from typing import TYPE_CHECKING, Sequence
20
+ from collections.abc import Sequence
21
+ from typing import TYPE_CHECKING
21
22
 
22
23
  from airflow.models import BaseOperator
23
24
  from airflow.providers.microsoft.azure.hooks.cosmos import AzureCosmosDBHook
@@ -18,8 +18,9 @@ from __future__ import annotations
18
18
 
19
19
  import time
20
20
  import warnings
21
+ from collections.abc import Sequence
21
22
  from functools import cached_property
22
- from typing import TYPE_CHECKING, Any, Sequence
23
+ from typing import TYPE_CHECKING, Any
23
24
 
24
25
  from airflow.configuration import conf
25
26
  from airflow.exceptions import AirflowException
@@ -17,12 +17,12 @@
17
17
  # under the License.
18
18
  from __future__ import annotations
19
19
 
20
+ from collections.abc import Sequence
20
21
  from copy import deepcopy
21
22
  from typing import (
22
23
  TYPE_CHECKING,
23
24
  Any,
24
25
  Callable,
25
- Sequence,
26
26
  )
27
27
 
28
28
  from airflow.exceptions import AirflowException, TaskDeferred
@@ -280,7 +280,7 @@ class MSGraphAsyncOperator(BaseOperator):
280
280
  if top and odata_count:
281
281
  if len(response.get("value", [])) == top and context:
282
282
  results = operator.pull_xcom(context=context)
283
- skip = sum(map(lambda result: len(result["value"]), results)) + top if results else top
283
+ skip = sum([len(result["value"]) for result in results]) + top if results else top # type: ignore
284
284
  query_parameters["$skip"] = skip
285
285
  return operator.url, query_parameters
286
286
  return response.get("@odata.nextLink"), operator.query_parameters
@@ -17,13 +17,12 @@
17
17
 
18
18
  from __future__ import annotations
19
19
 
20
- from typing import TYPE_CHECKING, Any, Sequence
20
+ from collections.abc import Sequence
21
+ from typing import TYPE_CHECKING, Any
21
22
 
22
23
  from airflow.exceptions import AirflowException
23
24
  from airflow.models import BaseOperator, BaseOperatorLink
24
- from airflow.providers.microsoft.azure.hooks.powerbi import (
25
- PowerBIHook,
26
- )
25
+ from airflow.providers.microsoft.azure.hooks.powerbi import PowerBIHook
27
26
  from airflow.providers.microsoft.azure.triggers.powerbi import PowerBITrigger
28
27
 
29
28
  if TYPE_CHECKING:
@@ -16,8 +16,9 @@
16
16
  # under the License.
17
17
  from __future__ import annotations
18
18
 
19
+ from collections.abc import Sequence
19
20
  from functools import cached_property
20
- from typing import TYPE_CHECKING, Any, Sequence
21
+ from typing import TYPE_CHECKING, Any
21
22
  from urllib.parse import urlencode
22
23
 
23
24
  from airflow.exceptions import AirflowException
@@ -17,7 +17,8 @@
17
17
  # under the License.
18
18
  from __future__ import annotations
19
19
 
20
- from typing import TYPE_CHECKING, Any, Sequence
20
+ from collections.abc import Sequence
21
+ from typing import TYPE_CHECKING, Any
21
22
 
22
23
  from airflow.models import BaseOperator
23
24
  from airflow.providers.microsoft.azure.hooks.wasb import WasbHook
@@ -31,9 +31,7 @@ from functools import cached_property
31
31
  from azure.core.exceptions import ResourceNotFoundError
32
32
  from azure.identity import ClientSecretCredential, DefaultAzureCredential
33
33
  from azure.keyvault.secrets import SecretClient
34
- from deprecated import deprecated
35
34
 
36
- from airflow.exceptions import AirflowProviderDeprecationWarning
37
35
  from airflow.providers.microsoft.azure.utils import get_sync_default_azure_credential
38
36
  from airflow.secrets import BaseSecretsBackend
39
37
  from airflow.utils.log.logging_mixin import LoggingMixin
@@ -154,24 +152,6 @@ class AzureKeyVaultBackend(BaseSecretsBackend, LoggingMixin):
154
152
 
155
153
  return self._get_secret(self.connections_prefix, conn_id)
156
154
 
157
- @deprecated(
158
- reason=(
159
- "Method `AzureKeyVaultBackend.get_conn_uri` is deprecated and will be removed "
160
- "in a future release. Please use method `get_conn_value` instead."
161
- ),
162
- category=AirflowProviderDeprecationWarning,
163
- )
164
- def get_conn_uri(self, conn_id: str) -> str | None:
165
- """
166
- Return URI representation of Connection conn_id.
167
-
168
- As of Airflow version 2.3.0 this method is deprecated.
169
-
170
- :param conn_id: the connection id
171
- :return: deserialized Connection
172
- """
173
- return self.get_conn_value(conn_id)
174
-
175
155
  def get_variable(self, key: str) -> str | None:
176
156
  """
177
157
  Get an Airflow Variable from an Azure Key Vault secret.
@@ -17,7 +17,8 @@
17
17
  # under the License.
18
18
  from __future__ import annotations
19
19
 
20
- from typing import TYPE_CHECKING, Sequence
20
+ from collections.abc import Sequence
21
+ from typing import TYPE_CHECKING
21
22
 
22
23
  from airflow.providers.microsoft.azure.hooks.cosmos import AzureCosmosDBHook
23
24
  from airflow.sensors.base import BaseSensorOperator
@@ -16,9 +16,10 @@
16
16
  # under the License.
17
17
  from __future__ import annotations
18
18
 
19
+ from collections.abc import Sequence
19
20
  from datetime import timedelta
20
21
  from functools import cached_property
21
- from typing import TYPE_CHECKING, Sequence
22
+ from typing import TYPE_CHECKING
22
23
 
23
24
  from airflow.configuration import conf
24
25
  from airflow.exceptions import AirflowException
@@ -17,13 +17,14 @@
17
17
  # under the License.
18
18
  from __future__ import annotations
19
19
 
20
- from typing import TYPE_CHECKING, Any, Callable, Sequence
20
+ from collections.abc import Sequence
21
+ from typing import TYPE_CHECKING, Any, Callable
21
22
 
22
23
  from airflow.exceptions import AirflowException
24
+ from airflow.providers.common.compat.standard.triggers import TimeDeltaTrigger
23
25
  from airflow.providers.microsoft.azure.hooks.msgraph import KiotaRequestAdapterHook
24
26
  from airflow.providers.microsoft.azure.triggers.msgraph import MSGraphTrigger, ResponseSerializer
25
27
  from airflow.sensors.base import BaseSensorOperator
26
- from airflow.triggers.temporal import TimeDeltaTrigger
27
28
 
28
29
  if TYPE_CHECKING:
29
30
  from datetime import timedelta
@@ -17,13 +17,12 @@
17
17
  # under the License.
18
18
  from __future__ import annotations
19
19
 
20
+ from collections.abc import Sequence
20
21
  from datetime import timedelta
21
- from typing import TYPE_CHECKING, Any, Sequence
22
-
23
- from deprecated import deprecated
22
+ from typing import TYPE_CHECKING
24
23
 
25
24
  from airflow.configuration import conf
26
- from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning
25
+ from airflow.exceptions import AirflowException
27
26
  from airflow.providers.microsoft.azure.hooks.wasb import WasbHook
28
27
  from airflow.providers.microsoft.azure.triggers.wasb import WasbBlobSensorTrigger, WasbPrefixSensorTrigger
29
28
  from airflow.sensors.base import BaseSensorOperator
@@ -110,36 +109,6 @@ class WasbBlobSensor(BaseSensorOperator):
110
109
  raise AirflowException("Did not receive valid event from the triggerer")
111
110
 
112
111
 
113
- @deprecated(
114
- reason=(
115
- "Class `WasbBlobAsyncSensor` is deprecated and "
116
- "will be removed in a future release. "
117
- "Please use `WasbBlobSensor` and "
118
- "set `deferrable` attribute to `True` instead"
119
- ),
120
- category=AirflowProviderDeprecationWarning,
121
- )
122
- class WasbBlobAsyncSensor(WasbBlobSensor):
123
- """
124
- Poll asynchronously for the existence of a blob in a WASB container.
125
-
126
- This class is deprecated and will be removed in a future release.
127
-
128
- Please use :class:`airflow.providers.microsoft.azure.sensors.wasb.WasbBlobSensor`
129
- and set *deferrable* attribute to *True* instead.
130
-
131
- :param container_name: name of the container in which the blob should be searched for
132
- :param blob_name: name of the blob to check existence for
133
- :param wasb_conn_id: the connection identifier for connecting to Azure WASB
134
- :param poke_interval: polling period in seconds to check for the status
135
- :param public_read: whether an anonymous public read access should be used. Default is False
136
- :param timeout: Time, in seconds before the task times out and fails.
137
- """
138
-
139
- def __init__(self, **kwargs: Any) -> None:
140
- super().__init__(**kwargs, deferrable=True)
141
-
142
-
143
112
  class WasbPrefixSensor(BaseSensorOperator):
144
113
  """
145
114
  Wait for blobs matching a prefix to arrive on Azure Blob Storage.
@@ -16,7 +16,8 @@
16
16
  # under the License.
17
17
  from __future__ import annotations
18
18
 
19
- from typing import TYPE_CHECKING, Any, Sequence
19
+ from collections.abc import Sequence
20
+ from typing import TYPE_CHECKING, Any
20
21
 
21
22
  from airflow.exceptions import AirflowException
22
23
  from airflow.models import BaseOperator
@@ -17,7 +17,8 @@
17
17
  # under the License.
18
18
  from __future__ import annotations
19
19
 
20
- from typing import TYPE_CHECKING, Sequence
20
+ from collections.abc import Sequence
21
+ from typing import TYPE_CHECKING
21
22
 
22
23
  from airflow.models import BaseOperator
23
24
  from airflow.providers.microsoft.azure.hooks.wasb import WasbHook
@@ -19,8 +19,9 @@ from __future__ import annotations
19
19
 
20
20
  import csv
21
21
  import os
22
+ from collections.abc import Sequence
22
23
  from tempfile import TemporaryDirectory
23
- from typing import TYPE_CHECKING, Any, Sequence
24
+ from typing import TYPE_CHECKING, Any
24
25
 
25
26
  from airflow.models import BaseOperator
26
27
  from airflow.providers.microsoft.azure.hooks.data_lake import AzureDataLakeHook
@@ -18,8 +18,9 @@
18
18
  from __future__ import annotations
19
19
 
20
20
  import tempfile
21
+ from collections.abc import Sequence
21
22
  from functools import cached_property
22
- from typing import TYPE_CHECKING, Sequence
23
+ from typing import TYPE_CHECKING
23
24
 
24
25
  from airflow.models import BaseOperator
25
26
  from airflow.providers.amazon.aws.hooks.s3 import S3Hook
@@ -21,9 +21,10 @@ from __future__ import annotations
21
21
 
22
22
  import os
23
23
  from collections import namedtuple
24
+ from collections.abc import Sequence
24
25
  from functools import cached_property
25
26
  from tempfile import NamedTemporaryFile
26
- from typing import TYPE_CHECKING, Sequence
27
+ from typing import TYPE_CHECKING
27
28
 
28
29
  if TYPE_CHECKING:
29
30
  from airflow.utils.context import Context
@@ -18,7 +18,8 @@ from __future__ import annotations
18
18
 
19
19
  import asyncio
20
20
  import time
21
- from typing import Any, AsyncIterator
21
+ from collections.abc import AsyncIterator
22
+ from typing import Any
22
23
 
23
24
  from azure.core.exceptions import ServiceRequestError
24
25
 
@@ -20,14 +20,13 @@ from __future__ import annotations
20
20
  import json
21
21
  import locale
22
22
  from base64 import b64encode
23
+ from collections.abc import AsyncIterator, Sequence
23
24
  from contextlib import suppress
24
25
  from datetime import datetime
25
26
  from json import JSONDecodeError
26
27
  from typing import (
27
28
  TYPE_CHECKING,
28
29
  Any,
29
- AsyncIterator,
30
- Sequence,
31
30
  )
32
31
  from uuid import UUID
33
32
 
@@ -19,12 +19,10 @@ from __future__ import annotations
19
19
 
20
20
  import asyncio
21
21
  import time
22
- from typing import TYPE_CHECKING, AsyncIterator
22
+ from collections.abc import AsyncIterator
23
+ from typing import TYPE_CHECKING
23
24
 
24
- from airflow.providers.microsoft.azure.hooks.powerbi import (
25
- PowerBIDatasetRefreshStatus,
26
- PowerBIHook,
27
- )
25
+ from airflow.providers.microsoft.azure.hooks.powerbi import PowerBIDatasetRefreshStatus, PowerBIHook
28
26
  from airflow.triggers.base import BaseTrigger, TriggerEvent
29
27
 
30
28
  if TYPE_CHECKING:
@@ -105,35 +103,37 @@ class PowerBITrigger(BaseTrigger):
105
103
  group_id=self.group_id,
106
104
  )
107
105
 
108
- async def fetch_refresh_status() -> str:
109
- """Fetch the current status of the dataset refresh."""
106
+ async def fetch_refresh_status_and_error() -> tuple[str, str]:
107
+ """Fetch the current status and error of the dataset refresh."""
110
108
  refresh_details = await self.hook.get_refresh_details_by_refresh_id(
111
109
  dataset_id=self.dataset_id,
112
110
  group_id=self.group_id,
113
111
  refresh_id=self.dataset_refresh_id,
114
112
  )
115
- return refresh_details["status"]
113
+ return refresh_details["status"], refresh_details["error"]
116
114
 
117
115
  try:
118
- dataset_refresh_status = await fetch_refresh_status()
116
+ dataset_refresh_status, dataset_refresh_error = await fetch_refresh_status_and_error()
119
117
  start_time = time.monotonic()
120
118
  while start_time + self.timeout > time.monotonic():
121
- dataset_refresh_status = await fetch_refresh_status()
119
+ dataset_refresh_status, dataset_refresh_error = await fetch_refresh_status_and_error()
122
120
 
123
121
  if dataset_refresh_status == PowerBIDatasetRefreshStatus.COMPLETED:
124
122
  yield TriggerEvent(
125
123
  {
126
- "status": dataset_refresh_status,
124
+ "status": "success",
125
+ "dataset_refresh_status": dataset_refresh_status,
127
126
  "message": f"The dataset refresh {self.dataset_refresh_id} has {dataset_refresh_status}.",
128
127
  "dataset_refresh_id": self.dataset_refresh_id,
129
128
  }
130
129
  )
131
130
  return
132
- elif dataset_refresh_status == PowerBIDatasetRefreshStatus.FAILED:
131
+ elif dataset_refresh_status in PowerBIDatasetRefreshStatus.FAILURE_STATUSES:
133
132
  yield TriggerEvent(
134
133
  {
135
- "status": dataset_refresh_status,
136
- "message": f"The dataset refresh {self.dataset_refresh_id} has {dataset_refresh_status}.",
134
+ "status": "error",
135
+ "dataset_refresh_status": dataset_refresh_status,
136
+ "message": f"The dataset refresh {self.dataset_refresh_id} has {dataset_refresh_status}. Error: {dataset_refresh_error}",
137
137
  "dataset_refresh_id": self.dataset_refresh_id,
138
138
  }
139
139
  )
@@ -149,6 +149,7 @@ class PowerBITrigger(BaseTrigger):
149
149
  yield TriggerEvent(
150
150
  {
151
151
  "status": "error",
152
+ "dataset_refresh_status": dataset_refresh_status,
152
153
  "message": f"Timeout occurred while waiting for dataset refresh to complete: The dataset refresh {self.dataset_refresh_id} has status {dataset_refresh_status}.",
153
154
  "dataset_refresh_id": self.dataset_refresh_id,
154
155
  }
@@ -171,6 +172,7 @@ class PowerBITrigger(BaseTrigger):
171
172
  yield TriggerEvent(
172
173
  {
173
174
  "status": "error",
175
+ "dataset_refresh_status": None,
174
176
  "message": f"An error occurred while canceling dataset: {e}",
175
177
  "dataset_refresh_id": self.dataset_refresh_id,
176
178
  }
@@ -179,6 +181,7 @@ class PowerBITrigger(BaseTrigger):
179
181
  yield TriggerEvent(
180
182
  {
181
183
  "status": "error",
184
+ "dataset_refresh_status": None,
182
185
  "message": f"An error occurred: {error}",
183
186
  "dataset_refresh_id": self.dataset_refresh_id,
184
187
  }
@@ -17,7 +17,8 @@
17
17
  from __future__ import annotations
18
18
 
19
19
  import asyncio
20
- from typing import Any, AsyncIterator
20
+ from collections.abc import AsyncIterator
21
+ from typing import Any
21
22
 
22
23
  from airflow.providers.microsoft.azure.hooks.wasb import WasbAsyncHook
23
24
  from airflow.triggers.base import BaseTrigger, TriggerEvent
@@ -27,7 +27,7 @@ build-backend = "flit_core.buildapi"
27
27
 
28
28
  [project]
29
29
  name = "apache-airflow-providers-microsoft-azure"
30
- version = "11.1.0"
30
+ version = "12.0.0"
31
31
  description = "Provider package apache-airflow-providers-microsoft-azure for Apache Airflow"
32
32
  readme = "README.rst"
33
33
  authors = [
@@ -56,7 +56,7 @@ requires-python = "~=3.9"
56
56
  dependencies = [
57
57
  "adal>=1.2.7",
58
58
  "adlfs>=2023.10.0",
59
- "apache-airflow>=2.8.0",
59
+ "apache-airflow>=2.9.0",
60
60
  "azure-batch>=8.0.0",
61
61
  "azure-cosmos>=4.6.0",
62
62
  "azure-datalake-store>=0.0.45",
@@ -80,16 +80,16 @@ dependencies = [
80
80
  "microsoft-kiota-http>=1.3.0,!=1.3.4",
81
81
  "microsoft-kiota-serialization-json==1.0.0",
82
82
  "microsoft-kiota-serialization-text==1.0.0",
83
- "msgraph-core>=1.0.0",
83
+ "msgraph-core>=1.0.0,!=1.1.8",
84
84
  ]
85
85
 
86
86
  [project.urls]
87
- "Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/11.1.0"
88
- "Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/11.1.0/changelog.html"
87
+ "Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/12.0.0"
88
+ "Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/12.0.0/changelog.html"
89
89
  "Bug Tracker" = "https://github.com/apache/airflow/issues"
90
90
  "Source Code" = "https://github.com/apache/airflow"
91
91
  "Slack Chat" = "https://s.apache.org/airflow-slack"
92
- "Twitter" = "https://twitter.com/ApacheAirflow"
92
+ "Twitter" = "https://x.com/ApacheAirflow"
93
93
  "YouTube" = "https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/"
94
94
 
95
95
  [project.entry-points."apache_airflow_provider"]
@@ -98,8 +98,8 @@ provider_info = "airflow.providers.microsoft.azure.get_provider_info:get_provide
98
98
  "amazon" = [
99
99
  "apache-airflow-providers-amazon",
100
100
  ]
101
- "google" = [
102
- "apache-airflow-providers-google",
101
+ "common.compat" = [
102
+ "apache-airflow-providers-common-compat",
103
103
  ]
104
104
  "oracle" = [
105
105
  "apache-airflow-providers-oracle",
@@ -1,44 +0,0 @@
1
- #
2
- # Licensed to the Apache Software Foundation (ASF) under one
3
- # or more contributor license agreements. See the NOTICE file
4
- # distributed with this work for additional information
5
- # regarding copyright ownership. The ASF licenses this file
6
- # to you under the Apache License, Version 2.0 (the
7
- # "License"); you may not use this file except in compliance
8
- # with the License. You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing,
13
- # software distributed under the License is distributed on an
14
- # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
- # KIND, either express or implied. See the License for the
16
- # specific language governing permissions and limitations
17
- # under the License.
18
- from __future__ import annotations
19
-
20
- from deprecated import deprecated
21
-
22
- from airflow.exceptions import AirflowProviderDeprecationWarning
23
- from airflow.providers.google.cloud.transfers.azure_blob_to_gcs import (
24
- AzureBlobStorageToGCSOperator as AzureBlobStorageToGCSOperatorFromGoogleProvider,
25
- )
26
-
27
-
28
- @deprecated(
29
- reason=(
30
- "Please use "
31
- "`airflow.providers.google.cloud.transfers.azure_blob_to_gcs.AzureBlobStorageToGCSOperator`."
32
- ),
33
- category=AirflowProviderDeprecationWarning,
34
- )
35
- class AzureBlobStorageToGCSOperator(AzureBlobStorageToGCSOperatorFromGoogleProvider):
36
- """
37
- This class is deprecated.
38
-
39
- Please use
40
- :class:`airflow.providers.google.cloud.transfers.azure_blob_to_gcs.AzureBlobStorageToGCSOperator`.
41
- """
42
-
43
- def __init__(self, *args, **kwargs):
44
- super().__init__(*args, **kwargs)