diff options
Diffstat (limited to '')
| -rw-r--r-- | patternutils/commands/patterncfg.py | 3 | ||||
| -rw-r--r-- | patternutils/config.py | 45 |
2 files changed, 43 insertions, 5 deletions
diff --git a/patternutils/commands/patterncfg.py b/patternutils/commands/patterncfg.py index 96e9ac7..062a6a5 100644 --- a/patternutils/commands/patterncfg.py +++ b/patternutils/commands/patterncfg.py @@ -1,5 +1,6 @@ import os import os.path +import itertools from typing import Optional @@ -28,7 +29,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 155789b..ec38ebe 100644 --- a/patternutils/config.py +++ b/patternutils/config.py @@ -1,5 +1,6 @@ import os.path import glob +import re import click @@ -7,6 +8,9 @@ from typing import Tuple, List, Optional 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.""" @@ -28,7 +32,40 @@ def load_template(template_name: str, command_name: Optional[str]) -> Tuple[str, def find_templates(template_name: str, command_name: Optional[str] = None) -> List[str]: - template_glob = '{}.*'.format(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)) + + regex = os.path.join(CONFIG_PATH, '{path_sub_regex}', r'{template_name}\.{extension}') + + if command_name is None: + # CONFIG_PATH/*/TEMPLATE_NAME.* + path_sub_regex = '.*' + extension = '.*' + elif command_name in REGEX_PROGRAMS: + path_sub_regex = '(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 = '(globals|{command_name})' + extension = '(jinja2|python)' + else: + # Fail over if command name is not know + # This should normally not happen + # CONFIG_PATH/COMMAND_NAME/TEMPLATE_NAME.* + path_sub_regex = '{command_name}' + extension = '.*' + + # We need to format command_name twice, as it can be used in the + # path_sub_regex + regex = regex.format( + path_sub_regex=path_sub_regex.format(command_name=command_name), + command_name=command_name, + template_name=template_name, + extension=extension + ) + compiled_regex = re.compile(regex) + + files = filter(compiled_regex.search, glob.iglob(os.path.join(CONFIG_PATH, '*', '*'))) + + return list(files) |
