Files
export_1c_help/export_1c_help.py
T
mihailkudravcev aec0407b87 Initial release: export 1C Help to Gitea wiki.
Convert Ext/Help/ru.html to Markdown and push to a wiki git repository.
2026-07-23 14:54:04 +03:00

177 lines
5.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""CLI: export 1C Help (ru.html) to Markdown / Gitea wiki."""
from __future__ import annotations
import argparse
import sys
from pathlib import Path
TOOL_ROOT = Path(__file__).resolve().parent
if str(TOOL_ROOT) not in sys.path:
sys.path.insert(0, str(TOOL_ROOT))
from export1c_help import __status__, __version__ # noqa: E402
from export1c_help.export import export_help # noqa: E402
from export1c_help.wiki import WikiPushError, push_wiki # noqa: E402
def build_parser() -> argparse.ArgumentParser:
p = argparse.ArgumentParser(
prog="export_1c_help",
description=(
f"Выгрузка встроенной справки 1С (Ext/Help/ru.html) в Markdown / Gitea wiki. "
f"v{__version__} ({__status__})."
),
)
p.add_argument("--version", action="version", version=f"%(prog)s {__version__}")
sub = p.add_subparsers(dest="cmd", required=True)
c = sub.add_parser("convert", help="Конвертация Help → Markdown в каталог")
c.add_argument(
"-s",
"--src",
type=Path,
required=True,
help="Каталог src выгрузки конфигурации (…/crm3-26/src)",
)
c.add_argument(
"-o",
"--out",
type=Path,
required=True,
help="Каталог результата (wiki working tree)",
)
c.add_argument(
"--objects-only",
action="store_true",
help="Только справка объектов (без Forms/*/Ext/Help)",
)
c.add_argument(
"--keep-empty",
action="store_true",
help="Не пропускать почти пустые страницы",
)
c.add_argument(
"--clean",
action="store_true",
help="Очистить --out перед записью (кроме .git)",
)
c.add_argument(
"--source-label",
default=None,
help="Подпись источника в Home.md",
)
c.set_defaults(func=cmd_convert)
w = sub.add_parser("push", help="convert + push в Gitea wiki (.wiki.git)")
w.add_argument("-s", "--src", type=Path, required=True)
w.add_argument(
"--wiki-url",
required=True,
help="URL wiki-репозитория, напр. https://git.p7net.ru/1c/crm3_26.wiki.git",
)
w.add_argument(
"--work-dir",
type=Path,
default=None,
help="Локальный clone wiki (по умолчанию: <out>/.wiki_clone)",
)
w.add_argument(
"-o",
"--out",
type=Path,
default=None,
help="Промежуточный каталог MD (по умолчанию: ./out/wiki-md)",
)
w.add_argument("--objects-only", action="store_true")
w.add_argument("--keep-empty", action="store_true")
w.add_argument(
"--keep-unmanaged",
action="store_true",
help="Не удалять чужие .md в wiki перед копированием",
)
w.add_argument(
"-m",
"--message",
default=None,
help="Сообщение коммита wiki",
)
w.add_argument("--branch", default="main")
w.add_argument(
"--dry-run",
action="store_true",
help="Только convert, без git push",
)
w.set_defaults(func=cmd_push)
return p
def cmd_convert(args: argparse.Namespace) -> int:
stats = export_help(
args.src,
args.out,
include_forms=not args.objects_only,
skip_empty=not args.keep_empty,
clean=args.clean,
source_label=args.source_label,
)
print(
f"OK: written={stats.pages_written} "
f"skipped_empty={stats.pages_skipped_empty} "
f"total={stats.pages_total} "
f"images={stats.images_copied}{args.out}"
)
return 0
def cmd_push(args: argparse.Namespace) -> int:
out = args.out or (TOOL_ROOT / "out" / "wiki-md")
work = args.work_dir or (out.parent / "wiki_clone")
stats = export_help(
args.src,
out,
include_forms=not args.objects_only,
skip_empty=not args.keep_empty,
clean=True,
source_label=str(args.src),
)
print(
f"convert: written={stats.pages_written} "
f"skipped_empty={stats.pages_skipped_empty} "
f"total={stats.pages_total}{out}"
)
if args.dry_run:
print("dry-run: push skipped")
return 0
message = args.message or (
f"export_1c_help v{__version__}: sync help ({stats.pages_written} pages)"
)
try:
push_wiki(
out,
args.wiki_url,
work_dir=work,
message=message,
branch=args.branch,
keep_unmanaged=args.keep_unmanaged,
)
except WikiPushError as exc:
print(f"push failed:\n{exc}", file=sys.stderr)
return 1
print(f"OK: pushed → {args.wiki_url}")
return 0
def main(argv: list[str] | None = None) -> int:
parser = build_parser()
args = parser.parse_args(argv)
return args.func(args)
if __name__ == "__main__":
raise SystemExit(main())