| 56 | '_included_config', |
| 57 | ) |
| 58 | class ConfigModel: |
| 59 | |
| 60 | def __init__(self, |
| 61 | config_object, |
| 62 | path, |
| 63 | username, |
| 64 | audit_name, |
| 65 | process_invoker: ProcessInvoker, |
| 66 | pty_enabled_default=True): |
| 67 | super().__init__() |
| 68 | |
| 69 | short_config = read_short(path, config_object) |
| 70 | self.name = short_config.name |
| 71 | self._pty_enabled_default = pty_enabled_default |
| 72 | self._config_folder = os.path.dirname(path) |
| 73 | self._process_invoker = process_invoker |
| 74 | |
| 75 | self._username = username |
| 76 | self._audit_name = audit_name |
| 77 | self.schedulable = False |
| 78 | self.scheduling_auto_cleanup = True |
| 79 | |
| 80 | self.parameters = ObservableList() |
| 81 | self.parameter_values = ObservableDict() |
| 82 | |
| 83 | self._original_config = config_object |
| 84 | self._included_config_paths = TemplateProperty(read_list(config_object, 'include'), |
| 85 | parameters=self.parameters, |
| 86 | value_wrappers=self.parameter_values) |
| 87 | self._included_config_prop.bind(self._included_config_paths, self._read_and_merge_included_paths) |
| 88 | |
| 89 | self._reload_config() |
| 90 | |
| 91 | self.parameters.subscribe(self) |
| 92 | |
| 93 | self._init_parameters(username, audit_name) |
| 94 | |
| 95 | for parameter in self.parameters: |
| 96 | self.parameter_values[parameter.name] = parameter.create_value_wrapper_for_default() |
| 97 | |
| 98 | self._reload_parameters({}) |
| 99 | |
| 100 | self._included_config_prop.subscribe(lambda old, new: self._reload(old)) |
| 101 | |
| 102 | def set_param_value(self, param_name, value): |
| 103 | parameter = self.find_parameter(param_name) |
| 104 | if parameter is None: |
| 105 | LOGGER.warning('Parameter ' + param_name + ' does not exist in ' + self.name) |
| 106 | return |
| 107 | normalized_value = parameter.normalize_user_value(value) |
| 108 | value_wrapper = parameter.create_value_wrapper(normalized_value) |
| 109 | validation_error = parameter.validate_value(value_wrapper, ignore_required=True) |
| 110 | |
| 111 | if validation_error is not None: |
| 112 | self.parameter_values[param_name] = parameter.create_value_wrapper(None) |
| 113 | raise InvalidValueException(param_name, validation_error) |
| 114 | |
| 115 | self.parameter_values[param_name] = value_wrapper |
no outgoing calls