Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #3
0
    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]
Beispiel #4
0
    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]
Beispiel #5
0
    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
Beispiel #6
0
    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)
Beispiel #7
0
    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