def create_storage(self, storage_key: str, storage_config: _cfg.StorageConfig, storage_options: dict = None): if storage_config is None: err = f"Missing config for storage key [{storage_key}]" self.__log.error(err) raise _ex.EStorageConfig(err) storage_instance = storage_config.instances[ 0] # Just use the first storage instance storage_type = storage_instance.storageType file_impl = self.__file_impls.get(storage_type) data_impl = self.__data_impls.get(storage_type) if file_impl is None or data_impl is None: err = f"Storage type [{storage_type}] is not available" self.__log.error(err) raise _ex.EStorageConfig(err) file_storage = file_impl(storage_instance, storage_options) data_storage = data_impl(storage_instance, file_storage) self.__file_storage[storage_key] = file_storage self.__data_storage[storage_key] = data_storage
def __init__(self, config: _cfg.StorageInstance, options: dict = None): self._log = _util.logger_for_object(self) self._options = options or {} root_path_config = config.storageProps.get( "rootPath") # TODO: Config / constants if not root_path_config or root_path_config.isspace(): err = f"Storage root path not set" self._log.error(err) raise _ex.EStorageRequest(err) supplied_root = pathlib.Path(root_path_config) if supplied_root.is_absolute(): absolute_root = supplied_root elif "sys_config_dir" in self._options: absolute_root = pathlib.Path( self._options["sys_config_dir"]).joinpath( supplied_root).absolute() else: err = f"Could not resolve relative path for storage root [{supplied_root}]" self._log.error(err) raise _ex.EStorageConfig(err) try: self.__root_path = absolute_root.resolve(strict=True) except FileNotFoundError as e: err = f"Storage root path does not exist: [{absolute_root}]" self._log.error(err) raise _ex.EStorageRequest(err) from e
def get_data_storage(self, storage_key: str) -> IDataStorage: if not self.has_data_storage(storage_key): err = f"Data storage is not configured for storage key [{storage_key}]" self.__log.error(err) raise _ex.EStorageConfig(err) return self.__data_storage[storage_key]
def get_file_storage(self, storage_key: str) -> IFileStorage: if not self.has_file_storage(storage_key): err = f"File storage is not configured for storage key [{storage_key}]" self.__log.error(err) raise _ex.EStorageConfig(err) return self.__file_storage[storage_key]
def extension_for_format(cls, format_code: str) -> str: extension = cls.__format_to_extension.get(format_code.lower()) if extension is None: raise _ex.EStorageConfig( f"Unsupported storage format [{format_code}]") return extension
def get_data_format(cls, format_code: str, format_options: tp.Dict[str, tp.Any]) -> IDataFormat: format_impl = cls.__formats.get(format_code.lower()) if format_impl is None: raise _ex.EStorageConfig( f"Unsupported storage format [{format_code}]") return format_impl.__call__(format_options)
def format_for_extension(cls, extension: str) -> str: if extension.startswith("."): extension = extension[1:] format_code = cls.__extension_to_format[extension] if format_code is None: raise _ex.EStorageConfig( f"No storage format is registered for file extension [{extension}]" ) return extension