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)
示例#2
0
    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') }}",
    )
示例#4
0
    '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