Source code for project_config.plugins.existence

"""Conditional files existence checker plugin."""

from __future__ import annotations

import os
import typing as t

from project_config import (
    ActionsContext,
    InterruptingError,
    Results,
    ResultValue,
    Rule,
    Tree,
)


[docs]class ExistencePlugin:
[docs] @staticmethod def ifFilesExist( value: t.List[str], tree: Tree, rule: Rule, context: ActionsContext, ) -> Results: if not isinstance(value, list): yield ( InterruptingError, { "message": ( "The files to check for existence" " must be of type array" ), "definition": ".ifFilesExist", }, ) return elif not value: yield ( InterruptingError, { "message": ( "The files to check for existence must not be empty" ), "definition": ".ifFilesExist", }, ) return for f, fpath in enumerate(value): if not isinstance(fpath, str): yield ( InterruptingError, { "message": ( "The file to check for existence" " must be of type string" ), "definition": f".ifFilesExist[{f}]", }, ) continue normalized_fpath = tree.normalize_path(fpath) if fpath.endswith("/"): if not os.path.isdir(normalized_fpath): yield ResultValue, False elif not os.path.isfile(normalized_fpath): yield ResultValue, False