def test_xcom_enable_pickle_type(self):
        json_obj = {"key": "value"}
        execution_date = timezone.utcnow()
        key = "xcom_test2"
        dag_id = "test_dag2"
        task_id = "test_task2"
        XCom.set(key=key,
                 value=json_obj,
                 dag_id=dag_id,
                 task_id=task_id,
                 execution_date=execution_date)

        ret_value = XCom.get_many(key=key,
                                  dag_ids=dag_id,
                                  task_ids=task_id,
                                  execution_date=execution_date).first().value

        self.assertEqual(ret_value, json_obj)

        session = settings.Session()
        ret_value = session.query(XCom).filter(XCom.key == key, XCom.dag_id == dag_id,
                                               XCom.task_id == task_id,
                                               XCom.execution_date == execution_date
                                               ).first().value

        self.assertEqual(ret_value, json_obj)
    def test_xcom_get_many(self):
        json_obj = {"key": "value"}
        execution_date = timezone.utcnow()
        key = "xcom_test4"
        dag_id1 = "test_dag4"
        task_id1 = "test_task4"
        dag_id2 = "test_dag5"
        task_id2 = "test_task5"

        configuration.set("core", "xcom_enable_pickling", "True")

        XCom.set(key=key,
                 value=json_obj,
                 dag_id=dag_id1,
                 task_id=task_id1,
                 execution_date=execution_date)

        XCom.set(key=key,
                 value=json_obj,
                 dag_id=dag_id2,
                 task_id=task_id2,
                 execution_date=execution_date)

        results = XCom.get_many(key=key, execution_date=execution_date)

        for result in results:
            self.assertEqual(result.value, json_obj)
    def test_xcom_get_many(self):
        json_obj = {"key": "value"}
        execution_date = timezone.utcnow()
        key = "xcom_test4"
        dag_id1 = "test_dag4"
        task_id1 = "test_task4"
        dag_id2 = "test_dag5"
        task_id2 = "test_task5"

        configuration.set("core", "xcom_enable_pickling", "True")

        XCom.set(key=key,
                 value=json_obj,
                 dag_id=dag_id1,
                 task_id=task_id1,
                 execution_date=execution_date)

        XCom.set(key=key,
                 value=json_obj,
                 dag_id=dag_id2,
                 task_id=task_id2,
                 execution_date=execution_date)

        results = XCom.get_many(key=key,
                                execution_date=execution_date)

        for result in results:
            self.assertEqual(result.value, json_obj)
Exemple #4
0
def pull_xcom_call(**kwargs):
    # xcom will get all values, that was written before this date with using Xcom directly (without context object)
    get_mane_xcoms_values__with_xcom_class = XCom.get_many(
        execution_date=make_aware(datetime(2020, 27, 4, 14, 50, 00, 00)),
        dag_ids=["write_to_xcom"],
        include_prior_dates=True)
    print('XCom.get_many ')
    print(get_mane_xcoms_values__with_xcom_class)

    get_xcom_with_ti = kwargs['ti'].xcom_pull(dag_id="write_to_xcom",
                                              include_prior_dates=True)
    print('ti.xcom_pull with include_prior_dates')
    print(get_xcom_with_ti)
Exemple #5
0
def test_pull_parameters_by_task(env, create_dag, create_df_task, push_xcom):
    dag = create_dag
    # df_task = create_df_task(dag)
    push_task = PythonOperator(task_id='three',
                               python_callable=push_xcom,
                               op_args=['three_value'],
                               dag=dag,
                               provide_context=True)

    push_ti = TaskInstance(task=push_task, execution_date=datetime.now())
    push_task.execute(push_ti.get_template_context())
    xcom = XCom.get_many(execution_date=push_ti.execution_date,
                         dag_ids=[dag.dag_id],
                         task_ids=[push_task.task_id])
    pprint(xcom[0])
    assert len(xcom) == 1
    assert xcom[0].value == 'three_value'
    assert False
Exemple #6
0
def test_pull_parameters_by_specific_key(env, create_dag, create_df_task,
                                         push_xcom_key):
    dag = create_dag
    df_task = create_df_task(dag)
    push_task = PythonOperator(task_id='two',
                               python_callable=push_xcom_key,
                               op_args=['two', 'two_value'],
                               dag=dag,
                               provide_context=True)

    push_ti = TaskInstance(task=push_task, execution_date=datetime.now())
    push_task.execute(push_ti.get_template_context())
    xcom = XCom.get_many(execution_date=push_ti.execution_date,
                         dag_ids=[dag.dag_id])
    assert len(xcom) == 1
    assert xcom[0].value == 'two_value'
    merged = df_task.merge_parameters(push_ti)
    assert merged['two-specific-key'] == 'two_value'
def _get_task_instance_xcom_dict(dag_id, task_id, execution_date):
    try:
        results = XCom.get_many(dag_ids=dag_id,
                                task_ids=task_id,
                                execution_date=execution_date)
        if not results:
            return {}

        xcom_dict = {xcom.key: str(xcom.value) for xcom in results}

        sliced_xcom = (dict(
            itertools.islice(xcom_dict.items(), MAX_XCOM_LENGTH))
                       if len(xcom_dict) > MAX_XCOM_LENGTH else xcom_dict)
        for key, value in six.iteritems(sliced_xcom):
            sliced_xcom[key] = shorten_xcom_value(value)

        return sliced_xcom
    except Exception as e:
        logging.info("Failed to get xcom dict. Exception: {}".format(e))
        return {}