Source code for pib_cli.support.iterators.bases.file_copy_base

"""FileCopyIteratorBase class."""

import abc
import glob
from typing import NamedTuple

SourceDestinationPair = NamedTuple(
    "SourceDestinationPair",
    [
        ("source", str),
        ("destination", str),
    ],
)


[docs]class FileCopyIteratorBase(abc.ABC): """A base iterator for generating pairs of source, destination files. Creates a sequence of :class:`.SourceDestinationPair`. """ glob_pattern: str def __init__(self) -> None: self.files = glob.glob(self.glob_pattern)
[docs] @abc.abstractmethod def hook_create_destination(self, current_source: str) -> str: """Override to construct the file's destination path. :param current_source: The path to the source file. """
def __next__(self) -> SourceDestinationPair: while self.files: current_source = self.files.pop() current_destination = self.hook_create_destination(current_source) return_value = SourceDestinationPair(current_source, current_destination) return return_value raise StopIteration def __iter__(self) -> "FileCopyIteratorBase": return self