Source code for simpleml.save_patterns.locations.disk

"""
Module for Disk based locations
"""

[docs]__author__ = "Elisha Yadgaran"
import shutil from os import makedirs from os.path import dirname, isfile, join from typing import Any, Dict, List, Optional from simpleml.registries import FILEPATH_REGISTRY from simpleml.save_patterns.base import BaseSerializer
[docs]class DiskIOMethods(object): @staticmethod
[docs] def copy_file(src: str, destination: str) -> None: # safety check for the destination path makedirs(dirname(destination), exist_ok=True) shutil.copy2(src, destination)
@staticmethod
[docs] def copy_directory(src: str, destination: str) -> None: # safety check for the destination path makedirs(dirname(destination), exist_ok=True) shutil.copytree(src, destination)
[docs]class FilestoreCopyFileLocation(BaseSerializer): @staticmethod
[docs] def serialize( filepath: str, source_directory: str = "system_temp", destination_directory: str = "filestore", **kwargs, ) -> Dict[str, str]: DiskIOMethods.copy_file( join(FILEPATH_REGISTRY.get(source_directory), filepath), join(FILEPATH_REGISTRY.get(destination_directory), filepath), ) return {"filepath": filepath, "source_directory": destination_directory}
@staticmethod
[docs] def deserialize( filepath: str, source_directory: str = "filestore", destination_directory: str = "system_temp", **kwargs, ) -> Dict[str, str]: DiskIOMethods.copy_file( join(FILEPATH_REGISTRY.get(source_directory), filepath), join(FILEPATH_REGISTRY.get(destination_directory), filepath), ) return {"filepath": filepath, "source_directory": destination_directory}
[docs]class FilestoreCopyFilesLocation(BaseSerializer): @staticmethod
[docs] def serialize( filepaths: List[str], source_directory: str = "system_temp", destination_directory: str = "filestore", **kwargs, ) -> Dict[str, str]: for filepath in filepaths: DiskIOMethods.copy_file( join(FILEPATH_REGISTRY.get(source_directory), filepath), join(FILEPATH_REGISTRY.get(destination_directory), filepath), ) return {"filepaths": filepaths, "source_directory": destination_directory}
@staticmethod
[docs] def deserialize( filepaths: List[str], source_directory: str = "filestore", destination_directory: str = "system_temp", **kwargs, ) -> Dict[str, str]: for filepath in filepaths: DiskIOMethods.copy_file( join(FILEPATH_REGISTRY.get(source_directory), filepath), join(FILEPATH_REGISTRY.get(destination_directory), filepath), ) return {"filepaths": filepaths, "source_directory": destination_directory}
[docs]class FilestoreCopyFolderLocation(BaseSerializer): @staticmethod
[docs] def serialize( filepath: str, source_directory: str = "system_temp", destination_directory: str = "filestore", **kwargs, ) -> Dict[str, str]: DiskIOMethods.copy_directory( join(FILEPATH_REGISTRY.get(source_directory), filepath), join(FILEPATH_REGISTRY.get(destination_directory), filepath), ) return {"filepath": filepath, "source_directory": destination_directory}
@staticmethod
[docs] def deserialize( filepath: str, source_directory: str = "filestore", destination_directory: str = "system_temp", **kwargs, ) -> Dict[str, str]: DiskIOMethods.copy_directory( join(FILEPATH_REGISTRY.get(source_directory), filepath), join(FILEPATH_REGISTRY.get(destination_directory), filepath), ) return {"filepath": filepath, "source_directory": destination_directory}
[docs]class FilestorePassthroughLocation(BaseSerializer): @staticmethod
[docs] def serialize(**kwargs) -> Dict[str, str]: return kwargs
@staticmethod
[docs] def deserialize(**kwargs) -> Dict[str, str]: return kwargs