Exemplo n.º 1
0
	def _load_config_data(self, file_name):
		try:
			config_obj = ConfigObj(file_name, raise_errors = True, list_values = False, interpolation = False)
		except ConfigObjError as e:
			raise InvalidProfileException("Cannot parse '%s'." % file_name, e)

		config = collections.OrderedDict()
		for section in config_obj.keys():
			config[section] = collections.OrderedDict()
			try:
				keys = config_obj[section].keys()
			except AttributeError:
				raise InvalidProfileException("Error parsing section '%s' in file '%s'." % (section, file_name))
			for option in keys:
				config[section][option] = config_obj[section][option]

		dir_name = os.path.dirname(file_name)
		# TODO: Could we do this in the same place as the expansion of other functions?
		for section in config:
			for option in config[section]:
				config[section][option] = self._expand_profile_dir(dir_name, config[section][option])

		# TODO: HACK, this needs to be solved in a better way (better config parser)
		for unit_name in config:
			if "script" in config[unit_name] and config[unit_name].get("script", None) is not None:
				script_path = os.path.join(dir_name, config[unit_name]["script"])
				config[unit_name]["script"] = [os.path.normpath(script_path)]

		return config
Exemplo n.º 2
0
    def load(self, profile_names):
        if type(profile_names) is not list:
            profile_names = profile_names.split()

        profile_names = list(filter(self.safe_name, profile_names))
        if len(profile_names) == 0:
            raise InvalidProfileException(
                "No profile or invalid profiles were specified.")

        if len(profile_names) > 1:
            log.info("loading profiles: %s" % ", ".join(profile_names))
        else:
            log.info("loading profile: %s" % profile_names[0])
        profiles = []
        processed_files = []
        self._load_profile(profile_names, profiles, processed_files)

        if len(profiles) > 1:
            final_profile = self._profile_merger.merge(profiles)
        else:
            final_profile = profiles[0]

        final_profile.name = " ".join(profile_names)
        if "variables" in final_profile.units:
            self._variables.add_from_cfg(
                final_profile.units["variables"].options)
            del (final_profile.units["variables"])
        # FIXME hack, do all variable expansions in one place
        self._expand_vars_in_devices(final_profile)
        return final_profile
	def execute(self, args):
		if not super(self.__class__, self).execute(args):
			return None
		if args[1] == args[2]:
			log.error("assertion '%s' failed: '%s' == '%s'" % (args[0], args[1], args[2]))
			raise InvalidProfileException("Assertion '%s' failed." % args[0])
		return None
Exemplo n.º 4
0
    def _load_config_data(self, file_name):
        try:
            config_obj = ConfigParser(delimiters=('='),
                                      inline_comment_prefixes=('#'))
            config_obj.optionxform = str
            with open(file_name) as f:
                config_obj.read_file(f, file_name)
        except Error as e:
            raise InvalidProfileException("Cannot parse '%s'." % file_name, e)

        config = collections.OrderedDict()
        dir_name = os.path.dirname(file_name)
        for section in list(config_obj.sections()):
            config[section] = collections.OrderedDict()
            for option in config_obj.options(section):
                config[section][option] = config_obj.get(section,
                                                         option,
                                                         raw=True)
                config[section][option] = self._expand_profile_dir(
                    dir_name, config[section][option])
            if config[section].get("script") is not None:
                script_path = os.path.join(dir_name, config[section]["script"])
                config[section]["script"] = [os.path.normpath(script_path)]

        return config
Exemplo n.º 5
0
	def _load_profile(self, profile_names, profiles, processed_files):
		for name in profile_names:
			filename = self._profile_locator.get_config(name, processed_files)
			if filename is None:
				raise InvalidProfileException("Cannot find profile '%s' in '%s'." % (name, list(reversed(self._profile_locator._load_directories))))
			processed_files.append(filename)

			config = self._load_config_data(filename)
			profile = self._profile_factory.create(name, config)
			if "include" in profile.options:
				include_name = profile.options.pop("include")
				self._load_profile([include_name], profiles, processed_files)

			profiles.append(profile)
Exemplo n.º 6
0
	def _load_profile(self, profile_names, profiles, processed_files):
		for name in profile_names:
			filename = self._profile_locator.get_config(name, processed_files)
			if filename == "":
				continue
			if filename is None:
				raise InvalidProfileException("Cannot find profile '%s' in '%s'." % (name, list(reversed(self._profile_locator._load_directories))))
			processed_files.append(filename)

			config = self._load_config_data(filename)
			profile = self._profile_factory.create(name, config)
			if "include" in profile.options:
				include_names = re.split(r"\b\s*[,;]\s*", self._variables.expand(profile.options.pop("include")))
				self._load_profile(include_names, profiles, processed_files)

			profiles.append(profile)
Exemplo n.º 7
0
    def _load_config_data(self, file_name):
        try:
            config_obj = ConfigObj(file_name, raise_errors=True)
        except ConfigObjError as e:
            raise InvalidProfileException("Cannot parse '%s'." % file_name, e)

        config = collections.OrderedDict()
        for section in config_obj.keys():
            config[section] = collections.OrderedDict()
            for option in config_obj[section].keys():
                config[section][option] = config_obj[section][option]

        # TODO: HACK, this needs to be solved in a better way (better config parser)
        for unit_name in config:
            if "script" in config[unit_name] and config[unit_name].get(
                    "script", None) is not None:
                dir_name = os.path.dirname(file_name)
                script_path = os.path.join(dir_name,
                                           config[unit_name]["script"])
                config[unit_name]["script"] = [os.path.normpath(script_path)]

        return config
Exemplo n.º 8
0
	def load(self, profile_names):
		if type(profile_names) is not list:
			profile_names = profile_names.split()

		profile_names = filter(self.safe_name, profile_names)
		if len(profile_names) == 0:
			raise InvalidProfileException("No profile or invalid profiles were specified.")

		if len(profile_names) > 1:
			log.info("loading profiles: %s" % ", ".join(profile_names))
		else:
			log.info("loading profile: %s" % profile_names[0])
		profiles = []
		processed_files = []
		self._load_profile(profile_names, profiles, processed_files)

		if len(profiles) > 1:
			final_profile = self._profile_merger.merge(profiles)
		else:
			final_profile = profiles[0]

		final_profile.name = " ".join(profile_names)
		return final_profile