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