コード例 #1
0
def test_sqlite_operator(capsys):
    with TemporaryDirectory() as tmpdir:
        connections = [
            Connection(
                conn_id="sql_alchemy_conn",
                host=f"{tmpdir}/example.db",
                login="",
                password="",
            )
        ]

        sqlite_task = airflow_operator_to_op(
            SqliteOperator(
                task_id="sqlite_task",
                sql="DROP TABLE IF EXISTS normalized_cereals",
                sqlite_conn_id="sql_alchemy_conn",
            ),
            connections=connections,
        )

        @job
        def my_job():
            sqlite_task()

        my_job.execute_in_process()

    out, _ = capsys.readouterr()
    assert "DROP TABLE IF EXISTS normalized_cereals" in out
コード例 #2
0
def test_capture_hook_logs():
    http_task = SimpleHttpOperator(task_id="capture_logs_http_task",
                                   endpoint="foo")

    connections = [
        Connection(conn_id="http_default", host="https://mycoolwebsite.com")
    ]

    dagster_op = airflow_operator_to_op(http_task, connections=connections)

    @job
    def my_job():
        dagster_op()

    with instance_for_test() as instance:
        with responses.RequestsMock() as rsps:
            rsps.add(rsps.POST, "https://mycoolwebsite.com/foo", body="foo")
            result = my_job.execute_in_process(instance=instance)

            event_records = [
                lr for lr in instance.event_log_storage.get_logs_for_run(
                    result.run_id)
                if "https://mycoolwebsite.com/foo" in lr.user_message
            ]

            assert len(event_records) == 1
コード例 #3
0
def test_failure_bash_task():
    failure_bash_task = BashOperator(
        task_id="failure_bash_task",
        bash_command="aslkdjalskd",
    )
    dagster_op = airflow_operator_to_op(failure_bash_task)

    @job
    def my_job():
        dagster_op()

    with pytest.raises(Exception, match="Bash command failed"):
        my_job.execute_in_process()
コード例 #4
0
def test_simple_bash_task():
    with TemporaryDirectory() as tmpdir:
        simple_bash_task = BashOperator(
            task_id="bash_task",
            bash_command=f"cd {tmpdir}; touch my_file.txt")

        dagster_op = airflow_operator_to_op(simple_bash_task)

        @job
        def my_job():
            dagster_op()

        my_job.execute_in_process()

        assert "my_file.txt" in os.listdir(tmpdir)
コード例 #5
0
def test_return_output_xcom():
    def my_python_func():
        return "foo"

    simple_python_task = PythonOperator(task_id="python_task",
                                        python_callable=my_python_func,
                                        xcom_push=True)

    dagster_op = airflow_operator_to_op(simple_python_task, return_output=True)

    @job
    def my_job():
        dagster_op()

    result = my_job.execute_in_process()
    assert result.output_for_node("python_task") == "foo"
コード例 #6
0
def test_env_bash_task():
    with TemporaryDirectory() as tmpdir:
        env_bash_task = BashOperator(
            task_id="env_bash_task",
            bash_command=f"cd {tmpdir}; touch $foo",
            env={"foo": "bar.txt"},
        )

        dagster_op = airflow_operator_to_op(env_bash_task)

        @job
        def my_job():
            dagster_op()

        my_job.execute_in_process()

        assert "bar.txt" in os.listdir(tmpdir)
コード例 #7
0
def chain_converted_op_output():
    def my_python_func():
        return 100

    simple_python_task = PythonOperator(task_id="python_task",
                                        python_callable=my_python_func,
                                        xcom_push=True)
    dagster_op = airflow_operator_to_op(simple_python_task, return_output=True)

    @op
    def mult_by_two(num):
        return num * 2

    @job
    def my_job():
        mult_by_two(dagster_op())

    result = my_job.execute_in_process()
    assert result.output_for_node("mult_by_two") == 200
コード例 #8
0
def test_http_task():
    http_task = SimpleHttpOperator(task_id="http_task", endpoint="foo")

    connections = [
        Connection(conn_id="http_default", host="https://mycoolwebsite.com")
    ]

    dagster_op = airflow_operator_to_op(http_task, connections=connections)

    @job
    def my_job():
        dagster_op()

    with responses.RequestsMock() as rsps:
        rsps.add(rsps.POST, "https://mycoolwebsite.com/foo", body="foo")
        result = my_job.execute_in_process()
        assert result.success
        assert len(rsps.calls) == 1
        response = rsps.calls[0].response
        assert response.content == b"foo"
コード例 #9
0
def test_capture_op_logs():

    env_bash_task = BashOperator(
        task_id="capture_logs_task",
        bash_command="echo $foo",
        env={"foo": "quux"},
    )

    dagster_op = airflow_operator_to_op(env_bash_task)

    @job
    def my_job():
        dagster_op()

    with instance_for_test() as instance:
        result = my_job.execute_in_process(instance=instance)

        event_records = [
            lr for lr in instance.event_log_storage.get_logs_for_run(
                result.run_id) if lr.user_message == "quux"
        ]

        assert len(event_records) == 1