Skip to content

Commit b2825e1

Browse files
authored
Fix GoogleDriveHook writing files to trashed folders on upload v2 (#29119)
1 parent 9510043 commit b2825e1

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

β€Žairflow/providers/google/suite/hooks/drive.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ def _ensure_folders_exists(self, path: str) -> str:
8181
for current_folder in folders:
8282
self.log.debug("Looking for %s directory with %s parent", current_folder, current_parent)
8383
conditions = [
84-
"mimeType = 'application/vnd.google-apps.folder'",
84+
"trashed=false",
85+
"mimeType='application/vnd.google-apps.folder'",
8586
f"name='{current_folder}'",
8687
f"'{current_parent}' in parents",
8788
]

β€Žtests/providers/google/suite/hooks/test_drive.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,16 @@ def test_ensure_folders_exists_when_no_folder_exists(self, mock_get_conn):
5757

5858
mock_get_conn.assert_has_calls(
5959
[
60+
mock.call()
61+
.files()
62+
.list(
63+
q=(
64+
"trashed=false and mimeType='application/vnd.google-apps.folder' "
65+
"and name='AAA' and 'root' in parents"
66+
),
67+
spaces="drive",
68+
fields="files(id, name)",
69+
),
6070
mock.call()
6171
.files()
6272
.create(
@@ -119,6 +129,19 @@ def test_ensure_folders_exists_when_some_folders_exists(self, mock_get_conn):
119129

120130
mock_get_conn.assert_has_calls(
121131
[
132+
*[
133+
mock.call()
134+
.files()
135+
.list(
136+
q=(
137+
"trashed=false and mimeType='application/vnd.google-apps.folder' "
138+
f"and name='{d}' and '{key}' in parents"
139+
),
140+
spaces="drive",
141+
fields="files(id, name)",
142+
)
143+
for d, key in [("AAA", "root"), ("BBB", "ID_1"), ("CCC", "ID_2")]
144+
],
122145
mock.call()
123146
.files()
124147
.create(
@@ -156,6 +179,25 @@ def test_ensure_folders_exists_when_all_folders_exists(self, mock_get_conn):
156179

157180
result_value = self.gdrive_hook._ensure_folders_exists("AAA/BBB/CCC/DDD")
158181

182+
mock_get_conn.assert_has_calls(
183+
[
184+
*[
185+
mock.call()
186+
.files()
187+
.list(
188+
q=(
189+
"trashed=false and mimeType='application/vnd.google-apps.folder' "
190+
f"and name='{d}' and '{key}' in parents"
191+
),
192+
spaces="drive",
193+
fields="files(id, name)",
194+
)
195+
for d, key in [("AAA", "root"), ("BBB", "ID_1"), ("CCC", "ID_2"), ("DDD", "ID_3")]
196+
],
197+
],
198+
any_order=True,
199+
)
200+
159201
mock_get_conn.return_value.files.return_value.create.assert_not_called()
160202
assert "ID_4" == result_value
161203

0 commit comments

Comments
 (0)