Release 0.3.1: baseconf help, GPL v3, author Michael BAG.
Улучшена справка --help подкоманд (--baseconf до/после подкоманды), добавлены LICENSE (GPL v3 EN) и LICENSE.ru (справочный перевод), контакты mk@p7net.ru. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+4
-1
@@ -2,8 +2,11 @@
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
__version__ = "0.3.0"
|
||||
__version__ = "0.3.1"
|
||||
__status__ = "in development"
|
||||
__author__ = "Michael BAG"
|
||||
__email__ = "mk@p7net.ru"
|
||||
__license__ = "GPL-3.0-or-later"
|
||||
|
||||
|
||||
def read_version_file() -> str:
|
||||
|
||||
+64
-3
@@ -62,8 +62,16 @@ def add_tool_args(parser: argparse.ArgumentParser) -> None:
|
||||
)
|
||||
|
||||
|
||||
def add_baseconf_args(parser: argparse.ArgumentParser) -> None:
|
||||
def add_baseconf_args(
|
||||
parser: argparse.ArgumentParser,
|
||||
*,
|
||||
mode: str = "query",
|
||||
) -> None:
|
||||
"""Фильтр по выгрузке конфигурации 1С в репозитории."""
|
||||
if mode == "index":
|
||||
default_hint = "Без параметра — индексировать все выгрузки с src/ в репозитории."
|
||||
else:
|
||||
default_hint = "Без параметра — поиск по всем проиндексированным."
|
||||
parser.add_argument(
|
||||
"--baseconf",
|
||||
"-b",
|
||||
@@ -72,12 +80,65 @@ def add_baseconf_args(parser: argparse.ArgumentParser) -> None:
|
||||
dest="baseconf",
|
||||
help=(
|
||||
"Конфигурация 1С в репозитории (папка <name>/src/). "
|
||||
"Можно несколько раз. Алиасы: target→crm3-26, source→crm3-dev. "
|
||||
"Без параметра — поиск по всем проиндексированным."
|
||||
"Можно несколько раз или через запятую: -b target,source. "
|
||||
"Алиасы: target→crm3-26, source→crm3-dev. "
|
||||
f"{default_hint}"
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
def make_parent_parser(*, include_baseconf: bool = True, baseconf_mode: str = "query") -> argparse.ArgumentParser:
|
||||
"""Общие опции для подкоманд (--config, --root, опционально --baseconf)."""
|
||||
p = argparse.ArgumentParser(add_help=False)
|
||||
add_tool_args(p)
|
||||
if include_baseconf:
|
||||
add_baseconf_args(p, mode=baseconf_mode)
|
||||
return p
|
||||
|
||||
|
||||
def extract_baseconf_argv(argv: list[str]) -> tuple[list[str], list[str]]:
|
||||
"""
|
||||
Извлечь все -b / --baseconf из argv (до или после подкоманды).
|
||||
Возвращает (значения baseconf, argv без этих аргументов).
|
||||
"""
|
||||
baseconfs: list[str] = []
|
||||
rest: list[str] = []
|
||||
i = 0
|
||||
while i < len(argv):
|
||||
tok = argv[i]
|
||||
if tok in ("-b", "--baseconf"):
|
||||
if i + 1 >= len(argv):
|
||||
rest.append(tok)
|
||||
break
|
||||
baseconfs.append(argv[i + 1])
|
||||
i += 2
|
||||
continue
|
||||
if tok.startswith("--baseconf="):
|
||||
baseconfs.append(tok.split("=", 1)[1])
|
||||
i += 1
|
||||
continue
|
||||
if tok.startswith("-b") and len(tok) > 2:
|
||||
baseconfs.append(tok[2:])
|
||||
i += 1
|
||||
continue
|
||||
rest.append(tok)
|
||||
i += 1
|
||||
return baseconfs, rest
|
||||
|
||||
|
||||
def merge_baseconf_args(args: argparse.Namespace, extra: list[str] | None) -> None:
|
||||
"""Объединить baseconf из argv и argparse (in-place)."""
|
||||
if not extra:
|
||||
return
|
||||
current = list(getattr(args, "baseconf", None) or [])
|
||||
seen = set(current)
|
||||
for item in extra:
|
||||
if item not in seen:
|
||||
seen.add(item)
|
||||
current.append(item)
|
||||
args.baseconf = current or None
|
||||
|
||||
|
||||
def resolve_baseconf_names(raw: list[str] | None) -> list[str]:
|
||||
"""Разрешить алиасы имён конфигураций 1С (без проверки индекса)."""
|
||||
if not raw:
|
||||
|
||||
Reference in New Issue
Block a user