HardToFindAGoodUserName's picture
Benchmark leaderboard by family + author region/institution
b5684f8 verified
Raw
History Blame Contribute Delete
2.23 kB
"""Authors + groups persistence."""
from __future__ import annotations
import json
import re
import sqlite3
from datetime import datetime
def slug(name: str) -> str:
return re.sub(r"[^a-z0-9]+", "-", name.lower()).strip("-")
def upsert_author(conn: sqlite3.Connection, *, author_id: str, name: str,
affiliation: str | None, s2_url: str | None, citations: int | None,
h_index: int | None, paper_ids: list[str], directions: str | None,
region: str | None = None) -> None:
conn.execute(
"""INSERT INTO authors
(id, name, affiliation, region, s2_url, citations, h_index, paper_ids_json,
directions, updated_at)
VALUES (?,?,?,?,?,?,?,?,?,?)
ON CONFLICT(id) DO UPDATE SET
affiliation=COALESCE(excluded.affiliation, affiliation),
region=COALESCE(excluded.region, region),
s2_url=COALESCE(excluded.s2_url, s2_url),
citations=COALESCE(excluded.citations, citations),
h_index=COALESCE(excluded.h_index, h_index),
paper_ids_json=excluded.paper_ids_json,
directions=COALESCE(excluded.directions, directions),
updated_at=excluded.updated_at""",
(author_id, name, affiliation, region, s2_url, citations, h_index, json.dumps(paper_ids),
directions, datetime.now().isoformat(timespec="seconds")),
)
def upsert_group(conn: sqlite3.Connection, *, group_id: str, name: str,
affiliation: str | None, member_ids: list[str], directions: str | None,
notable: list[str]) -> None:
conn.execute(
"""INSERT INTO groups (id, name, affiliation, member_ids_json, directions,
notable_json, updated_at)
VALUES (?,?,?,?,?,?,?)
ON CONFLICT(id) DO UPDATE SET
member_ids_json=excluded.member_ids_json,
directions=COALESCE(excluded.directions, directions),
notable_json=excluded.notable_json,
updated_at=excluded.updated_at""",
(group_id, name, affiliation, json.dumps(member_ids), directions, json.dumps(notable),
datetime.now().isoformat(timespec="seconds")),
)