Skip to content

Commit a038b52

Browse files
authored
Migrate Google ads example to new design AIP-47 (#24941)
related: #22447, #22430
1 parent b83fe21 commit a038b52

File tree

4 files changed

+46
-9
lines changed

4 files changed

+46
-9
lines changed

docs/apache-airflow-providers-google/example-dags.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Example DAGs
2020

2121
You can learn how to use Google integrations by analyzing the source code of the example DAGs:
2222

23-
* `Google Ads <https://github.com/apache/airflow/tree/providers-google/8.0.0/airflow/providers/google/ads/example_dags>`__
23+
* `Google Ads <https://github.com/apache/airflow/tree/providers-google/8.1.0/tests/system/providers/google/ads>`__
2424
* `Google Cloud (legacy) <https://github.com/apache/airflow/tree/providers-google/8.0.0/airflow/providers/google/cloud/example_dags>`__
2525
* `Google Cloud <https://github.com/apache/airflow/tree/providers-google/8.0.0/tests/system/providers/google/cloud>`__
2626
* `Google Firebase <https://github.com/apache/airflow/tree/providers-google/8.1.0/tests/system/providers/google/firebase>`__

docs/apache-airflow-providers-google/operators/ads.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ Google Ads to GCS
3333
To query the Google Ads API and generate a CSV report of the results use
3434
:class:`~airflow.providers.google.ads.transfers.ads_to_gcs.GoogleAdsToGcsOperator`.
3535

36-
.. exampleinclude:: /../../airflow/providers/google/ads/example_dags/example_ads.py
36+
.. exampleinclude:: /../../tests/system/providers/google/ads/example_ads.py
3737
:language: python
3838
:dedent: 4
3939
:start-after: [START howto_google_ads_to_gcs_operator]
@@ -52,7 +52,7 @@ Upload Google Ads Accounts to GCS
5252
To upload Google Ads accounts to Google Cloud Storage bucket use the
5353
:class:`~airflow.providers.google.ads.transfers.ads_to_gcs.GoogleAdsListAccountsOperator`.
5454

55-
.. exampleinclude:: /../../airflow/providers/google/ads/example_dags/example_ads.py
55+
.. exampleinclude:: /../../tests/system/providers/google/ads/example_ads.py
5656
:language: python
5757
:dedent: 4
5858
:start-after: [START howto_ads_list_accounts_operator]

airflow/providers/google/ads/example_dags/example_ads.py renamed to tests/system/providers/google/ads/example_ads.py

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,17 @@
2424
from airflow import models
2525
from airflow.providers.google.ads.operators.ads import GoogleAdsListAccountsOperator
2626
from airflow.providers.google.ads.transfers.ads_to_gcs import GoogleAdsToGcsOperator
27+
from airflow.providers.google.cloud.operators.gcs import GCSCreateBucketOperator, GCSDeleteBucketOperator
28+
from airflow.utils.trigger_rule import TriggerRule
2729

2830
# [START howto_google_ads_env_variables]
31+
ENV_ID = os.environ.get("SYSTEM_TESTS_ENV_ID")
32+
PROJECT_ID = os.environ.get("SYSTEM_TESTS_GCP_PROJECT")
33+
34+
DAG_ID = "example_google_ads"
35+
36+
BUCKET_NAME = f"bucket_{DAG_ID}_{ENV_ID}"
2937
CLIENT_IDS = ["1111111111", "2222222222"]
30-
BUCKET = os.environ.get("GOOGLE_ADS_BUCKET", "gs://INVALID BUCKET NAME")
3138
GCS_OBJ_PATH = "folder_name/google-ads-api-results.csv"
3239
GCS_ACCOUNTS_CSV = "folder_name/accounts.csv"
3340
QUERY = """
@@ -61,28 +68,58 @@
6168
"metrics.all_conversions.value",
6269
"metrics.cost_micros.value",
6370
]
64-
6571
# [END howto_google_ads_env_variables]
6672

6773
with models.DAG(
68-
"example_google_ads",
69-
schedule_interval=None, # Override to match your needs
74+
DAG_ID,
75+
schedule_interval='@once',
7076
start_date=datetime(2021, 1, 1),
7177
catchup=False,
78+
tags=["example", "ads"],
7279
) as dag:
80+
create_bucket = GCSCreateBucketOperator(
81+
task_id="create_bucket", bucket_name=BUCKET_NAME, project_id=PROJECT_ID
82+
)
83+
7384
# [START howto_google_ads_to_gcs_operator]
7485
run_operator = GoogleAdsToGcsOperator(
7586
client_ids=CLIENT_IDS,
7687
query=QUERY,
7788
attributes=FIELDS_TO_EXTRACT,
7889
obj=GCS_OBJ_PATH,
79-
bucket=BUCKET,
90+
bucket=BUCKET_NAME,
8091
task_id="run_operator",
8192
)
8293
# [END howto_google_ads_to_gcs_operator]
8394

8495
# [START howto_ads_list_accounts_operator]
8596
list_accounts = GoogleAdsListAccountsOperator(
86-
task_id="list_accounts", bucket=BUCKET, object_name=GCS_ACCOUNTS_CSV
97+
task_id="list_accounts", bucket=BUCKET_NAME, object_name=GCS_ACCOUNTS_CSV
8798
)
8899
# [END howto_ads_list_accounts_operator]
100+
101+
delete_bucket = GCSDeleteBucketOperator(
102+
task_id="delete_bucket", bucket_name=BUCKET_NAME, trigger_rule=TriggerRule.ALL_DONE
103+
)
104+
105+
(
106+
# TEST SETUP
107+
create_bucket
108+
# TEST BODY
109+
>> run_operator
110+
>> list_accounts
111+
# TEST TEARDOWN
112+
>> delete_bucket
113+
)
114+
115+
from tests.system.utils.watcher import watcher
116+
117+
# This test needs watcher in order to properly mark success/failure
118+
# when "tearDown" task with trigger rule is part of the DAG
119+
list(dag.tasks) >> watcher()
120+
121+
122+
from tests.system.utils import get_test_run # noqa: E402
123+
124+
# Needed to run the example DAG with pytest (see: tests/system/README.md#run_via_pytest)
125+
test_run = get_test_run(dag)

0 commit comments

Comments
 (0)