"""
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