示例#1
0
文件: processor.py 项目: bbglab/wok
class ConfigProcessor(object):
	def __init__(self, logger, path, args_files, args_data, req_files=None, req_keys=None):
		self.log = logger
		self.conf_path = path

		req_files = req_files or []
		req_keys = req_keys or []

		self.conf_keys = req_keys

		self.required_conf_files = [os.path.join(self.conf_path, cf) for cf in req_files]

		self.conf_files = []
		if args_files is not None:
			for cf in args_files:
				if not os.path.isabs(cf):
					cf = os.path.join(os.getcwd(), cf)
				self.conf_files += [cf]

		self.conf_data = args_data or []

		self.conf_builder = ConfigBuilder()

	def load_files(self):
		conf_files = self.required_conf_files

		user_conf_file = os.path.join(self.conf_path, "user.conf")
		if os.path.exists(user_conf_file):
			conf_files += [user_conf_file]

		conf_files += self.conf_files

		# Check that configuration files exist

		missing_conf_files = [cf for cf in conf_files if not os.path.exists(cf)]
		if len(missing_conf_files) > 0:
			self.log.error("Configuration files not found:\n{}".format(
							"\n".join("  {}".format(cf) for cf in missing_conf_files)))
			exit(-1)

		for cf in conf_files:
			self.conf_builder.add_file(cf)

		return self.conf_builder

	def parse_data(self):
		for data in self.conf_data:
			try:
				pos = data.index("=")
				key = data[0:pos]
				value = data[pos+1:]
				try:
					v = json.loads(value)
				except:
					v = value
				self.conf_builder.add_value(key, v)
			except:
				raise Exception("Wrong configuration data: KEY=VALUE expected but found '{}'".format(data))

		return self.conf_builder

	def load(self):
		self.load_files()
		self.parse_data()

	def validated_conf(self, expand_vars=True):
		self.conf = self.conf_builder.get_conf()
		if expand_vars:
			self.conf.expand_vars()

		#self.log.debug(repr(self.conf))

		# Validate that required keys exist

		mk = self.conf.missing_keys(self.conf_keys)
		if len(mk) > 0:
			sb = ["The following configuration parameters were not found:\n",
					"\n".join("* " + k for k in mk),
					"\nin any of the following configuration files:\n",
					"\n".join("* " + k for k in conf_files)]
			self.log.error("".join(sb))
			exit(-1)

		return self.conf

	def log_debug(self):
		if len(self.conf_files) > 0:
			self.log.debug("User defined configuration files:\n{}".format(
							"\n".join("  {}".format(cf) for cf in self.conf_files)))

		self.log.debug("Effective configuration: " + str(self.conf))
示例#2
0
class ConfigProcessor(object):
    def __init__(self,
                 logger,
                 path,
                 args_files,
                 args_data,
                 req_files=None,
                 req_keys=None):
        self.log = logger
        self.conf_path = path

        req_files = req_files or []
        req_keys = req_keys or []

        self.conf_keys = req_keys

        self.required_conf_files = [
            os.path.join(self.conf_path, cf) for cf in req_files
        ]

        self.conf_files = []
        if args_files is not None:
            for cf in args_files:
                if not os.path.isabs(cf):
                    cf = os.path.join(os.getcwd(), cf)
                self.conf_files += [cf]

        self.conf_data = args_data or []

        self.conf_builder = ConfigBuilder()

    def load_files(self):
        conf_files = self.required_conf_files

        user_conf_file = os.path.join(self.conf_path, "user.conf")
        if os.path.exists(user_conf_file):
            conf_files += [user_conf_file]

        conf_files += self.conf_files

        # Check that configuration files exist

        missing_conf_files = [
            cf for cf in conf_files if not os.path.exists(cf)
        ]
        if len(missing_conf_files) > 0:
            self.log.error("Configuration files not found:\n{}".format(
                "\n".join("  {}".format(cf) for cf in missing_conf_files)))
            exit(-1)

        for cf in conf_files:
            self.conf_builder.add_file(cf)

        return self.conf_builder

    def parse_data(self):
        for data in self.conf_data:
            try:
                pos = data.index("=")
                key = data[0:pos]
                value = data[pos + 1:]
                try:
                    v = json.loads(value)
                except:
                    v = value
                self.conf_builder.add_value(key, v)
            except:
                raise Exception(
                    "Wrong configuration data: KEY=VALUE expected but found '{}'"
                    .format(data))

        return self.conf_builder

    def load(self):
        self.load_files()
        self.parse_data()

    def validated_conf(self, expand_vars=True):
        self.conf = self.conf_builder.get_conf()
        if expand_vars:
            self.conf.expand_vars()

        #self.log.debug(repr(self.conf))

        # Validate that required keys exist

        mk = self.conf.missing_keys(self.conf_keys)
        if len(mk) > 0:
            sb = [
                "The following configuration parameters were not found:\n",
                "\n".join("* " + k for k in mk),
                "\nin any of the following configuration files:\n",
                "\n".join("* " + k for k in conf_files)
            ]
            self.log.error("".join(sb))
            exit(-1)

        return self.conf

    def log_debug(self):
        if len(self.conf_files) > 0:
            self.log.debug("User defined configuration files:\n{}".format(
                "\n".join("  {}".format(cf) for cf in self.conf_files)))

        self.log.debug("Effective configuration: " + str(self.conf))