apache-airflow-providers-amazon 8.6.0__tar.gz → 8.7.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 (189) hide show
  1. {apache-airflow-providers-amazon-8.6.0/apache_airflow_providers_amazon.egg-info → apache-airflow-providers-amazon-8.7.0}/PKG-INFO +6 -10
  2. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/README.rst +3 -7
  3. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/__init__.py +1 -1
  4. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/appflow.py +2 -5
  5. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/athena.py +4 -3
  6. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/base_aws.py +28 -41
  7. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/batch_client.py +8 -6
  8. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/batch_waiters.py +4 -2
  9. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/chime.py +13 -8
  10. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/cloud_formation.py +5 -1
  11. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/datasync.py +9 -16
  12. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/ecr.py +4 -1
  13. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/ecs.py +4 -1
  14. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/redshift_cluster.py +8 -12
  15. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/redshift_data.py +1 -1
  16. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/s3.py +4 -6
  17. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/sagemaker.py +7 -8
  18. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/sns.py +0 -1
  19. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/links/emr.py +4 -3
  20. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/log/cloudwatch_task_handler.py +4 -1
  21. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/log/s3_task_handler.py +1 -1
  22. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/notifications/chime.py +4 -1
  23. apache-airflow-providers-amazon-8.7.0/airflow/providers/amazon/aws/notifications/sns.py +94 -0
  24. apache-airflow-providers-amazon-8.7.0/airflow/providers/amazon/aws/notifications/sqs.py +100 -0
  25. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/ecs.py +5 -5
  26. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/glue.py +1 -1
  27. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/rds.py +2 -2
  28. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/batch.py +7 -2
  29. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/dynamodb.py +1 -1
  30. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/ecs.py +2 -2
  31. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/s3.py +2 -2
  32. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/sqs.py +7 -6
  33. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/dynamodb_to_s3.py +2 -2
  34. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/ftp_to_s3.py +1 -1
  35. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/mongo_to_s3.py +3 -2
  36. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/redshift_to_s3.py +1 -3
  37. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/sql_to_s3.py +4 -2
  38. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/triggers/athena.py +5 -1
  39. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/triggers/base.py +4 -2
  40. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/triggers/batch.py +10 -11
  41. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/triggers/ecs.py +9 -6
  42. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/triggers/eks.py +4 -2
  43. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/triggers/emr.py +6 -4
  44. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/triggers/glue_crawler.py +4 -1
  45. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/triggers/lambda_function.py +5 -1
  46. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/triggers/rds.py +4 -2
  47. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/triggers/redshift_cluster.py +4 -1
  48. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/triggers/s3.py +4 -2
  49. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/triggers/sqs.py +6 -2
  50. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/triggers/step_function.py +5 -1
  51. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/utils/__init__.py +4 -2
  52. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/utils/redshift.py +3 -1
  53. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/utils/sqs.py +7 -12
  54. apache-airflow-providers-amazon-8.7.0/airflow/providers/amazon/aws/utils/suppress.py +74 -0
  55. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/utils/task_log_fetcher.py +4 -2
  56. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/utils/waiter_with_logging.py +4 -2
  57. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/waiters/base_waiter.py +5 -1
  58. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/get_provider_info.py +20 -5
  59. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0/apache_airflow_providers_amazon.egg-info}/PKG-INFO +6 -10
  60. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/apache_airflow_providers_amazon.egg-info/SOURCES.txt +3 -0
  61. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/apache_airflow_providers_amazon.egg-info/requires.txt +0 -4
  62. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/pyproject.toml +7 -5
  63. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/setup.cfg +2 -6
  64. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/setup.py +1 -1
  65. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/LICENSE +0 -0
  66. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/MANIFEST.in +0 -0
  67. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/NOTICE +0 -0
  68. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/__init__.py +0 -0
  69. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/exceptions.py +0 -0
  70. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/__init__.py +0 -0
  71. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/batch_waiters.json +0 -0
  72. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/dms.py +0 -0
  73. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/dynamodb.py +0 -0
  74. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/ec2.py +0 -0
  75. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/eks.py +0 -0
  76. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/elasticache_replication_group.py +0 -0
  77. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/emr.py +0 -0
  78. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/eventbridge.py +0 -0
  79. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/glacier.py +0 -0
  80. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/glue.py +0 -0
  81. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/glue_catalog.py +0 -0
  82. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/glue_crawler.py +0 -0
  83. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/kinesis.py +0 -0
  84. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/lambda_function.py +0 -0
  85. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/logs.py +0 -0
  86. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/quicksight.py +0 -0
  87. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/rds.py +0 -0
  88. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/redshift_sql.py +0 -0
  89. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/secrets_manager.py +0 -0
  90. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/ses.py +0 -0
  91. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/sqs.py +0 -0
  92. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/ssm.py +0 -0
  93. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/step_function.py +0 -0
  94. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/hooks/sts.py +0 -0
  95. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/links/__init__.py +0 -0
  96. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/links/base_aws.py +0 -0
  97. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/links/batch.py +0 -0
  98. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/links/glue.py +0 -0
  99. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/links/logs.py +0 -0
  100. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/log/__init__.py +0 -0
  101. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/notifications/__init__.py +0 -0
  102. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/__init__.py +0 -0
  103. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/appflow.py +0 -0
  104. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/athena.py +0 -0
  105. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/batch.py +0 -0
  106. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/cloud_formation.py +0 -0
  107. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/datasync.py +0 -0
  108. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/dms.py +0 -0
  109. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/ec2.py +0 -0
  110. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/eks.py +0 -0
  111. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/emr.py +0 -0
  112. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/eventbridge.py +0 -0
  113. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/glacier.py +0 -0
  114. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/glue_crawler.py +0 -0
  115. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/lambda_function.py +0 -0
  116. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/quicksight.py +0 -0
  117. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/redshift_cluster.py +0 -0
  118. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/redshift_data.py +0 -0
  119. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/s3.py +0 -0
  120. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/sagemaker.py +0 -0
  121. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/sns.py +0 -0
  122. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/sqs.py +0 -0
  123. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/operators/step_function.py +0 -0
  124. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/secrets/__init__.py +0 -0
  125. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/secrets/secrets_manager.py +0 -0
  126. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/secrets/systems_manager.py +0 -0
  127. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/__init__.py +0 -0
  128. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/athena.py +0 -0
  129. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/cloud_formation.py +0 -0
  130. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/dms.py +0 -0
  131. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/ec2.py +0 -0
  132. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/eks.py +0 -0
  133. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/emr.py +0 -0
  134. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/glacier.py +0 -0
  135. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/glue.py +0 -0
  136. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/glue_catalog_partition.py +0 -0
  137. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/glue_crawler.py +0 -0
  138. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/lambda_function.py +0 -0
  139. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/quicksight.py +0 -0
  140. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/rds.py +0 -0
  141. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/redshift_cluster.py +0 -0
  142. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/sagemaker.py +0 -0
  143. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/sensors/step_function.py +0 -0
  144. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/__init__.py +0 -0
  145. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/azure_blob_to_s3.py +0 -0
  146. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/base.py +0 -0
  147. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/exasol_to_s3.py +0 -0
  148. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/gcs_to_s3.py +0 -0
  149. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/glacier_to_gcs.py +0 -0
  150. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/google_api_to_s3.py +0 -0
  151. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/hive_to_dynamodb.py +0 -0
  152. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/imap_attachment_to_s3.py +0 -0
  153. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/local_to_s3.py +0 -0
  154. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/s3_to_ftp.py +0 -0
  155. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/s3_to_redshift.py +0 -0
  156. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/s3_to_sftp.py +0 -0
  157. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/s3_to_sql.py +0 -0
  158. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/salesforce_to_s3.py +0 -0
  159. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/transfers/sftp_to_s3.py +0 -0
  160. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/triggers/__init__.py +0 -0
  161. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/triggers/ec2.py +0 -0
  162. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/triggers/glue.py +0 -0
  163. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/triggers/sagemaker.py +0 -0
  164. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/utils/connection_wrapper.py +0 -0
  165. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/utils/eks_get_token.py +0 -0
  166. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/utils/emailer.py +0 -0
  167. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/utils/identifiers.py +0 -0
  168. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/utils/rds.py +0 -0
  169. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/utils/sagemaker.py +0 -0
  170. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/utils/tags.py +0 -0
  171. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/utils/waiter.py +0 -0
  172. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/waiters/__init__.py +0 -0
  173. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/waiters/appflow.json +0 -0
  174. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/waiters/athena.json +0 -0
  175. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/waiters/batch.json +0 -0
  176. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/waiters/dynamodb.json +0 -0
  177. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/waiters/ecs.json +0 -0
  178. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/waiters/eks.json +0 -0
  179. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/waiters/emr-containers.json +0 -0
  180. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/waiters/emr-serverless.json +0 -0
  181. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/waiters/emr.json +0 -0
  182. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/waiters/glue.json +0 -0
  183. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/waiters/redshift.json +0 -0
  184. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/waiters/sagemaker.json +0 -0
  185. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/airflow/providers/amazon/aws/waiters/stepfunctions.json +0 -0
  186. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/apache_airflow_providers_amazon.egg-info/dependency_links.txt +0 -0
  187. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/apache_airflow_providers_amazon.egg-info/entry_points.txt +0 -0
  188. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/apache_airflow_providers_amazon.egg-info/not-zip-safe +0 -0
  189. {apache-airflow-providers-amazon-8.6.0 → apache-airflow-providers-amazon-8.7.0}/apache_airflow_providers_amazon.egg-info/top_level.txt +0 -0
@@ -1,14 +1,14 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: apache-airflow-providers-amazon
3
- Version: 8.6.0
3
+ Version: 8.7.0
4
4
  Summary: Provider for Apache Airflow. Implements apache-airflow-providers-amazon package
5
5
  Home-page: https://airflow.apache.org/
6
6
  Download-URL: https://archive.apache.org/dist/airflow/providers
7
7
  Author: Apache Software Foundation
8
8
  Author-email: dev@airflow.apache.org
9
9
  License: Apache License 2.0
10
- Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-amazon/8.6.0/
11
- Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-amazon/8.6.0/changelog.html
10
+ Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-amazon/8.7.0/
11
+ Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-amazon/8.7.0/changelog.html
12
12
  Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
13
13
  Project-URL: Source Code, https://github.com/apache/airflow
14
14
  Project-URL: Slack Chat, https://s.apache.org/airflow-slack
@@ -85,7 +85,7 @@ License-File: NOTICE
85
85
 
86
86
  Package ``apache-airflow-providers-amazon``
87
87
 
88
- Release: ``8.6.0``
88
+ Release: ``8.7.0``
89
89
 
90
90
 
91
91
  Amazon integration (including `Amazon Web Services (AWS) <https://aws.amazon.com/>`__).
@@ -98,7 +98,7 @@ This is a provider package for ``amazon`` provider. All classes for this provide
98
98
  are in ``airflow.providers.amazon`` python package.
99
99
 
100
100
  You can find package information and changelog for the provider
101
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-amazon/8.6.0/>`_.
101
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-amazon/8.7.0/>`_.
102
102
 
103
103
 
104
104
  Installation
@@ -120,10 +120,6 @@ PIP package Version required
120
120
  ``apache-airflow-providers-common-sql`` ``>=1.3.1``
121
121
  ``apache-airflow-providers-http``
122
122
  ``boto3`` ``>=1.28.0``
123
- ``mypy-boto3-rds`` ``>=1.28.0``
124
- ``mypy-boto3-redshift-data`` ``>=1.28.0``
125
- ``mypy-boto3-s3`` ``>=1.28.0``
126
- ``mypy-boto3-appflow`` ``>=1.28.0``
127
123
  ``botocore`` ``>=1.31.0``
128
124
  ``asgiref``
129
125
  ``watchtower`` ``~=2.0.1``
@@ -165,4 +161,4 @@ Dependent package
165
161
  ====================================================================================================================== ===================
166
162
 
167
163
  The changelog for the provider package can be found in the
168
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-amazon/8.6.0/changelog.html>`_.
164
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-amazon/8.7.0/changelog.html>`_.
@@ -36,7 +36,7 @@
36
36
 
37
37
  Package ``apache-airflow-providers-amazon``
38
38
 
39
- Release: ``8.6.0``
39
+ Release: ``8.7.0``
40
40
 
41
41
 
42
42
  Amazon integration (including `Amazon Web Services (AWS) <https://aws.amazon.com/>`__).
@@ -49,7 +49,7 @@ This is a provider package for ``amazon`` provider. All classes for this provide
49
49
  are in ``airflow.providers.amazon`` python package.
50
50
 
51
51
  You can find package information and changelog for the provider
52
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-amazon/8.6.0/>`_.
52
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-amazon/8.7.0/>`_.
53
53
 
54
54
 
55
55
  Installation
@@ -71,10 +71,6 @@ PIP package Version required
71
71
  ``apache-airflow-providers-common-sql`` ``>=1.3.1``
72
72
  ``apache-airflow-providers-http``
73
73
  ``boto3`` ``>=1.28.0``
74
- ``mypy-boto3-rds`` ``>=1.28.0``
75
- ``mypy-boto3-redshift-data`` ``>=1.28.0``
76
- ``mypy-boto3-s3`` ``>=1.28.0``
77
- ``mypy-boto3-appflow`` ``>=1.28.0``
78
74
  ``botocore`` ``>=1.31.0``
79
75
  ``asgiref``
80
76
  ``watchtower`` ``~=2.0.1``
@@ -116,4 +112,4 @@ Dependent package
116
112
  ====================================================================================================================== ===================
117
113
 
118
114
  The changelog for the provider package can be found in the
119
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-amazon/8.6.0/changelog.html>`_.
115
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-amazon/8.7.0/changelog.html>`_.
@@ -28,7 +28,7 @@ import packaging.version
28
28
 
29
29
  __all__ = ["__version__"]
30
30
 
31
- __version__ = "8.6.0"
31
+ __version__ = "8.7.0"
32
32
 
33
33
  try:
34
34
  from airflow import __version__ as airflow_version
@@ -24,7 +24,6 @@ from airflow.providers.amazon.aws.utils.waiter_with_logging import wait
24
24
 
25
25
  if TYPE_CHECKING:
26
26
  from mypy_boto3_appflow.client import AppflowClient
27
- from mypy_boto3_appflow.type_defs import TaskOutputTypeDef, TaskTypeDef
28
27
 
29
28
 
30
29
  class AppflowHook(AwsBaseHook):
@@ -93,9 +92,7 @@ class AppflowHook(AwsBaseHook):
93
92
  exec_details = last_execs[execution_id]
94
93
  self.log.info("Run complete, execution details: %s", exec_details)
95
94
 
96
- def update_flow_filter(
97
- self, flow_name: str, filter_tasks: list[TaskTypeDef], set_trigger_ondemand: bool = False
98
- ) -> None:
95
+ def update_flow_filter(self, flow_name: str, filter_tasks, set_trigger_ondemand: bool = False) -> None:
99
96
  """
100
97
  Update the flow task filter; all filters will be removed if an empty array is passed to filter_tasks.
101
98
 
@@ -106,7 +103,7 @@ class AppflowHook(AwsBaseHook):
106
103
  """
107
104
  response = self.conn.describe_flow(flowName=flow_name)
108
105
  connector_type = response["sourceFlowConfig"]["connectorType"]
109
- tasks: list[TaskTypeDef | TaskOutputTypeDef] = []
106
+ tasks = []
110
107
 
111
108
  # cleanup old filter tasks
112
109
  for task in response["tasks"]:
@@ -25,14 +25,15 @@ This module contains AWS Athena hook.
25
25
  from __future__ import annotations
26
26
 
27
27
  import warnings
28
- from typing import Any
29
-
30
- from botocore.paginate import PageIterator
28
+ from typing import TYPE_CHECKING, Any
31
29
 
32
30
  from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning
33
31
  from airflow.providers.amazon.aws.hooks.base_aws import AwsBaseHook
34
32
  from airflow.providers.amazon.aws.utils.waiter_with_logging import wait
35
33
 
34
+ if TYPE_CHECKING:
35
+ from botocore.paginate import PageIterator
36
+
36
37
 
37
38
  class AthenaHook(AwsBaseHook):
38
39
  """Interact with Amazon Athena.
@@ -29,11 +29,9 @@ import inspect
29
29
  import json
30
30
  import logging
31
31
  import os
32
- import uuid
33
32
  import warnings
34
33
  from copy import deepcopy
35
34
  from functools import cached_property, wraps
36
- from os import PathLike
37
35
  from pathlib import Path
38
36
  from typing import TYPE_CHECKING, Any, Callable, Generic, TypeVar, Union
39
37
 
@@ -43,9 +41,7 @@ import botocore.session
43
41
  import jinja2
44
42
  import requests
45
43
  import tenacity
46
- from botocore.client import ClientMeta
47
44
  from botocore.config import Config
48
- from botocore.credentials import ReadOnlyCredentials
49
45
  from botocore.waiter import Waiter, WaiterModel
50
46
  from dateutil.tz import tzlocal
51
47
  from slugify import slugify
@@ -58,6 +54,8 @@ from airflow.exceptions import (
58
54
  )
59
55
  from airflow.hooks.base import BaseHook
60
56
  from airflow.providers.amazon.aws.utils.connection_wrapper import AwsConnectionWrapper
57
+ from airflow.providers.amazon.aws.utils.identifiers import generate_uuid
58
+ from airflow.providers.amazon.aws.utils.suppress import return_on_error
61
59
  from airflow.providers_manager import ProvidersManager
62
60
  from airflow.utils.helpers import exactly_one
63
61
  from airflow.utils.log.logging_mixin import LoggingMixin
@@ -66,6 +64,9 @@ from airflow.utils.log.secrets_masker import mask_secret
66
64
  BaseAwsConnection = TypeVar("BaseAwsConnection", bound=Union[boto3.client, boto3.resource])
67
65
 
68
66
  if TYPE_CHECKING:
67
+ from botocore.client import ClientMeta
68
+ from botocore.credentials import ReadOnlyCredentials
69
+
69
70
  from airflow.models.connection import Connection # Avoid circular imports.
70
71
 
71
72
 
@@ -470,21 +471,17 @@ class AwsGenericHook(BaseHook, Generic[BaseAwsConnection]):
470
471
  self._verify = verify
471
472
 
472
473
  @classmethod
474
+ @return_on_error("Unknown")
473
475
  def _get_provider_version(cls) -> str:
474
476
  """Check the Providers Manager for the package version."""
475
- try:
476
- manager = ProvidersManager()
477
- hook = manager.hooks[cls.conn_type]
478
- if not hook:
479
- # This gets caught immediately, but without it MyPy complains
480
- # Item "None" of "Optional[HookInfo]" has no attribute "package_name"
481
- # on the following line and static checks fail.
482
- raise ValueError(f"Hook info for {cls.conn_type} not found in the Provider Manager.")
483
- provider = manager.providers[hook.package_name]
484
- return provider.version
485
- except Exception:
486
- # Under no condition should an error here ever cause an issue for the user.
487
- return "Unknown"
477
+ manager = ProvidersManager()
478
+ hook = manager.hooks[cls.conn_type]
479
+ if not hook:
480
+ # This gets caught immediately, but without it MyPy complains
481
+ # Item "None" of "Optional[HookInfo]" has no attribute "package_name"
482
+ # on the following line and static checks fail.
483
+ raise ValueError(f"Hook info for {cls.conn_type} not found in the Provider Manager.")
484
+ return manager.providers[hook.package_name].version
488
485
 
489
486
  @staticmethod
490
487
  def _find_class_name(target_function_name: str) -> str:
@@ -504,19 +501,17 @@ class AwsGenericHook(BaseHook, Generic[BaseAwsConnection]):
504
501
  # Return the name of the class object.
505
502
  return frame_class_object.__name__
506
503
 
504
+ @return_on_error("Unknown")
507
505
  def _get_caller(self, target_function_name: str = "execute") -> str:
508
506
  """Given a function name, walk the stack and return the name of the class which called it last."""
509
- try:
510
- caller = self._find_class_name(target_function_name)
511
- if caller == "BaseSensorOperator":
512
- # If the result is a BaseSensorOperator, then look for whatever last called "poke".
513
- return self._get_caller("poke")
514
- return caller
515
- except Exception:
516
- # Under no condition should an error here ever cause an issue for the user.
517
- return "Unknown"
507
+ caller = self._find_class_name(target_function_name)
508
+ if caller == "BaseSensorOperator":
509
+ # If the result is a BaseSensorOperator, then look for whatever last called "poke".
510
+ return self._get_caller("poke")
511
+ return caller
518
512
 
519
513
  @staticmethod
514
+ @return_on_error("00000000-0000-0000-0000-000000000000")
520
515
  def _generate_dag_key() -> str:
521
516
  """Generate a DAG key.
522
517
 
@@ -525,25 +520,17 @@ class AwsGenericHook(BaseHook, Generic[BaseAwsConnection]):
525
520
  can not (reasonably) be reversed. No personal data can be inferred or
526
521
  extracted from the resulting UUID.
527
522
  """
528
- try:
529
- dag_id = os.environ["AIRFLOW_CTX_DAG_ID"]
530
- return str(uuid.uuid5(uuid.NAMESPACE_OID, dag_id))
531
- except Exception:
532
- # Under no condition should an error here ever cause an issue for the user.
533
- return "00000000-0000-0000-0000-000000000000"
523
+ return generate_uuid(os.environ.get("AIRFLOW_CTX_DAG_ID"))
534
524
 
535
525
  @staticmethod
526
+ @return_on_error("Unknown")
536
527
  def _get_airflow_version() -> str:
537
528
  """Fetch and return the current Airflow version."""
538
- try:
539
- # This can be a circular import under specific configurations.
540
- # Importing locally to either avoid or catch it if it does happen.
541
- from airflow import __version__ as airflow_version
529
+ # This can be a circular import under specific configurations.
530
+ # Importing locally to either avoid or catch it if it does happen.
531
+ from airflow import __version__ as airflow_version
542
532
 
543
- return airflow_version
544
- except Exception:
545
- # Under no condition should an error here ever cause an issue for the user.
546
- return "Unknown"
533
+ return airflow_version
547
534
 
548
535
  def _generate_user_agent_extra_field(self, existing_user_agent_extra: str) -> str:
549
536
  user_agent_extra_values = [
@@ -831,7 +818,7 @@ class AwsGenericHook(BaseHook, Generic[BaseAwsConnection]):
831
818
  return False, str(f"{type(e).__name__!r} error occurred while testing connection: {e}")
832
819
 
833
820
  @cached_property
834
- def waiter_path(self) -> PathLike[str] | None:
821
+ def waiter_path(self) -> os.PathLike[str] | None:
835
822
  filename = self.client_type if self.client_type else self.resource_type
836
823
  path = Path(__file__).parents[1].joinpath(f"waiters/{filename}.json").resolve()
837
824
  return path if path.exists() else None
@@ -27,9 +27,9 @@ A client for AWS Batch services.
27
27
  from __future__ import annotations
28
28
 
29
29
  import itertools
30
- from random import uniform
30
+ import random
31
31
  from time import sleep
32
- from typing import Callable
32
+ from typing import TYPE_CHECKING, Callable
33
33
 
34
34
  import botocore.client
35
35
  import botocore.exceptions
@@ -37,9 +37,11 @@ import botocore.waiter
37
37
 
38
38
  from airflow.exceptions import AirflowException
39
39
  from airflow.providers.amazon.aws.hooks.base_aws import AwsBaseHook
40
- from airflow.providers.amazon.aws.utils.task_log_fetcher import AwsTaskLogFetcher
41
40
  from airflow.typing_compat import Protocol, runtime_checkable
42
41
 
42
+ if TYPE_CHECKING:
43
+ from airflow.providers.amazon.aws.utils.task_log_fetcher import AwsTaskLogFetcher
44
+
43
45
 
44
46
  @runtime_checkable
45
47
  class BatchProtocol(Protocol):
@@ -527,7 +529,7 @@ class BatchClientHook(AwsBaseHook):
527
529
  minima = abs(minima)
528
530
  lower = max(minima, delay - width)
529
531
  upper = delay + width
530
- return uniform(lower, upper)
532
+ return random.uniform(lower, upper)
531
533
 
532
534
  @staticmethod
533
535
  def delay(delay: int | float | None = None) -> None:
@@ -544,7 +546,7 @@ class BatchClientHook(AwsBaseHook):
544
546
  when many concurrent tasks request job-descriptions.
545
547
  """
546
548
  if delay is None:
547
- delay = uniform(BatchClientHook.DEFAULT_DELAY_MIN, BatchClientHook.DEFAULT_DELAY_MAX)
549
+ delay = random.uniform(BatchClientHook.DEFAULT_DELAY_MIN, BatchClientHook.DEFAULT_DELAY_MAX)
548
550
  else:
549
551
  delay = BatchClientHook.add_jitter(delay)
550
552
  sleep(delay)
@@ -592,4 +594,4 @@ class BatchClientHook(AwsBaseHook):
592
594
  max_interval = 600.0 # results in 3 to 10 minute delay
593
595
  delay = 1 + pow(tries * 0.6, 2)
594
596
  delay = min(max_interval, delay)
595
- return uniform(delay / 3, delay)
597
+ return random.uniform(delay / 3, delay)
@@ -29,7 +29,7 @@ import json
29
29
  import sys
30
30
  from copy import deepcopy
31
31
  from pathlib import Path
32
- from typing import Callable
32
+ from typing import TYPE_CHECKING, Callable
33
33
 
34
34
  import botocore.client
35
35
  import botocore.exceptions
@@ -37,7 +37,9 @@ import botocore.waiter
37
37
 
38
38
  from airflow.exceptions import AirflowException
39
39
  from airflow.providers.amazon.aws.hooks.batch_client import BatchClientHook
40
- from airflow.providers.amazon.aws.utils.task_log_fetcher import AwsTaskLogFetcher
40
+
41
+ if TYPE_CHECKING:
42
+ from airflow.providers.amazon.aws.utils.task_log_fetcher import AwsTaskLogFetcher
41
43
 
42
44
 
43
45
  class BatchWaitersHook(BatchClientHook):
@@ -21,6 +21,7 @@ from __future__ import annotations
21
21
 
22
22
  import json
23
23
  import re
24
+ from functools import cached_property
24
25
  from typing import Any
25
26
 
26
27
  from airflow.exceptions import AirflowException
@@ -28,19 +29,19 @@ from airflow.providers.http.hooks.http import HttpHook
28
29
 
29
30
 
30
31
  class ChimeWebhookHook(HttpHook):
31
- """Interact with Chime Web Hooks to create notifications.
32
+ """Interact with Amazon Chime Webhooks to create notifications.
32
33
 
33
34
  .. warning:: This hook is only designed to work with web hooks and not chat bots.
34
35
 
35
- :param chime_conn_id: Chime connection ID with Endpoint as "https://hooks.chime.aws" and
36
- the webhook token in the form of ```{webhook.id}?token{webhook.token}```
37
-
36
+ :param chime_conn_id: :ref:`Amazon Chime Connection ID <howto/connection:chime>`
37
+ with Endpoint as `https://hooks.chime.aws` and the webhook token
38
+ in the form of ``{webhook.id}?token{webhook.token}``
38
39
  """
39
40
 
40
41
  conn_name_attr = "chime_conn_id"
41
42
  default_conn_name = "chime_default"
42
43
  conn_type = "chime"
43
- hook_name = "Chime Web Hook"
44
+ hook_name = "Amazon Chime Webhook"
44
45
 
45
46
  def __init__(
46
47
  self,
@@ -49,7 +50,11 @@ class ChimeWebhookHook(HttpHook):
49
50
  **kwargs: Any,
50
51
  ) -> None:
51
52
  super().__init__(*args, **kwargs)
52
- self.webhook_endpoint = self._get_webhook_endpoint(chime_conn_id)
53
+ self._chime_conn_id = chime_conn_id
54
+
55
+ @cached_property
56
+ def webhook_endpoint(self):
57
+ return self._get_webhook_endpoint(self._chime_conn_id)
53
58
 
54
59
  def _get_webhook_endpoint(self, conn_id: str) -> str:
55
60
  """
@@ -65,7 +70,7 @@ class ChimeWebhookHook(HttpHook):
65
70
  url = conn.schema + "://" + conn.host
66
71
  endpoint = url + token
67
72
  # Check to make sure the endpoint matches what Chime expects
68
- if not re.match(r"^[a-zA-Z0-9_-]+\?token=[a-zA-Z0-9_-]+$", token):
73
+ if not re.fullmatch(r"[a-zA-Z0-9_-]+\?token=[a-zA-Z0-9_-]+", token):
69
74
  raise AirflowException(
70
75
  "Expected Chime webhook token in the form of '{webhook.id}?token={webhook.token}'."
71
76
  )
@@ -104,7 +109,7 @@ class ChimeWebhookHook(HttpHook):
104
109
  "hidden_fields": ["login", "port", "extra"],
105
110
  "relabeling": {
106
111
  "host": "Chime Webhook Endpoint",
107
- "password": "Webhook Token",
112
+ "password": "Chime Webhook token",
108
113
  },
109
114
  "placeholders": {
110
115
  "schema": "https",
@@ -18,11 +18,15 @@
18
18
  """This module contains AWS CloudFormation Hook."""
19
19
  from __future__ import annotations
20
20
 
21
- from boto3 import client, resource
21
+ from typing import TYPE_CHECKING
22
+
22
23
  from botocore.exceptions import ClientError
23
24
 
24
25
  from airflow.providers.amazon.aws.hooks.base_aws import AwsBaseHook
25
26
 
27
+ if TYPE_CHECKING:
28
+ from boto3 import client, resource
29
+
26
30
 
27
31
  class CloudFormationHook(AwsBaseHook):
28
32
  """
@@ -301,25 +301,18 @@ class DataSyncHook(AwsBaseHook):
301
301
  if not task_execution_arn:
302
302
  raise AirflowBadRequest("task_execution_arn not specified")
303
303
 
304
- status = None
305
- iterations = max_iterations
306
- while status is None or status in self.TASK_EXECUTION_INTERMEDIATE_STATES:
304
+ for _ in range(max_iterations):
307
305
  task_execution = self.get_conn().describe_task_execution(TaskExecutionArn=task_execution_arn)
308
306
  status = task_execution["Status"]
309
307
  self.log.info("status=%s", status)
310
- iterations -= 1
311
- if status in self.TASK_EXECUTION_FAILURE_STATES:
312
- break
313
308
  if status in self.TASK_EXECUTION_SUCCESS_STATES:
314
- break
315
- if iterations <= 0:
316
- break
309
+ return True
310
+ elif status in self.TASK_EXECUTION_FAILURE_STATES:
311
+ return False
312
+ elif status is None or status in self.TASK_EXECUTION_INTERMEDIATE_STATES:
313
+ time.sleep(self.wait_interval_seconds)
314
+ else:
315
+ raise AirflowException(f"Unknown status: {status}") # Should never happen
317
316
  time.sleep(self.wait_interval_seconds)
318
-
319
- if status in self.TASK_EXECUTION_SUCCESS_STATES:
320
- return True
321
- if status in self.TASK_EXECUTION_FAILURE_STATES:
322
- return False
323
- if iterations <= 0:
317
+ else:
324
318
  raise AirflowTaskTimeout("Max iterations exceeded!")
325
- raise AirflowException(f"Unknown status: {status}") # Should never happen
@@ -20,11 +20,14 @@ from __future__ import annotations
20
20
  import base64
21
21
  import logging
22
22
  from dataclasses import dataclass
23
- from datetime import datetime
23
+ from typing import TYPE_CHECKING
24
24
 
25
25
  from airflow.providers.amazon.aws.hooks.base_aws import AwsBaseHook
26
26
  from airflow.utils.log.secrets_masker import mask_secret
27
27
 
28
+ if TYPE_CHECKING:
29
+ from datetime import datetime
30
+
28
31
  logger = logging.getLogger(__name__)
29
32
 
30
33
 
@@ -17,13 +17,16 @@
17
17
  # under the License.
18
18
  from __future__ import annotations
19
19
 
20
- from botocore.waiter import Waiter
20
+ from typing import TYPE_CHECKING
21
21
 
22
22
  from airflow.providers.amazon.aws.exceptions import EcsOperatorError, EcsTaskFailToStart
23
23
  from airflow.providers.amazon.aws.hooks.base_aws import AwsGenericHook
24
24
  from airflow.providers.amazon.aws.utils import _StringCompareEnum
25
25
  from airflow.typing_compat import Protocol, runtime_checkable
26
26
 
27
+ if TYPE_CHECKING:
28
+ from botocore.waiter import Waiter
29
+
27
30
 
28
31
  def should_retry(exception: Exception):
29
32
  """Check if exception is related to ECS resource quota (CPU, MEM)."""
@@ -21,7 +21,6 @@ import warnings
21
21
  from typing import Any, Sequence
22
22
 
23
23
  import botocore.exceptions
24
- from botocore.exceptions import ClientError
25
24
 
26
25
  from airflow.exceptions import AirflowProviderDeprecationWarning
27
26
  from airflow.providers.amazon.aws.hooks.base_aws import AwsBaseAsyncHook, AwsBaseHook
@@ -70,17 +69,14 @@ class RedshiftHook(AwsBaseHook):
70
69
  for the cluster that is being created.
71
70
  :param params: Remaining AWS Create cluster API params.
72
71
  """
73
- try:
74
- response = self.get_conn().create_cluster(
75
- ClusterIdentifier=cluster_identifier,
76
- NodeType=node_type,
77
- MasterUsername=master_username,
78
- MasterUserPassword=master_user_password,
79
- **params,
80
- )
81
- return response
82
- except ClientError as e:
83
- raise e
72
+ response = self.get_conn().create_cluster(
73
+ ClusterIdentifier=cluster_identifier,
74
+ NodeType=node_type,
75
+ MasterUsername=master_username,
76
+ MasterUserPassword=master_user_password,
77
+ **params,
78
+ )
79
+ return response
84
80
 
85
81
  # TODO: Wrap create_cluster_snapshot
86
82
  def cluster_status(self, cluster_identifier: str) -> str:
@@ -188,7 +188,7 @@ class RedshiftDataHook(AwsGenericHook["RedshiftDataAPIServiceClient"]):
188
188
  pk_columns = []
189
189
  token = ""
190
190
  while True:
191
- kwargs = dict(Id=stmt_id)
191
+ kwargs = {"Id": stmt_id}
192
192
  if token:
193
193
  kwargs["NextToken"] = token
194
194
  response = self.conn.get_statement_result(**kwargs)
@@ -41,10 +41,8 @@ from urllib.parse import urlsplit
41
41
  from uuid import uuid4
42
42
 
43
43
  if TYPE_CHECKING:
44
- try:
44
+ with suppress(ImportError):
45
45
  from aiobotocore.client import AioBaseClient
46
- except ImportError:
47
- pass
48
46
 
49
47
  from asgiref.sync import sync_to_async
50
48
  from boto3.s3.transfer import TransferConfig
@@ -470,7 +468,7 @@ class S3Hook(AwsBaseHook):
470
468
  :param bucket_name: the name of the bucket
471
469
  :param key: the path to the key
472
470
  """
473
- prefix = re.split(r"[\[\*\?]", key, 1)[0]
471
+ prefix = re.split(r"[\[*?]", key, 1)[0]
474
472
  delimiter = ""
475
473
  paginator = client.get_paginator("list_objects_v2")
476
474
  response = paginator.paginate(Bucket=bucket_name, Prefix=prefix, Delimiter=delimiter)
@@ -572,7 +570,7 @@ class S3Hook(AwsBaseHook):
572
570
  for key in bucket_keys:
573
571
  prefix = key
574
572
  if wildcard_match:
575
- prefix = re.split(r"[\[\*\?]", key, 1)[0]
573
+ prefix = re.split(r"[\[*?]", key, 1)[0]
576
574
 
577
575
  paginator = client.get_paginator("list_objects_v2")
578
576
  response = paginator.paginate(Bucket=bucket, Prefix=prefix, Delimiter=delimiter)
@@ -1017,7 +1015,7 @@ class S3Hook(AwsBaseHook):
1017
1015
  :param delimiter: the delimiter marks key hierarchy
1018
1016
  :return: the key object from the bucket or None if none has been found.
1019
1017
  """
1020
- prefix = re.split(r"[\[\*\?]", wildcard_key, 1)[0]
1018
+ prefix = re.split(r"[\[*?]", wildcard_key, 1)[0]
1021
1019
  key_list = self.list_keys(bucket_name, prefix=prefix, delimiter=delimiter)
1022
1020
  key_matches = [k for k in key_list if fnmatch.fnmatch(k, wildcard_key)]
1023
1021
  if key_matches:
@@ -252,12 +252,12 @@ class SageMakerHook(AwsBaseHook):
252
252
  ]
253
253
  events: list[Any | None] = []
254
254
  for event_stream in event_iters:
255
- if not event_stream:
256
- events.append(None)
257
- continue
258
- try:
259
- events.append(next(event_stream))
260
- except StopIteration:
255
+ if event_stream:
256
+ try:
257
+ events.append(next(event_stream))
258
+ except StopIteration:
259
+ events.append(None)
260
+ else:
261
261
  events.append(None)
262
262
 
263
263
  while any(events):
@@ -979,8 +979,7 @@ class SageMakerHook(AwsBaseHook):
979
979
  found_name: str,
980
980
  job_name_suffix: str | None = None,
981
981
  ) -> bool:
982
- pattern = re.compile(f"^{processing_job_name}({job_name_suffix})?$")
983
- return pattern.fullmatch(found_name) is not None
982
+ return re.fullmatch(f"{processing_job_name}({job_name_suffix})?", found_name) is not None
984
983
 
985
984
  def count_processing_jobs_by_name(
986
985
  self,
@@ -68,7 +68,6 @@ class SnsHook(AwsBaseHook):
68
68
 
69
69
  :param target_arn: either a TopicArn or an EndpointArn
70
70
  :param message: the default message you want to send
71
- :param message: str
72
71
  :param subject: subject of message
73
72
  :param message_attributes: additional attributes to publish for message filtering. This should be
74
73
  a flat dict; the DataType to be sent depends on the type of the value:
@@ -16,15 +16,16 @@
16
16
  # under the License.
17
17
  from __future__ import annotations
18
18
 
19
- from typing import Any
20
-
21
- import boto3
19
+ from typing import TYPE_CHECKING, Any
22
20
 
23
21
  from airflow.exceptions import AirflowException
24
22
  from airflow.providers.amazon.aws.hooks.s3 import S3Hook
25
23
  from airflow.providers.amazon.aws.links.base_aws import BASE_AWS_CONSOLE_LINK, BaseAwsLink
26
24
  from airflow.utils.helpers import exactly_one
27
25
 
26
+ if TYPE_CHECKING:
27
+ import boto3
28
+
28
29
 
29
30
  class EmrClusterLink(BaseAwsLink):
30
31
  """Helper class for constructing AWS EMR Cluster Link."""