Source code for faker_file.storages.filesystem

import os
import tempfile
from typing import Optional

from ..base import DEFAULT_REL_PATH
from .base import BaseStorage

__author__ = "Artur Barseghyan <artur.barseghyan@gmail.com>"
__copyright__ = "2022-2025 Artur Barseghyan"
__license__ = "MIT"
__all__ = ("FileSystemStorage",)


[docs] class FileSystemStorage(BaseStorage): """File storage. Usage example: .. code-block:: python from faker_file.storages.filesystem import FileSystemStorage storage = FileSystemStorage() file = storage.generate_filename(prefix="zzz_", extension="docx") storage.write_text(file, "Lorem ipsum") storage.write_bytes(file, b"Lorem ipsum") Initialization with params: .. code-block:: python storage = FileSystemStorage() """ def __init__( self: "FileSystemStorage", root_path: Optional[str] = tempfile.gettempdir(), rel_path: Optional[str] = DEFAULT_REL_PATH, *args, **kwargs, ) -> None: """ :param root_path: Path of your files root directory (in case of Django it would be `settings.MEDIA_ROOT`). :param rel_path: Relative path (from root directory). """ self.root_path = root_path or "" self.rel_path = rel_path or "" super().__init__(*args, **kwargs)
[docs] def generate_filename( self: "FileSystemStorage", extension: str, prefix: Optional[str] = None, basename: Optional[str] = None, ) -> str: """Generate filename.""" dir_path = os.path.join(self.root_path, self.rel_path) os.makedirs(dir_path, exist_ok=True) if not extension: raise Exception("Extension shall be given!") if not basename: basename = self.generate_basename(prefix) return os.path.join(dir_path, f"{basename}.{extension}")
# if basename: # return os.path.join(dir_path, f"{basename}.{extension}") # else: # with tempfile.NamedTemporaryFile( # prefix=prefix, # dir=dir_path, # suffix=f".{extension}", # ) as temp_file: # return temp_file.name
[docs] def write_text( self: "FileSystemStorage", filename: str, data: str, encoding: Optional[str] = None, ) -> int: """Write text.""" with open(filename, "w") as file: return file.write(data)
[docs] def write_bytes( self: "FileSystemStorage", filename: str, data: bytes, ) -> int: """Write bytes.""" with open(filename, "wb") as file: return file.write(data)
[docs] def exists(self: "FileSystemStorage", filename: str) -> bool: """Check if file exists.""" if os.path.isabs(filename): return os.path.exists(filename) return os.path.exists(os.path.join(self.root_path, filename))
[docs] def relpath(self: "FileSystemStorage", filename: str) -> str: """Return relative path.""" return os.path.relpath(filename, self.root_path)
[docs] def abspath(self: "FileSystemStorage", filename: str) -> str: """Return absolute path.""" if os.path.isabs(filename): return os.path.abspath(filename) return os.path.abspath(os.path.join(self.root_path, filename))