122 lines
3.7 KiB
Python
122 lines
3.7 KiB
Python
"""Upload COMP2211 course-library PDFs to Supabase Storage.
|
|
|
|
Run from the backend directory:
|
|
uv run python upload_course_library_pdfs.py
|
|
|
|
Each entry maps a storage path (inside the `papers` bucket) to the local
|
|
source file under pastpaper-scraper/papers/COMP2211/.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Manifest: (storage_path, local_filename)
|
|
# storage_path is relative inside the `papers` bucket.
|
|
# local_filename is relative to PAPERS_DIR below.
|
|
# ---------------------------------------------------------------------------
|
|
MANIFEST: list[tuple[str, str]] = [
|
|
(
|
|
"course-library/COMP2211/COMP2211-2022-fall-midterm/paper.pdf",
|
|
"(COMP2211)[2022](f)midterm~=yjz8dxdd^_27002.pdf",
|
|
),
|
|
(
|
|
"course-library/COMP2211/COMP2211-2022-fall-midterm/answer.pdf",
|
|
"(COMP2211)[2022](f)midterm~=yjz8dxdd^_18747.pdf",
|
|
),
|
|
(
|
|
"course-library/COMP2211/COMP2211-2022-spring-midterm/paper.pdf",
|
|
"(COMP2211)[2022](s)midterm~=b8bidkgs^_14629.pdf",
|
|
),
|
|
(
|
|
"course-library/COMP2211/COMP2211-2022-spring-midterm/answer.pdf",
|
|
"(COMP2211)[2022](s)midterm~=6ma030^_89587.pdf",
|
|
),
|
|
(
|
|
"course-library/COMP2211/COMP2211-2022-spring-final-part-a/paper.pdf",
|
|
"(COMP2211)[2022](s)final~=b8bidkgs^_33018.pdf",
|
|
),
|
|
(
|
|
"course-library/COMP2211/COMP2211-2022-spring-final-part-a/answer.pdf",
|
|
"(COMP2211)[2022](s)final~=ajou6^_82011.pdf",
|
|
),
|
|
(
|
|
"course-library/COMP2211/COMP2211-2022-spring-final-part-b/paper.pdf",
|
|
"(COMP2211)[2022](s)final~=b8bidkgs^_40627.pdf",
|
|
),
|
|
(
|
|
"course-library/COMP2211/COMP2211-2022-spring-final-part-b/answer.pdf",
|
|
"(COMP2211)[2022](s)final~=ajou6^_51199.pdf",
|
|
),
|
|
(
|
|
"course-library/COMP2211/COMP2211-2023-spring-midterm/paper.pdf",
|
|
"(COMP2211)[2023](s)midterm~=bxbidkmj^_26587.pdf",
|
|
),
|
|
(
|
|
"course-library/COMP2211/COMP2211-2023-spring-midterm/answer.pdf",
|
|
"(COMP2211)[2023](s)midterm~clchanbg^_17297.pdf",
|
|
),
|
|
(
|
|
"course-library/COMP2211/COMP2211-2024-spring-midterm/paper.pdf",
|
|
"(COMP2211)[2024](s)midterm~=rcidkjgf^_82003.pdf",
|
|
),
|
|
(
|
|
"course-library/COMP2211/COMP2211-2024-spring-midterm/answer.pdf",
|
|
"(COMP2211)[2024](s)midterm~=ubrzkjmz^_90406.pdf",
|
|
),
|
|
(
|
|
"course-library/COMP2211/COMP2211-2024-spring-final/paper.pdf",
|
|
"(COMP2211)[2024](s)final~=igk5mmg^_90365.pdf",
|
|
),
|
|
(
|
|
"course-library/COMP2211/COMP2211-2024-spring-final/answer.pdf",
|
|
"(COMP2211)[2024](s)final~=igk5mmg^_58857.pdf",
|
|
),
|
|
]
|
|
|
|
PAPERS_DIR = (
|
|
Path(__file__).parent.parent
|
|
/ "pastpaper-scraper"
|
|
/ "papers"
|
|
/ "COMP2211"
|
|
)
|
|
|
|
|
|
def main() -> None:
|
|
from app.services.supabase_client import get_supabase
|
|
|
|
sb = get_supabase()
|
|
bucket = sb.storage.from_("papers")
|
|
|
|
ok = 0
|
|
skipped = 0
|
|
failed = 0
|
|
|
|
for storage_path, local_name in MANIFEST:
|
|
local_file = PAPERS_DIR / local_name
|
|
if not local_file.exists():
|
|
print(f" MISSING local file: {local_name}")
|
|
failed += 1
|
|
continue
|
|
|
|
data = local_file.read_bytes()
|
|
try:
|
|
bucket.upload(
|
|
storage_path,
|
|
data,
|
|
file_options={"content-type": "application/pdf", "upsert": "true"},
|
|
)
|
|
print(f" OK {storage_path}")
|
|
ok += 1
|
|
except Exception as exc:
|
|
print(f" ERR {storage_path}: {exc}")
|
|
failed += 1
|
|
|
|
print(f"\nDone: {ok} uploaded, {skipped} skipped, {failed} failed.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|