def write_factor(instance, context): raw_data, old_value = instance[pipeline_constants.NEW], instance[ pipeline_constants.OLD] unit_action_status = WriteFactorAction(type=action.type) start = time.time() if action.topicId is not None: target_topic = get_topic_by_id(action.topicId) # todo for find factor # factor_dict = build_factor_dict(target_topic) conditions = action.by joint_type, where_condition = build_query_conditions( conditions, pipeline_topic, raw_data, target_topic, context) target_factor = get_factor(action.factorId, target_topic) # if action.source.kind source_value_list = __run_arithmetic( action.arithmetic, get_source_value_list(pipeline_topic, raw_data, action.source, target_factor, context)) update_data = {target_factor.name: source_value_list} mongo_query = __build_mongo_query(joint_type, where_condition) condition_factors = { "$set": get_condition_factor_value(raw_data, where_condition, joint_type) } trigger_pipeline_data_list = [] target_data = query_topic_data(mongo_query, target_topic.name) if old_value is not None: old_value_list = get_source_value_list(pipeline_topic, old_value, action.source, target_factor, context) trigger_pipeline_data_list.append( find_and_modify_topic_data( target_topic.name, mongo_query, __merge_condition_factor( __build_mongo_update(update_data, action.arithmetic, target_factor, old_value_list), condition_factors), target_data)) else: trigger_pipeline_data_list.append( find_and_modify_topic_data( target_topic.name, mongo_query, __merge_condition_factor( __build_mongo_update(update_data, action.arithmetic, target_factor), condition_factors), target_data)) elapsed_time = time.time() - start unit_action_status.complete_time = elapsed_time return context, unit_action_status, trigger_pipeline_data_list
def write_factor(instance, context): raw_data, old_value = instance[pipeline_constants.NEW], instance[ pipeline_constants.OLD] unit_action_status = UnitStatus(type=action.type) start = time.time() pipeline_uid = context[PIPELINE_UID] # TODO action_log # action_log = WriteFactorAction() if action.topicId is not None: target_topic = get_topic_by_id(action.topicId) # todo for find factor factor_dict = build_factor_dict(target_topic) conditions = action.by joint_type, where_condition = build_query_conditions( conditions, pipeline_topic, raw_data, target_topic, context) source_value_list = get_source_value_list(pipeline_topic, raw_data, action.source) target_factor = get_factor(action.factorId, target_topic) update_data = {target_factor.name: source_value_list} mongo_query = __build_mongo_query(joint_type, where_condition) target_data = query_topic_data(mongo_query, target_topic.name) if target_data is None: condition_factors = get_condition_factor_value( raw_data, where_condition, joint_type) insert_data = { **{ target_factor.name: source_value_list }, **condition_factors } log.info("Insert data : {0}".format(insert_data)) insert_topic_data(target_topic.name, insert_data, pipeline_uid) else: if old_value is not None: old_value_list = get_source_value_list( pipeline_topic, old_value, action.source) # def_value_list = source_value_list - old_value_list # update_data = {target_factor.name: def_value_list} find_and_modify_topic_data( target_topic.name, mongo_query, __build_mongo_update(update_data, action.arithmetic, target_factor, old_value_list), target_data) else: find_and_modify_topic_data( target_topic.name, mongo_query, __build_mongo_update(update_data, action.arithmetic, target_factor, None), target_data) elapsed_time = time.time() - start unit_action_status.complete_time = elapsed_time return context, unit_action_status