class ModelValidator(object): overwrites = {} def __init__(self, overwrites=None, settings_file=None): """ Parameters can be overwritten either from a settigns file or from a dictionary. """ if overwrites is not None: self.overwrites.update(overwrites) if settings_file is not None: settings = open(sys.argv[1]).read() for line in settings.split('\n'): key, value = line.split('=') self.overwrites[key.strip()] = value.strip() if KEY_PROJECT not in self.overwrites: raise Exception("Settings file should contain the id of the project: %s=1" % KEY_PROJECT) self.project = dao.get_project_by_id(self.overwrites[KEY_PROJECT]) self.flow_service = FlowService() self.operation_service = OperationService() def launch_validation(self): """ Prepare the arguments to be submitted and launch actual operations group. TODO: Now get the results and check if any errors """ stored_adapter = self.flow_service.get_algorithm_by_module_and_class(SIMULATOR_MODULE, SIMULATOR_CLASS) simulator_adapter = ABCAdapter.build_adapter(stored_adapter) launch_args = {} flatten_interface = simulator_adapter.flaten_input_interface() itree_mngr = self.flow_service.input_tree_manager prepared_flatten_interface = itree_mngr.fill_input_tree_with_options(flatten_interface, self.project.id, stored_adapter.fk_category) for entry in prepared_flatten_interface: value = entry['default'] if isinstance(value, dict): value = str(value) if hasattr(value, 'tolist'): value = value.tolist() launch_args[entry['name']] = value launch_args.update(self.overwrites) nr_of_operations = 1 for key in self.overwrites: if key.startswith(PARAM_RANGE_PREFIX): range_values = self.operation_service.get_range_values(launch_args, key) nr_of_operations *= len(range_values) do_launch = False print "Warning! This will launch %s operations. Do you agree? (yes/no)" % nr_of_operations while 1: accept = raw_input() if accept.lower() == 'yes': do_launch = True break if accept.lower() == 'no': do_launch = False break print "Please type either yes or no" if do_launch: self.launched_operations = self.flow_service.fire_operation(simulator_adapter, self.project.administrator, self.project.id, **launch_args) return self.validate_results(0) else: return "Operation canceled by user." def validate_results(self, last_verified_index): error_count = 0 while last_verified_index < len(self.launched_operations): operation_to_check = self.launched_operations[last_verified_index] operation = dao.get_operation_by_id(operation_to_check.id) if not operation.has_finished: sleep(10) if operation.status == STATUS_ERROR: sys.stdout.write("E(" + str(operation_to_check.id) + ")") error_count += 1 last_verified_index += 1 sys.stdout.flush() if operation.status == STATUS_FINISHED: last_verified_index += 1 sys.stdout.write('.') sys.stdout.flush() if error_count: return "%s operations in error; %s operations successfully." % (error_count, len(self.launched_operations) - error_count) return "All operations finished successfully!"
class ModelValidator(object): overwrites = {} def __init__(self, overwrites=None, settings_file=None): """ Parameters can be overwritten either from a settigns file or from a dictionary. """ if overwrites is not None: self.overwrites.update(overwrites) if settings_file is not None: settings = open(sys.argv[1]).read() for line in settings.split('\n'): key, value = line.split('=') self.overwrites[key.strip()] = value.strip() if KEY_PROJECT not in self.overwrites: raise Exception( "Settings file should contain the id of the project: %s=1" % KEY_PROJECT) self.project = dao.get_project_by_id(self.overwrites[KEY_PROJECT]) self.flow_service = FlowService() self.operation_service = OperationService() def launch_validation(self): """ Prepare the arguments to be submitted and launch actual operations group. TODO: Now get the results and check if any errors """ stored_adapter = self.flow_service.get_algorithm_by_module_and_class( SIMULATOR_MODULE, SIMULATOR_CLASS) simulator_adapter = ABCAdapter.build_adapter(stored_adapter) launch_args = {} flatten_interface = simulator_adapter.flaten_input_interface() itree_mngr = self.flow_service.input_tree_manager prepared_flatten_interface = itree_mngr.fill_input_tree_with_options( flatten_interface, self.project.id, stored_adapter.fk_category) for entry in prepared_flatten_interface: value = entry['default'] if isinstance(value, dict): value = str(value) if hasattr(value, 'tolist'): value = value.tolist() launch_args[entry['name']] = value launch_args.update(self.overwrites) nr_of_operations = 1 for key in self.overwrites: if key.startswith(PARAM_RANGE_PREFIX): range_values = self.operation_service.get_range_values( launch_args, key) nr_of_operations *= len(range_values) do_launch = False print "Warning! This will launch %s operations. Do you agree? (yes/no)" % nr_of_operations while 1: accept = raw_input() if accept.lower() == 'yes': do_launch = True break if accept.lower() == 'no': do_launch = False break print "Please type either yes or no" if do_launch: self.launched_operations = self.flow_service.fire_operation( simulator_adapter, self.project.administrator, self.project.id, **launch_args) return self.validate_results(0) else: return "Operation canceled by user." def validate_results(self, last_verified_index): error_count = 0 while last_verified_index < len(self.launched_operations): operation_to_check = self.launched_operations[last_verified_index] operation = dao.get_operation_by_id(operation_to_check.id) if not operation.has_finished: sleep(10) if operation.status == STATUS_ERROR: sys.stdout.write("E(" + str(operation_to_check.id) + ")") error_count += 1 last_verified_index += 1 sys.stdout.flush() if operation.status == STATUS_FINISHED: last_verified_index += 1 sys.stdout.write('.') sys.stdout.flush() if error_count: return "%s operations in error; %s operations successfully." % ( error_count, len(self.launched_operations) - error_count) return "All operations finished successfully!"