Source code for doitoml.skippers.path
"""Path skippers."""
from pathlib import Path
from typing import TYPE_CHECKING, Any
from doitoml.errors import SkipError
from doitoml.skippers._skipper import Skipper
if TYPE_CHECKING:
from doitoml.sources._config import ConfigSource
[docs]
class Exists(Skipper):
"""A skipper that skips if all given paths exist."""
[docs]
def should_skip(self, source: "ConfigSource", skip: Any) -> bool:
"""Skip if (any) given path does not exist."""
if not isinstance(skip, (str, tuple, list)):
message = f"{source} Cannot skip `exists`: {skip}"
raise SkipError(message)
if isinstance(skip, str):
skip = [skip]
for one_skip in skip:
spec_paths = self.doitoml.config.resolve_one_path_spec(
source,
one_skip,
source_relative=True,
)
if not spec_paths:
return False
for spec in spec_paths:
if not Path(spec).exists():
return False
return True