summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--patternutils/commands/patterncfg.py3
-rw-r--r--patternutils/config.py45
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)