def alter_task_search(my, search, prefix='children', prefix_namespace='' ): from tactic.ui.filter import FilterData, BaseFilterWdg, GeneralFilterWdg filter_data = FilterData.get() parent_search_type = get_search_type() if not filter_data.get_data(): # use widget settings key = "last_search:%s" % parent_search_type data = WidgetSettings.get_value_by_key(key) if data: filter_data = FilterData(data) filter_data.set_to_cgi() filter_mode_prefix = 'filter_mode' if prefix_namespace: filter_mode_prefix = '%s_%s' %(prefix_namespace, filter_mode_prefix) filter_mode = 'and' filter_mode_value = filter_data.get_values_by_index(filter_mode_prefix, 0) if filter_mode_value: filter_mode = filter_mode_value.get('filter_mode') if prefix_namespace: prefix = '%s_%s' %(prefix_namespace, prefix) values_list = BaseFilterWdg.get_search_data_list(prefix, \ search_type=my.get_searchable_search_type()) if values_list: search.add_op('begin') GeneralFilterWdg.alter_sobject_search( search, values_list, prefix) if filter_mode != 'custom': search.add_op(filter_mode) return search
def alter_task_search(self, search, prefix='children', prefix_namespace='' ): from tactic.ui.filter import FilterData, BaseFilterWdg, GeneralFilterWdg filter_data = FilterData.get() parent_search_type = get_search_type() if not filter_data.get_data(): # use widget settings key = "last_search:%s" % parent_search_type data = WidgetSettings.get_value_by_key(key) if data: filter_data = FilterData(data) filter_data.set_to_cgi() filter_mode_prefix = 'filter_mode' if prefix_namespace: filter_mode_prefix = '%s_%s' %(prefix_namespace, filter_mode_prefix) filter_mode = 'and' filter_mode_value = filter_data.get_values_by_index(filter_mode_prefix, 0) if filter_mode_value: filter_mode = filter_mode_value.get('filter_mode') if prefix_namespace: prefix = '%s_%s' %(prefix_namespace, prefix) values_list = BaseFilterWdg.get_search_data_list(prefix, \ search_type=self.get_searchable_search_type()) if values_list: search.add_op('begin') GeneralFilterWdg.alter_sobject_search( search, values_list, prefix) if filter_mode != 'custom': search.add_op(filter_mode) return search
def execute(my): trigger_sobj = my.get_trigger_sobj() data = trigger_sobj.get_value("data") #data = """[ #{ "prefix": "rule", "name": "status", "value": "Approved" }, #{ "prefix": "rule", "name": "pipeline" "value": "model" }, #{ "prefix": "action", "type": "output", "name": "status", "value": "Pending" } #] #""" data = jsonloads(data) print "data: ", data from tactic.ui.filter import FilterData filter_data = FilterData(data) task = my.get_caller() # check that the process is correct trigger_info = filter_data.get_values_by_index("trigger") process = trigger_info.get("process") if task.get_value("process") != process: return parent = None rules = filter_data.get_values_by_prefix("rule") # go through each rule and determine if this trigger applies is_valid = True for rule in rules: attribute = rule.get('name') value = rule.get('value') if attribute in ['status']: # if condition does not match if task.get_value(attribute) != value: is_valid = False elif attribute in ['pipeline']: attribute = 'pipeline_code' if parent == None: parent = task.get_parent() if parent == None: continue if parent.get_value(attribute) != value: is_valid = False else: is_valid = False if not is_valid: return # update the data #input = my.get_input() #update_data = input.get('update_data') #status = update_data.get('status') #search_key = input.get('search_key') #task = Search.get_by_search_key(search_key) # get the next process tasks output_tasks = task.get_output_tasks() input_tasks = task.get_input_tasks() actions = filter_data.get_values_by_prefix("action") #print "actions: ", actions for action in actions: type = action.get("type") attribute = action.get('name') value = action.get('value') if type == 'output': for output_task in output_tasks: #output_status = output_task.get_value("status") output_task.set_value(attribute, value) output_task.commit() elif type == 'input': for output_task in output_tasks: print "a : ", attribute, value #output_status = output_task.get_value("status") output_task.set_value(attribute, value) output_task.commit() elif type == 'process': process = action.get("process") for input_task in input_tasks: task_process = input_task.get_value("process") if task_process == process: input_task.set_value(attribute, value) input_task.commit() break for output_task in output_tasks: task_process = output_task.get_value("process") if task_process == process: output_task.set_value(attribute, value) output_task.commit() break