예제 #1
0
    def get_file_permutations(self, file, device, scheduler):
        """Creates interpolated files of permutated template settings.

        Args:
            file: The input file.
            device: The device.
            scheduler: The scheduler.

        Returns:
            Yields tuples of file names and setting permutations.

        Raises:
            InvalidSettingError: If `file` does not exist.
        """
        if not os.path.isfile(file):
            raise InvalidSettingError(
                'Setting file {} does not exist'.format(file)
            )

        if self.enabled:
            for sp in self._get_setting_permutations():
                temp_file_name = self._interpolate_file(file, device, scheduler, sp)
                yield temp_file_name, sp
                os.remove(temp_file_name)
        else:
            yield file, ()
예제 #2
0
파일: outputs.py 프로젝트: UOFL-CSL/iobs
    def add_setting(self, setting, value):
        """Adds a setting to the configuration object.

        Args:
            setting: The setting.
            value: The value.

        Raises:
            InvalidSettingError: If setting is not defined in `_get_settings`.
        """
        if setting not in self._settings:
            raise InvalidSettingError('Setting {} is not valid'.format(setting))

        sa = self._settings[setting]
        setattr(self, setting, sa.conversion_fn(value))
예제 #3
0
파일: base.py 프로젝트: UOFL-CSL/iobs
    def _validate_setting(self, setting_name, setting):
        """Validates a config setting attribute.

        Args:
            setting_name: The attribute.
            setting: The SettingAttribute.

        Raises:
            InvalidSettingError: If no value set and `default_value` not set on
                `setting`. Or if fails `validate_fn` on `setting`.
        """
        setting_value = getattr(self, setting_name, None)
        if setting_value is None:
            if setting.default_value is None:
                raise InvalidSettingError(
                    'Required setting {} is not defined'.format(setting_name))

            setting_value = setting.default_value
            setting.default_used = True
            setattr(self, setting_name, setting.default_value)

        if not setting.validation_fn(setting_value):
            raise InvalidSettingError('Setting {}={} is not valid'.format(
                setting_name, setting_value))
예제 #4
0
파일: base.py 프로젝트: UOFL-CSL/iobs
    def validate(self):
        """Validates the settings.

        Raises:
            InvalidSettingError: If settings are not valid or dependencies not met.
        """
        # NOTE: Assumes that there are no circular dependencies
        roots = {
            k
            for k, v in self._settings.items() if not v.dependent_attributes
        }
        unvalidated = {
            k
            for k, v in self._settings.items() if v.dependent_attributes
        }
        inc_deps = {s: set() for s in self._settings}
        out_deps = {
            k: set(v.dependent_attributes)
            for k, v in self._settings.items() if v.dependent_attributes
        }

        for k, v in self._settings.items():
            if v.dependent_attributes:
                for dep in v.dependent_attributes:
                    inc_deps[dep].add(k)

        while roots:
            setting_name = roots.pop()
            setting = self._settings[setting_name]
            self._validate_setting(setting_name, setting)

            for dep in inc_deps[setting_name]:
                out_deps[dep].remove(setting_name)
                if not out_deps[dep]:
                    del out_deps[dep]
                    unvalidated.remove(dep)
                    roots.add(dep)

        if unvalidated:
            raise InvalidSettingError(
                'Setting(s) {} do not have dependencies met'.format(
                    ', '.join(unvalidated)))
예제 #5
0
    def get(*settings):
        """Retrieves attributes on self.

        Args:
            settings: The attributes to retrieve.

        Returns:
            The values of the attributes on self.

        Raises:
            InvalidSettingError: If setting does not exist on self.
        """
        ret = []
        for setting in settings:
            try:
                ret.append(getattr(SettingsManager, setting))
            except AttributeError:
                raise InvalidSettingError('{} does not exist'.format(setting))

        if len(ret) == 1:
            return ret[0]
        return ret