Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014Typ5sXWNMFirr2va2uL8o
69 lines
2.5 KiB
Python
69 lines
2.5 KiB
Python
"""Команды jira-hub: init (настройки из config.example.json), serve (HTTP), import (CSV-пакет), mcp (stdio), tokens."""
|
||
import argparse
|
||
import json
|
||
import sys
|
||
|
||
from . import db, importer, paths, settings
|
||
|
||
|
||
def main(argv=None) -> int:
|
||
ap = argparse.ArgumentParser(prog="jira-hub", description="Мост Jira для АРМ КА: хаб")
|
||
sub = ap.add_subparsers(dest="cmd", required=True)
|
||
p = sub.add_parser("init", help="перенести настройки проекта из config.example.json, создать токены")
|
||
p.add_argument("--config", required=True)
|
||
p.add_argument("--force", action="store_true")
|
||
p = sub.add_parser("serve", help="запустить HTTP API")
|
||
p.add_argument("--host", default="0.0.0.0")
|
||
p.add_argument("--port", type=int)
|
||
p = sub.add_parser("import", help="импорт CSV-пакета admin/jira-sync в заметки")
|
||
p.add_argument("folder")
|
||
sub.add_parser("mcp", help="MCP-сервер по stdio")
|
||
sub.add_parser("tokens", help="показать токены агента и клиента")
|
||
args = ap.parse_args(argv)
|
||
|
||
if args.cmd == "serve":
|
||
from . import api
|
||
hub = api.Hub(paths.db_path())
|
||
conn = hub.conn()
|
||
port = args.port or int(settings.get(conn, "port") or 8790)
|
||
conn.close()
|
||
api.serve(hub, args.host, port)
|
||
return 0
|
||
if args.cmd == "mcp":
|
||
from . import mcp_server
|
||
mcp_server.run()
|
||
return 0
|
||
|
||
conn = db.connect(paths.db_path())
|
||
settings.ensure_defaults(conn)
|
||
try:
|
||
if args.cmd == "init":
|
||
with open(args.config, encoding="utf-8") as f:
|
||
cfg = json.load(f)
|
||
try:
|
||
keys = settings.init_from_config(conn, cfg, force=args.force)
|
||
except RuntimeError as e:
|
||
print(e, file=sys.stderr)
|
||
return 1
|
||
print("перенесено: " + ", ".join(keys))
|
||
_print_tokens(conn)
|
||
return 0
|
||
if args.cmd == "import":
|
||
print(json.dumps(importer.import_package(conn, args.folder), ensure_ascii=False, indent=1))
|
||
return 0
|
||
if args.cmd == "tokens":
|
||
_print_tokens(conn)
|
||
return 0
|
||
finally:
|
||
conn.close()
|
||
return 2
|
||
|
||
|
||
def _print_tokens(conn) -> None:
|
||
tok = settings.tokens(conn)
|
||
print(f"агентский токен: {tok['agent']}\nклиентский токен: {tok['client']}\nбаза: {paths.db_path()}")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
sys.exit(main())
|