"""Заполнить зеркало тестового хаба фикстурой доски и записать токены рядом с базой (для e2e и npm run dev). Пишет в базу напрямую (mirror.apply_state, set_note), до запуска serve: гонки с первым запросом нет. Дополнения только для тестового хаба (описание, комментарии, команды) — из seed-extras.json рядом со скриптом.""" import json import sys from pathlib import Path from jira_hub.core import db, paths, settings from jira_hub.modules.jira import mirror snap = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8")) extras_path = Path(__file__).with_name("seed-extras.json") extras = json.loads(extras_path.read_text(encoding="utf-8")) if extras_path.exists() else {} extra_issues = extras.get("issues", {}) conn = db.connect(paths.db_path()) settings.ensure_defaults(conn) def own_labels(i): # свои задачи (не соседи) принадлежат проекту AWPCA: метка нужна для разреза GET /board?project=AWPCA labels = list(i.get("labels") or []) return labels if i["neighbor"] or "AWPCA" in labels else ["AWPCA", *labels] issues = [{k: v for k, v in i.items() if k not in ("fact_status", "work_kind", "neighbor")} | {"id": i["key"]} | {"labels": own_labels(i)} | extra_issues.get(i["key"], {}) for i in snap["issues"]] links = [{"source_key": l["source"], "target_key": l["target"], "link_type": l["link_type"]} for l in snap["links"]] mirror.apply_state(conn, issues, links, neighbor_keys=[i["key"] for i in snap["issues"] if i["neighbor"]]) for i in snap["issues"]: note = {k: i[k] for k in ("fact_status", "work_kind") if i.get(k)} if note: mirror.set_note(conn, i["key"], note, "seed") if extras.get("commands"): # завершённые команды по задачам — для раздела «Команды моста» карточки with db.transaction(conn): batch = conn.execute("INSERT INTO batch(title, author, created_at) VALUES ('Тестовые команды', 'seed', ?)", (db.now(),)).lastrowid for seq, c in enumerate(extras["commands"], 1): conn.execute("INSERT INTO command(batch_id, seq, type, params, status, finished_at, error) " "VALUES (?, ?, ?, ?, ?, ?, ?)", (batch, seq, c["type"], json.dumps(c["params"], ensure_ascii=False), c["status"], db.now(), c.get("error"))) (paths.home() / "tokens.json").write_text(json.dumps(settings.tokens(conn)), encoding="utf-8") conn.close() print("зеркало:", len(issues), "задач,", len(links), "связей; токены —", paths.home() / "tokens.json")