diff --git a/airflow/providers/amazon/aws/hooks/glue_crawler.py b/airflow/providers/amazon/aws/hooks/glue_crawler.py index 82bd3f45fde8e..e0022c1e49f1e 100644 --- a/airflow/providers/amazon/aws/hooks/glue_crawler.py +++ b/airflow/providers/amazon/aws/hooks/glue_crawler.py @@ -87,7 +87,9 @@ def update_crawler(self, **crawler_kwargs) -> bool: crawler_name = crawler_kwargs["Name"] current_crawler = self.get_crawler(crawler_name) - tags_updated = self.update_tags(crawler_name, crawler_kwargs.pop("Tags", {})) + tags_updated = ( + self.update_tags(crawler_name, crawler_kwargs.pop("Tags")) if "Tags" in crawler_kwargs else False + ) update_config = { key: value diff --git a/tests/providers/amazon/aws/hooks/test_glue_crawler.py b/tests/providers/amazon/aws/hooks/test_glue_crawler.py index 6f34b789ff724..e283812fc08e4 100644 --- a/tests/providers/amazon/aws/hooks/test_glue_crawler.py +++ b/tests/providers/amazon/aws/hooks/test_glue_crawler.py @@ -160,14 +160,24 @@ def test_remove_all_tags(self, mock_get_conn): ResourceArn=self.crawler_arn, TagsToRemove=["test", "bar"] ) + @mock_sts + @mock.patch.object(GlueCrawlerHook, "get_conn") + def test_update_missing_tags(self, mock_get_conn): + mock_config_missing_tags = deepcopy(mock_config) + mock_config_missing_tags.pop("Tags") + mock_get_conn.return_value.get_crawler.return_value = {"Crawler": mock_config_missing_tags} + + assert self.hook.update_crawler(**mock_config_missing_tags) is False + mock_get_conn.return_value.get_tags.assert_not_called() + mock_get_conn.return_value.tag_resource.assert_not_called() + mock_get_conn.return_value.untag_resource.assert_not_called() + @mock_sts @mock.patch.object(GlueCrawlerHook, "get_conn") def test_replace_tag(self, mock_get_conn): mock_get_conn.return_value.get_crawler.return_value = {"Crawler": mock_config} mock_get_conn.return_value.get_tags.return_value = {"Tags": mock_config["Tags"]} - mock_config_two = deepcopy(mock_config) - mock_config_two.pop("Tags") assert self.hook.update_tags(mock_crawler_name, {"test": "bla", "bar": "test"}) is True mock_get_conn.return_value.get_tags.assert_called_once_with(ResourceArn=self.crawler_arn) mock_get_conn.return_value.untag_resource.assert_not_called()