Source code for faker_file.registry

import logging
from threading import Lock
from typing import Optional, Set, Union

from .base import StringValue

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


LOGGER = logging.getLogger(__name__)


[docs]class FileRegistry: """Stores list `StringValue` instances. .. code-block:: python from faker import Faker from faker_file.providers.txt_file import TxtFileProvider FAKER = Faker() FAKER.add_provider(TxtFileProvider) txt_file_1 = FAKER.txt_file() txt_file_2 = FAKER.txt_file() ... txt_file_n = FAKER.txt_file() # The FileRegistry._registry would then contain this: { txt_file_1, txt_file_2, ..., txt_file_n, } """ def __init__(self): self._registry: Set[StringValue] = set() self._lock = Lock()
[docs] def add(self, string_value: StringValue) -> None: with self._lock: self._registry.add(string_value)
[docs] def remove(self, string_value: Union[StringValue, str]) -> bool: if not isinstance(string_value, StringValue): string_value = self.search(string_value) if not string_value: return False with self._lock: # No error if the element doesn't exist self._registry.discard(string_value) try: string_value.data["storage"].unlink( string_value.data["filename"] ) return True except Exception as e: LOGGER.error( f"Failed to unlink file " f"{string_value.data['filename']}: {e}" ) return False
[docs] def search(self, value: str) -> Optional[StringValue]: with self._lock: for string_value in self._registry: if string_value == value: return string_value return None
[docs] def clean_up(self) -> None: with self._lock: while self._registry: file = self._registry.pop() try: file.data["storage"].unlink(file.data["filename"]) except Exception as err: LOGGER.error( f"Failed to unlink file {file.data['filename']}: {err}" )
FILE_REGISTRY = FileRegistry()