def __init__( self, default_config_file: str = None, override_config_file: str = None, validate_schema: bool = True, legacy_compatibility: bool = True, ): # Default configuraiton if default_config_file is None: default_config_file = os.path.join(os.path.dirname(__file__), "default_bentoml.yml") with open(default_config_file, "rb") as f: self.config = YAML().load(f.read()) if validate_schema: try: SCHEMA.validate(self.config) except SchemaError as e: raise BentoMLConfigException( "Default configuration 'default_bentoml.yml' does not" " conform to the required schema.") from e # Legacy configuration compatibility if legacy_compatibility: try: self.config["bento_server"]["port"] = config( "apiserver").getint("default_port") self.config["bento_server"]["workers"] = config( "apiserver").getint("default_gunicorn_workers_count") self.config["bento_server"]["max_request_size"] = config( "apiserver").getint("default_max_request_size") if "default_max_batch_size" in config("marshal_server"): self.config["bento_server"]["microbatch"][ "max_batch_size"] = config("marshal_server").getint( "default_max_batch_size") if "default_max_latency" in config("marshal_server"): self.config["bento_server"]["microbatch"][ "max_latency"] = config("marshal_server").getint( "default_max_latency") self.config["bento_server"]["metrics"]["namespace"] = config( "instrument").get("default_namespace") self.config["adapters"]["image_input"][ "default_extensions"] = [ extension.strip() for extension in config("apiserver").get( "default_image_input_accept_file_extensions"). split(",") ] except KeyError as e: raise BentoMLConfigException( "Overriding a non-existent configuration key in compatibility mode." ) from e if validate_schema: try: SCHEMA.validate(self.config) except SchemaError as e: raise BentoMLConfigException( "Configuration after applying legacy compatibility" " does not conform to the required schema.") from e # User override configuration if override_config_file is not None: LOGGER.info("Applying user config override from %s" % override_config_file) if not os.path.exists(override_config_file): raise BentoMLConfigException( f"Config file {override_config_file} not found") with open(override_config_file, "rb") as f: override_config = YAML().load(f.read()) always_merger.merge(self.config, override_config) if validate_schema: try: SCHEMA.validate(self.config) except SchemaError as e: raise BentoMLConfigException( "Configuration after user override does not conform to" " the required schema.") from e
def __init__( self, default_config_file: str = None, override_config_file: str = None, validate_schema: bool = True, legacy_compatibility: bool = True, ): # Default configuraiton if default_config_file is None: default_config_file = os.path.join(os.path.dirname(__file__), "default_bentoml.yml") with open(default_config_file, "rb") as f: self.config = YAML().load(f.read()) if validate_schema: try: SCHEMA.validate(self.config) except SchemaError as e: raise BentoMLConfigException( "Default configuration 'default_bentoml.yml' does not" " conform to the required schema.") from e # Legacy configuration compatibility if legacy_compatibility: try: self.config["api_server"]["port"] = config("apiserver").getint( "default_port") self.config["api_server"]["max_request_size"] = config( "apiserver").getint("default_max_request_size") self.config["marshal_server"]["max_batch_size"] = config( "marshal_server").getint("default_max_batch_size") self.config["marshal_server"]["max_latency"] = config( "marshal_server").getint("default_max_latency") self.config["marshal_server"]["request_header_flag"] = config( "marshal_server").get("marshal_request_header_flag") self.config["yatai"]["url"] = config("yatai_service").get( "url") self.config["tracing"]["zipkin_api_url"] = config( "tracing").get("zipkin_api_url") self.config["instrument"]["namespace"] = config( "instrument").get("default_namespace") except KeyError as e: raise BentoMLConfigException( "Overriding a non-existent configuration key in compatibility mode." ) from e if validate_schema: try: SCHEMA.validate(self.config) except SchemaError as e: raise BentoMLConfigException( "Configuration after applying legacy compatibility" " does not conform to the required schema.") from e # User override configuration if override_config_file is not None and os.path.exists( override_config_file): LOGGER.info("Applying user config override from %s" % override_config_file) with open(override_config_file, "rb") as f: override_config = YAML().load(f.read()) always_merger.merge(self.config, override_config) if validate_schema: try: SCHEMA.validate(self.config) except SchemaError as e: raise BentoMLConfigException( "Configuration after user override does not conform to" " the required schema.") from e