APA-URAAS / scripts /migrate_add_pid_source.py
Lordkiki's picture
Deploy URAAS — African Research Archival & Analytics System
dd2635a verified
Raw
History Blame Contribute Delete
1.63 kB
"""
Schema migration: add pid_source column to items table, and backfill it for
existing rows. Idempotent.
"""
import os
import sys
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from sqlalchemy import inspect, text
from uraas.database import engine
def column_exists(table: str, column: str) -> bool:
insp = inspect(engine)
return column in {c["name"] for c in insp.get_columns(table)}
def main() -> int:
print("Migration: adding pid_source to items")
dialect = engine.dialect.name
print(f"Dialect: {dialect}")
if not column_exists("items", "pid_source"):
with engine.begin() as conn:
print(" -> ALTER TABLE items ADD COLUMN pid_source VARCHAR(20)")
conn.execute(text("ALTER TABLE items ADD COLUMN pid_source VARCHAR(20)"))
else:
print(" pid_source already present, skipping ALTER")
with engine.begin() as conn:
r1 = conn.execute(
text(
"UPDATE items SET pid_source = 'handle' "
"WHERE pid_source IS NULL "
"AND source_repository LIKE '%IR (OAI-PMH)%' "
"AND url LIKE '%/handle/%'"
)
)
print(f" -> backfilled pid_source='handle' on {r1.rowcount} rows")
r2 = conn.execute(
text(
"UPDATE items SET pid_source = 'ark' "
"WHERE pid_source IS NULL AND ark IS NOT NULL"
)
)
print(f" -> backfilled pid_source='ark' on {r2.rowcount} rows")
print("Done.")
return 0
if __name__ == "__main__":
sys.exit(main())