From 0250d10c7950a4cf5a536d47ffb5537f58cadc2a Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Fri, 18 Apr 2025 15:18:21 +0200
Subject: [PATCH] =?UTF-8?q?Pou=C5=BE=C3=ADv=C3=A1me=20pypdf=20m=C3=ADsto?=
 =?UTF-8?q?=20PyPDF2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Je to pokračování téhož projektu. Kontroloval jsem changelog
a žádné breaking changes by se nás neměly týkat.

Zato už jsou opravené bugy v kopírování anotací.
---
 bin/freeze-score     | 6 +++---
 constraints.txt      | 2 +-
 mo/jobs/protocols.py | 8 ++++----
 setup.py             | 2 +-
 4 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/bin/freeze-score b/bin/freeze-score
index 94c0a5c2..f522750e 100755
--- a/bin/freeze-score
+++ b/bin/freeze-score
@@ -7,7 +7,7 @@ from pathlib import Path
 from shutil import copyfile
 from sqlalchemy.orm import joinedload
 from typing import List
-import PyPDF2
+import pypdf
 
 import mo.db as db
 import mo.jobs.score
@@ -54,9 +54,9 @@ def download(contests: List[db.Contest], out_name: str) -> None:
 
     all_pdf = out_dir / 'all.pdf'
     print(f'Merging PDFs to {all_pdf}')
-    writer = PyPDF2.PdfWriter()
+    writer = pypdf.PdfWriter()
     for pdf in pdfs:
-        reader = PyPDF2.PdfReader(pdf)
+        reader = pypdf.PdfReader(pdf)
         for pg in reader.pages:
             writer.add_page(pg)
     with open(all_pdf, 'wb') as f:
diff --git a/constraints.txt b/constraints.txt
index 5a177a92..c125b4ca 100644
--- a/constraints.txt
+++ b/constraints.txt
@@ -25,7 +25,7 @@ packaging==24.1
 pikepdf==9.3.0
 pillow==11.0.0
 psycopg2==2.9.10
-PyPDF2==3.0.1
+pypdf==5.4.0
 python-dateutil==2.9.0.post0
 python-magic==0.4.27
 python-poppler==0.4.1
diff --git a/mo/jobs/protocols.py b/mo/jobs/protocols.py
index bdc652d3..ce07de51 100644
--- a/mo/jobs/protocols.py
+++ b/mo/jobs/protocols.py
@@ -11,7 +11,7 @@ from sqlalchemy import delete
 from sqlalchemy.orm import joinedload
 from sqlalchemy.orm.query import Query
 from typing import Dict, List, Optional, Tuple
-import PyPDF2
+import pypdf
 
 import mo
 import mo.config as config
@@ -574,13 +574,13 @@ def handle_sort_scans(the_job: TheJob):
         papers[index].pages.sort(key=lambda p: p.seq_id)
 
     # Poté poskládáme výsledné PDF soubory
-    readers: Dict[int, PyPDF2.PdfReader] = {}
+    readers: Dict[int, pypdf.PdfReader] = {}
     for index in papers:
         paper = papers[index]
-        writer = PyPDF2.PdfWriter()
+        writer = pypdf.PdfWriter()
         for p in paper.pages:
             if p.file_nr not in readers:
-                readers[p.file_nr] = PyPDF2.PdfReader(job.file_path(in_files[p.file_nr]), strict=False)
+                readers[p.file_nr] = pypdf.PdfReader(job.file_path(in_files[p.file_nr]), strict=False)
             # Přihodíme správnou stránku na výstup
             pp = readers[p.file_nr].pages[p.page_nr]
             if p.rotation > 0:
diff --git a/setup.py b/setup.py
index 8d6a31d5..91dc036f 100644
--- a/setup.py
+++ b/setup.py
@@ -36,7 +36,6 @@ setuptools.setup(
         # Udržujte prosím seřazené
         'Flask',
         'Flask-WTF',
-        'PyPDF2',
         'WTForms',
         'bcrypt',
         'bleach',
@@ -50,6 +49,7 @@ setuptools.setup(
         'pikepdf',
         'pillow',
         'psycopg2',
+        'pypdf',
         'python-magic',
         'python-poppler',
         'pyzbar',
-- 
GitLab