def test_succeedifexists(self, mock_hook): operator = PubSubTopicCreateOperator(task_id=TASK_ID, project=TEST_PROJECT, topic=TEST_TOPIC, fail_if_exists=False) operator.execute(None) mock_hook.return_value.create_topic.assert_called_once_with( TEST_PROJECT, TEST_TOPIC, fail_if_exists=False)
def test_succeedifexists(self, mock_hook): operator = PubSubTopicCreateOperator(task_id=TASK_ID, project_id=TEST_PROJECT, topic=TEST_TOPIC, fail_if_exists=False) operator.execute(None) mock_hook.return_value.create_topic.assert_called_once_with( project_id=TEST_PROJECT, topic=TEST_TOPIC, fail_if_exists=False, labels=None, message_storage_policy=None, kms_key_name=None, retry=None, timeout=None, metadata=None)
PubSubTopicDeleteOperator, ) GCP_PROJECT_ID = os.environ.get("GCP_PROJECT_ID", "your-project-id") TOPIC = "PubSubTestTopic" MESSAGE = {"attributes": {"name": "wrench", "mass": "1.3kg", "count": "3"}} default_args = {"start_date": airflow.utils.dates.days_ago(1)} with models.DAG( "example_gcp_pubsub", default_args=default_args, schedule_interval=None, # Override to match your needs ) as example_dag: create_topic = PubSubTopicCreateOperator( task_id="create_topic", topic=TOPIC, project=GCP_PROJECT_ID ) subscribe_task = PubSubSubscriptionCreateOperator( task_id="subscribe_task", topic_project=GCP_PROJECT_ID, topic=TOPIC ) publish_task = PubSubPublishOperator( task_id="publish_task", project=GCP_PROJECT_ID, topic=TOPIC, messages=[MESSAGE] ) unsubscribe_task = PubSubSubscriptionDeleteOperator( task_id="unsubscribe_task", project=GCP_PROJECT_ID, subscription="{{ task_instance.xcom_pull('subscribe_task') }}", )
'email_on_retry': False, 'project': project, 'topic': topic, 'subscription': subscription, } echo_template = ''' {% for m in task_instance.xcom_pull(task_ids='pull-messages') %} echo "AckID: {{ m.get('ackId') }}, Base64-Encoded: {{ m.get('message') }}" {% endfor %} ''' with DAG('pubsub-end-to-end', default_args=default_args, schedule_interval=datetime.timedelta(days=1)) as dag: # pylint: disable=no-value-for-parameter # Note that parameters gets passed via dags default_args above. t1 = PubSubTopicCreateOperator(task_id='create-topic') t2 = PubSubSubscriptionCreateOperator(task_id='create-subscription', topic_project=project, subscription=subscription) t3 = PubSubPublishOperator(task_id='publish-messages', messages=messages) t4 = PubSubPullSensor(task_id='pull-messages', ack_messages=True) t5 = BashOperator(task_id='echo-pulled-messages', bash_command=echo_template) t6 = PubSubSubscriptionDeleteOperator(task_id='delete-subscription') t7 = PubSubTopicDeleteOperator(task_id='delete-topic') t1 >> t2 >> t3 t2 >> t4 >> t5 >> t6 >> t7