Skip to content

Commit 4473b27

Browse files
authored
Migrate Google campaign manager example to new design AIP-47 (#25069)
related: #22447, #22430
1 parent 9b7e4a7 commit 4473b27

File tree

3 files changed

+53
-70
lines changed

3 files changed

+53
-70
lines changed

β€Ždocs/apache-airflow-providers-google/operators/marketing_platform/campaign_manager.rst

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ To delete Campaign Manager report you can use the
3636
:class:`~airflow.providers.google.marketing_platform.operators.campaign_manager.GoogleCampaignManagerDeleteReportOperator`.
3737
It deletes a report by its unique ID.
3838

39-
.. exampleinclude:: /../../airflow/providers/google/marketing_platform/example_dags/example_campaign_manager.py
39+
.. exampleinclude:: /../../tests/system/providers/google/marketing_platform/example_campaign_manager.py
4040
:language: python
4141
:dedent: 4
4242
:start-after: [START howto_campaign_manager_delete_report_operator]
@@ -54,7 +54,7 @@ Downloading a report
5454
The :class:`~airflow.providers.google.marketing_platform.operators.campaign_manager.GoogleCampaignManagerDownloadReportOperator`.
5555
allows you to download a Campaign Manager to Google Cloud Storage bucket.
5656

57-
.. exampleinclude:: /../../airflow/providers/google/marketing_platform/example_dags/example_campaign_manager.py
57+
.. exampleinclude:: /../../tests/system/providers/google/marketing_platform/example_campaign_manager.py
5858
:language: python
5959
:dedent: 4
6060
:start-after: [START howto_campaign_manager_get_report_operator]
@@ -72,7 +72,7 @@ Waiting for a report
7272
Report are generated asynchronously. To wait for report to be ready for downloading
7373
you can use :class:`~airflow.providers.google.marketing_platform.sensors.campaign_manager.GoogleCampaignManagerReportSensor`.
7474

75-
.. exampleinclude:: /../../airflow/providers/google/marketing_platform/example_dags/example_campaign_manager.py
75+
.. exampleinclude:: /../../tests/system/providers/google/marketing_platform/example_campaign_manager.py
7676
:language: python
7777
:dedent: 4
7878
:start-after: [START howto_campaign_manager_wait_for_operation]
@@ -91,7 +91,7 @@ To insert a Campaign Manager report you can use the
9191
:class:`~airflow.providers.google.marketing_platform.operators.campaign_manager.GoogleCampaignManagerInsertReportOperator`.
9292
Running this operator creates a new report.
9393

94-
.. exampleinclude:: /../../airflow/providers/google/marketing_platform/example_dags/example_campaign_manager.py
94+
.. exampleinclude:: /../../tests/system/providers/google/marketing_platform/example_campaign_manager.py
9595
:language: python
9696
:dedent: 4
9797
:start-after: [START howto_campaign_manager_insert_report_operator]
@@ -111,7 +111,7 @@ Running a report
111111
To run Campaign Manager report you can use the
112112
:class:`~airflow.providers.google.marketing_platform.operators.campaign_manager.GoogleCampaignManagerRunReportOperator`.
113113

114-
.. exampleinclude:: /../../airflow/providers/google/marketing_platform/example_dags/example_campaign_manager.py
114+
.. exampleinclude:: /../../tests/system/providers/google/marketing_platform/example_campaign_manager.py
115115
:language: python
116116
:dedent: 4
117117
:start-after: [START howto_campaign_manager_run_report_operator]
@@ -130,7 +130,7 @@ Inserting a conversions
130130
To insert Campaign Manager conversions you can use the
131131
:class:`~airflow.providers.google.marketing_platform.operators.campaign_manager.GoogleCampaignManagerBatchInsertConversionsOperator`.
132132

133-
.. exampleinclude:: /../../airflow/providers/google/marketing_platform/example_dags/example_campaign_manager.py
133+
.. exampleinclude:: /../../tests/system/providers/google/marketing_platform/example_campaign_manager.py
134134
:language: python
135135
:dedent: 4
136136
:start-after: [START howto_campaign_manager_insert_conversions]
@@ -149,7 +149,7 @@ Updating a conversions
149149
To update Campaign Manager conversions you can use the
150150
:class:`~airflow.providers.google.marketing_platform.operators.campaign_manager.GoogleCampaignManagerBatchUpdateConversionsOperator`.
151151

152-
.. exampleinclude:: /../../airflow/providers/google/marketing_platform/example_dags/example_campaign_manager.py
152+
.. exampleinclude:: /../../tests/system/providers/google/marketing_platform/example_campaign_manager.py
153153
:language: python
154154
:dedent: 4
155155
:start-after: [START howto_campaign_manager_update_conversions]

β€Žtests/providers/google/marketing_platform/operators/test_campaign_manager_system.py

Lines changed: 0 additions & 46 deletions
This file was deleted.
Lines changed: 46 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from datetime import datetime
2424

2525
from airflow import models
26+
from airflow.providers.google.cloud.operators.gcs import GCSCreateBucketOperator, GCSDeleteBucketOperator
2627
from airflow.providers.google.marketing_platform.operators.campaign_manager import (
2728
GoogleCampaignManagerBatchInsertConversionsOperator,
2829
GoogleCampaignManagerBatchUpdateConversionsOperator,
@@ -34,14 +35,20 @@
3435
from airflow.providers.google.marketing_platform.sensors.campaign_manager import (
3536
GoogleCampaignManagerReportSensor,
3637
)
38+
from airflow.utils.trigger_rule import TriggerRule
39+
40+
ENV_ID = os.environ.get("SYSTEM_TESTS_ENV_ID")
41+
PROJECT_ID = os.environ.get("SYSTEM_TESTS_GCP_PROJECT")
42+
43+
DAG_ID = "example_campaign_manager"
3744

3845
PROFILE_ID = os.environ.get("MARKETING_PROFILE_ID", "123456789")
3946
FLOODLIGHT_ACTIVITY_ID = int(os.environ.get("FLOODLIGHT_ACTIVITY_ID", 12345))
4047
FLOODLIGHT_CONFIGURATION_ID = int(os.environ.get("FLOODLIGHT_CONFIGURATION_ID", 12345))
4148
ENCRYPTION_ENTITY_ID = int(os.environ.get("ENCRYPTION_ENTITY_ID", 12345))
4249
DEVICE_ID = os.environ.get("DEVICE_ID", "12345")
43-
BUCKET = os.environ.get("MARKETING_BUCKET", "test-cm-bucket")
44-
REPORT_NAME = "test-report"
50+
BUCKET_NAME = f"bucket_{DAG_ID}_{ENV_ID}"
51+
REPORT_NAME = f"report_{DAG_ID}_{ENV_ID}"
4552
REPORT = {
4653
"type": "STANDARD",
4754
"name": REPORT_NAME,
@@ -84,11 +91,16 @@
8491
}
8592

8693
with models.DAG(
87-
"example_campaign_manager",
94+
DAG_ID,
8895
schedule_interval='@once', # Override to match your needs,
8996
start_date=datetime(2021, 1, 1),
9097
catchup=False,
98+
tags=["example", "campaign"],
9199
) as dag:
100+
create_bucket = GCSCreateBucketOperator(
101+
task_id="create_bucket", bucket_name=BUCKET_NAME, project_id=PROJECT_ID
102+
)
103+
92104
# [START howto_campaign_manager_insert_report_operator]
93105
create_report = GoogleCampaignManagerInsertReportOperator(
94106
profile_id=PROFILE_ID, report=REPORT, task_id="create_report"
@@ -119,24 +131,22 @@
119131
report_id=report_id,
120132
file_id=file_id,
121133
report_name="test_report.csv",
122-
bucket_name=BUCKET,
134+
bucket_name=BUCKET_NAME,
123135
)
124136
# [END howto_campaign_manager_get_report_operator]
125137

126138
# [START howto_campaign_manager_delete_report_operator]
127139
delete_report = GoogleCampaignManagerDeleteReportOperator(
128-
profile_id=PROFILE_ID, report_name=REPORT_NAME, task_id="delete_report"
140+
profile_id=PROFILE_ID,
141+
report_name=REPORT_NAME,
142+
task_id="delete_report",
143+
trigger_rule=TriggerRule.ALL_DONE,
129144
)
130145
# [END howto_campaign_manager_delete_report_operator]
131146

132-
wait_for_report >> get_report >> delete_report
133-
134-
# Task dependencies created via `XComArgs`:
135-
# create_report >> run_report
136-
# create_report >> wait_for_report
137-
# create_report >> get_report
138-
# run_report >> get_report
139-
# run_report >> wait_for_report
147+
delete_bucket = GCSDeleteBucketOperator(
148+
task_id="delete_bucket", bucket_name=BUCKET_NAME, trigger_rule=TriggerRule.ALL_DONE
149+
)
140150

141151
# [START howto_campaign_manager_insert_conversions]
142152
insert_conversion = GoogleCampaignManagerBatchInsertConversionsOperator(
@@ -161,9 +171,28 @@
161171
)
162172
# [END howto_campaign_manager_update_conversions]
163173

164-
insert_conversion >> update_conversion
174+
(
175+
# TEST SETUP
176+
create_bucket
177+
>> create_report
178+
# TEST BODY
179+
>> run_report
180+
>> wait_for_report
181+
>> get_report
182+
>> insert_conversion
183+
>> update_conversion
184+
# TEST TEARDOWN
185+
>> delete_report
186+
>> delete_bucket
187+
)
188+
189+
from tests.system.utils.watcher import watcher
190+
191+
# This test needs watcher in order to properly mark success/failure
192+
# when "tearDown" task with trigger rule is part of the DAG
193+
list(dag.tasks) >> watcher()
165194

195+
from tests.system.utils import get_test_run # noqa: E402
166196

167-
if __name__ == "__main__":
168-
dag.clear()
169-
dag.run()
197+
# Needed to run the example DAG with pytest (see: tests/system/README.md#run_via_pytest)
198+
test_run = get_test_run(dag)

0 commit comments

Comments
 (0)