Skip to content

Commit b7a2739

Browse files
author
Anton Nitochkin
committed
Change gdrive system tests
1 parent 6f9fc54 commit b7a2739

3 files changed

Lines changed: 59 additions & 11 deletions

File tree

providers/google/src/airflow/providers/google/suite/transfers/gcs_to_gdrive.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ class GCSToGoogleDriveOperator(BaseOperator):
8888
"source_object",
8989
"destination_object",
9090
"impersonation_chain",
91+
"destination_folder_id",
9192
)
9293
ui_color = "#f0eee4"
9394

providers/google/tests/system/google/cloud/gcs/example_gcs_to_gdrive.py

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import logging
2929
import os
3030
from datetime import datetime
31+
from functools import cache
3132
from pathlib import Path
3233
from typing import Any
3334

@@ -41,6 +42,7 @@
4142
from airflow.models.dag import DAG
4243
from airflow.providers.google.cloud.operators.gcs import GCSCreateBucketOperator, GCSDeleteBucketOperator
4344
from airflow.providers.google.cloud.transfers.gcs_to_gcs import GCSToGCSOperator
45+
from airflow.providers.google.common.utils.get_secret import get_secret
4446
from airflow.providers.google.suite.hooks.drive import GoogleDriveHook
4547
from airflow.providers.google.suite.transfers.gcs_to_gdrive import GCSToGoogleDriveOperator
4648

@@ -71,6 +73,9 @@
7173
LOCAL_PATH = str(Path("gcs"))
7274
FILE_LOCAL_PATH = str(Path(LOCAL_PATH))
7375
FILE_NAME = "example_upload.txt"
76+
GDRIVE_SECRET_ID = "gdrive_shared_folder_id"
77+
GDRIVE_ID = "{{ task_instance.xcom_pull('get_shared_drive_id') }}"
78+
7479

7580
log = logging.getLogger(__name__)
7681

@@ -80,7 +85,14 @@
8085
start_date=datetime(2021, 1, 1),
8186
catchup=False,
8287
tags=["example", "gcs", "gdrive"],
88+
render_template_as_native_obj=True,
8389
) as dag:
90+
@task
91+
def get_shared_drive_id() -> str:
92+
return get_secret(secret_id=GDRIVE_SECRET_ID).strip()
93+
94+
95+
get_shared_drive_id_task = get_shared_drive_id()
8496

8597
@task
8698
def create_connection(connection_id: str):
@@ -124,6 +136,7 @@ def create_connection(connection_id: str):
124136
source_bucket=BUCKET_NAME,
125137
source_object=f"{TMP_PATH}/{FILE_NAME}",
126138
destination_object=f"{WORK_DIR}/copied_{FILE_NAME}",
139+
destination_folder_id=GDRIVE_ID,
127140
)
128141
# [END howto_operator_gcs_to_gdrive_copy_single_file]
129142

@@ -134,7 +147,7 @@ def create_connection(connection_id: str):
134147
source_bucket=BUCKET_NAME,
135148
source_object=f"{TMP_PATH}/{FILE_NAME}",
136149
destination_object=f"{WORK_DIR}/copied_{FILE_NAME}",
137-
destination_folder_id=FOLDER_ID,
150+
destination_folder_id=GDRIVE_ID,
138151
)
139152
# [END howto_operator_gcs_to_gdrive_copy_single_file_into_folder]
140153

@@ -145,6 +158,7 @@ def create_connection(connection_id: str):
145158
source_bucket=BUCKET_NAME,
146159
source_object=f"{TMP_PATH}/*",
147160
destination_object=f"{WORK_DIR}/",
161+
destination_folder_id=GDRIVE_ID,
148162
)
149163
# [END howto_operator_gcs_to_gdrive_copy_files]
150164

@@ -155,23 +169,31 @@ def create_connection(connection_id: str):
155169
source_bucket=BUCKET_NAME,
156170
source_object=f"{TMP_PATH}/*.txt",
157171
destination_object=f"{WORK_DIR}/",
172+
destination_folder_id=GDRIVE_ID,
158173
move_object=True,
159174
)
160175
# [END howto_operator_gcs_to_gdrive_move_files]
161176

162177
@task(trigger_rule=TriggerRule.ALL_DONE)
163-
def remove_files_from_drive():
178+
def remove_files_from_drive(**context):
179+
ti = context["ti"]
164180
service = GoogleDriveHook(gcp_conn_id=CONNECTION_ID).get_conn()
165181
root_path = (
166182
service.files()
167-
.list(q=f"name = '{WORK_DIR}' and mimeType = 'application/vnd.google-apps.folder'")
183+
.list(
184+
q=f"name = '{WORK_DIR}' and mimeType = 'application/vnd.google-apps.folder'",
185+
corpora="drive",
186+
driveId=ti.xcom_pull("get_shared_drive_id"),
187+
includeItemsFromAllDrives=True,
188+
supportsAllDrives=True,
189+
)
168190
.execute()
169191
)
170192
if files := root_path["files"]:
171193
batch = service.new_batch_http_request()
172194
for file in files:
173-
log.info("Preparing to remove file: {}", file)
174-
batch.add(service.files().delete(fileId=file["id"]))
195+
log.info("Deleting file %s...", file["name"])
196+
batch.add(service.files().delete(fileId=file["id"], supportsAllDrives=True))
175197
batch.execute()
176198
log.info("Selected files removed.")
177199

@@ -188,7 +210,7 @@ def delete_connection(connection_id: str) -> None:
188210
delete_connection_task = delete_connection(connection_id=CONNECTION_ID)
189211

190212
# TEST SETUP
191-
create_bucket >> [upload_file_1, upload_file_2]
213+
get_shared_drive_id_task >> create_bucket >> [upload_file_1, upload_file_2]
192214
(
193215
[upload_file_1, upload_file_2, create_connection_task]
194216
# TEST BODY

providers/google/tests/system/google/cloud/gcs/example_gdrive_to_gcs.py

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import logging
2222
import os
2323
from datetime import datetime
24+
from functools import cache
2425
from typing import Any
2526

2627
from airflow.models.dag import DAG
@@ -35,6 +36,7 @@
3536
from airflow.providers.google.cloud.operators.gcs import GCSCreateBucketOperator, GCSDeleteBucketOperator
3637
from airflow.providers.google.cloud.transfers.gcs_to_gcs import GCSToGCSOperator
3738
from airflow.providers.google.cloud.transfers.gdrive_to_gcs import GoogleDriveToGCSOperator
39+
from airflow.providers.google.common.utils.get_secret import get_secret
3840
from airflow.providers.google.suite.hooks.drive import GoogleDriveHook
3941
from airflow.providers.google.suite.sensors.drive import GoogleDriveFileExistenceSensor
4042
from airflow.providers.google.suite.transfers.gcs_to_gdrive import GCSToGoogleDriveOperator
@@ -64,6 +66,9 @@
6466
FILE_NAME = "example_upload.txt"
6567
DRIVE_FILE_NAME = f"example_upload_{DAG_ID}_{ENV_ID}.txt"
6668
LOCAL_PATH = f"gcs/{FILE_NAME}"
69+
GDRIVE_SECRET_ID = "gdrive_shared_folder_id"
70+
GDRIVE_ID = "{{ task_instance.xcom_pull('get_shared_drive_id') }}"
71+
6772

6873
log = logging.getLogger(__name__)
6974

@@ -73,7 +78,13 @@
7378
start_date=datetime(2021, 1, 1),
7479
catchup=False,
7580
tags=["example", "gcs", "gdrive"],
81+
render_template_as_native_obj=True,
7682
) as dag:
83+
@task
84+
def get_shared_drive_id() -> str:
85+
return get_secret(secret_id=GDRIVE_SECRET_ID).strip()
86+
87+
get_shared_drive_id_task = get_shared_drive_id()
7788

7889
@task
7990
def create_connection(connection_id: str):
@@ -108,13 +119,15 @@ def create_connection(connection_id: str):
108119
source_bucket=BUCKET_NAME,
109120
source_object=FILE_NAME,
110121
destination_object=DRIVE_FILE_NAME,
122+
destination_folder_id=GDRIVE_ID,
111123
)
112124

113125
# [START detect_file]
114126
detect_file = GoogleDriveFileExistenceSensor(
115127
task_id="detect_file",
116128
folder_id=FOLDER_ID,
117129
file_name=DRIVE_FILE_NAME,
130+
drive_id=GDRIVE_ID,
118131
gcp_conn_id=CONNECTION_ID,
119132
)
120133
# [END detect_file]
@@ -124,20 +137,32 @@ def create_connection(connection_id: str):
124137
task_id="upload_gdrive_object_to_gcs",
125138
gcp_conn_id=CONNECTION_ID,
126139
folder_id=FOLDER_ID,
140+
drive_id=GDRIVE_ID,
127141
file_name=DRIVE_FILE_NAME,
128142
bucket_name=BUCKET_NAME,
129143
object_name=OBJECT,
130144
)
131145
# [END upload_gdrive_to_gcs]
132146

133147
@task(trigger_rule=TriggerRule.ALL_DONE)
134-
def remove_files_from_drive():
148+
def remove_files_from_drive(**context):
149+
ti = context["ti"]
135150
service = GoogleDriveHook(gcp_conn_id=CONNECTION_ID).get_conn()
136-
response = service.files().list(q=f"name = '{DRIVE_FILE_NAME}'").execute()
151+
response = (
152+
service.files()
153+
.list(
154+
q=f"name = '{DRIVE_FILE_NAME}'",
155+
corpora="drive",
156+
driveId=ti.xcom_pull("get_shared_drive_id"),
157+
includeItemsFromAllDrives=True,
158+
supportsAllDrives=True,
159+
)
160+
.execute()
161+
)
137162
if files := response["files"]:
138163
file = files[0]
139-
log.info("Deleting file {}...", file)
140-
service.files().delete(fileId=file["id"])
164+
log.info("Deleting file %s...", file["name"])
165+
service.files().delete(fileId=file["id"], supportsAllDrives=True).execute()
141166
log.info("Done.")
142167

143168
remove_files_from_drive_task = remove_files_from_drive()
@@ -153,7 +178,7 @@ def delete_connection(connection_id: str) -> None:
153178
delete_connection_task = delete_connection(connection_id=CONNECTION_ID)
154179

155180
(
156-
[create_bucket >> upload_file, create_connection_task]
181+
[get_shared_drive_id_task >> create_bucket >> upload_file, create_connection_task]
157182
>> copy_single_file
158183
# TEST BODY
159184
>> detect_file

0 commit comments

Comments
 (0)