Initial commit: PastPaper Master full stack
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
121
backend/upload_course_library_pdfs.py
Normal file
121
backend/upload_course_library_pdfs.py
Normal file
@@ -0,0 +1,121 @@
|
||||
"""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()
|
||||
Reference in New Issue
Block a user