40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
#!/usr/bin/env python3
|
|
"""Export the bounded EXERCISE_MERGE_V1 identity companion."""
|
|
import argparse
|
|
import json
|
|
import sqlite3
|
|
from pathlib import Path
|
|
from trainlog_sqlite import connect_database
|
|
|
|
MAX_ALIASES = 4096
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("output", type=Path)
|
|
parser.add_argument("--database", type=Path, required=True)
|
|
args = parser.parse_args()
|
|
con = connect_database(args.database)
|
|
try:
|
|
if con.execute("PRAGMA user_version").fetchone()[0] not in (
|
|
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36):
|
|
raise ValueError("schema desktop v12-v36 requis")
|
|
rows = con.execute(
|
|
"SELECT source_exercise_id,canonical_exercise_id FROM exercise_aliases "
|
|
"ORDER BY source_exercise_id COLLATE BINARY"
|
|
).fetchall()
|
|
if len(rows) > MAX_ALIASES:
|
|
raise ValueError("trop d'alias exercice")
|
|
payload = {"format": "trainlog-exercise-aliases", "version": 1,
|
|
"aliases": [{"source_exercise_id": row[0],
|
|
"canonical_exercise_id": row[1]} for row in rows]}
|
|
args.output.parent.mkdir(parents=True, exist_ok=True)
|
|
args.output.write_text(json.dumps(payload, ensure_ascii=False,
|
|
separators=(",", ":")), encoding="utf-8")
|
|
finally:
|
|
con.close()
|
|
print(f"EXERCISE_ALIAS_EXPORT=PASS aliases={len(rows)}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|