diff options
Diffstat (limited to '')
| -rw-r--r-- | patternutils/commands/patterncfg.py | 7 | ||||
| -rw-r--r-- | patternutils/config.py | 39 |
2 files changed, 38 insertions, 8 deletions
diff --git a/patternutils/commands/patterncfg.py b/patternutils/commands/patterncfg.py index 3421f39..6b2f6ec 100644 --- a/patternutils/commands/patterncfg.py +++ b/patternutils/commands/patterncfg.py @@ -1,11 +1,10 @@ +import itertools import os import os.path from typing import Optional import click -from .. import config - try: from pygments import highlight # type: ignore from pygments.formatters import TerminalFormatter # type: ignore @@ -16,6 +15,8 @@ else: has_pygments = True +from .. import config + CURRENT_SUPPORTED_PROGRAMS = ("pmatch", "tmv", "targs", "tln") @@ -26,7 +27,7 @@ def patterncfg() -> None: @patterncfg.command(name="init", help="initialize config folders") def init() -> None: - for dir in CURRENT_SUPPORTED_PROGRAMS: + for dir in itertools.chain(CURRENT_SUPPORTED_PROGRAMS, ("globals",)): os.makedirs(os.path.join(config.CONFIG_PATH, dir), exist_ok=True) diff --git a/patternutils/config.py b/patternutils/config.py index c444478..f999b2e 100644 --- a/patternutils/config.py +++ b/patternutils/config.py @@ -1,11 +1,15 @@ import glob import os.path +import re from typing import Optional import click CONFIG_PATH = click.get_app_dir("patternutils") +REGEX_PROGRAMS = ("pmatch",) +TEMPLATE_PROGRAMS = ("tmv", "targs", "tln") + def load_template(template_name: str, command_name: Optional[str]) -> tuple[str, str]: """Load a template from the config directory.""" @@ -26,8 +30,33 @@ def load_template(template_name: str, command_name: Optional[str]) -> tuple[str, return output_pattern, template_engine -def find_templates(template_name: str, command_name: Optional[str] = None) -> list[str]: - template_glob = f"{template_name}.*" - command_glob = "*" if command_name is None else command_name - command_glob = os.path.join(CONFIG_PATH, command_glob) - return glob.glob(os.path.join(command_glob, template_glob)) +def find_templates(template_name: str, command_name: Optional[str] = None) -> List[str]: + + if command_name is None: + # CONFIG_PATH/*/TEMPLATE_NAME.* + path_sub_regex = ".*" + extension = ".*" + elif command_name in REGEX_PROGRAMS: + path_sub_regex = f"(globals|{command_name})" + extension = "regex" + elif command_name in TEMPLATE_PROGRAMS: + # CONFIG_PATH/globals/TEMPLATE_NAME.jinja2 + # CONFIG_PATH/globals/TEMPLATE_NAME.python + # CONFIG_PATH/COMMAND_NAME/TEMPLATE_NAME.jinja2 + # CONFIG_PATH/COMMAND_NAME/TEMPLATE_NAME.python + path_sub_regex = f"(globals|{command_name})" + extension = "(jinja2|python)" + else: + # Fail over if command name is not known to have a specific extension + # This should normally not happen + # CONFIG_PATH/COMMAND_NAME/TEMPLATE_NAME.* + path_sub_regex = f"{command_name}" + extension = ".*" + + regex = re.compile( + os.path.join(CONFIG_PATH, f"{path_sub_regex}", f"{template_name}\.{extension}") + ) + + files = filter(regex.search, glob.iglob(os.path.join(CONFIG_PATH, "*", "*"))) + + return list(files) |
