From 4aecf2f912f0034efd5a6772f6c99a4ec23f3e04 Mon Sep 17 00:00:00 2001
From: Bastien Le Querrec <blq@laquadrature.net>
Date: Wed, 6 Mar 2024 18:54:16 +0100
Subject: [PATCH] =?UTF-8?q?ppparis:=20t=C3=A9l=C3=A9charge=20=C3=A0=20nouv?=
 =?UTF-8?q?eau=20un=20fichier=20corrompu?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ppparis.py | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/ppparis.py b/ppparis.py
index a67434e..7bd1b2b 100755
--- a/ppparis.py
+++ b/ppparis.py
@@ -76,6 +76,19 @@ def parse_pdf(filename, name, date):
     if found:
       print_output('')
 
+def ocr(file,url,retry_on_failure=True):
+  cmd = ['ocrmypdf', '-l', 'eng+fra', '--output-type', 'pdfa', '--redo-ocr', '--skip-big', '500' , __DATA_DIR+filename, __DATA_DIR+filename]
+  logging.debug(f'Lancement de ocrmypdf: {cmd}')
+  try:
+    output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
+  except subprocess.CalledProcessError as exc:
+    if exc.returncode == 2 and retry_on_failure:
+      logging.warning('ATTENTION : Le fichier n\'est pas un PDF correct, nouvelle tentative de le télécharger')
+      download_file(url,file)
+      ocr(file,url,False)
+    elif not exc.returncode == 6:
+      logging.warning('ATTENTION : Impossible d\'OCRiser le document', exc.returncode, exc.output)
+
 # Début du script
 parser = argparse.ArgumentParser(prog='ppparis.py', description='Télécharge les RAA de la Préfecture de police de Paris et recherche des mots-clés')
 parser.add_argument('-n', '--no-headless', action='store_true', help='ne lance pas le navigateur en mode headless (pratique pour débugguer ou en dehors d\'une CI)')
@@ -158,12 +171,6 @@ for a in soup.find_all('a', href=True):
       logging.info(f'Nouveau fichier : {name} ({date}). URL : {url}')
       download_file(url, __DATA_DIR+filename)
 
-      cmd = ['ocrmypdf', '-l', 'eng+fra', '--output-type', 'pdfa', '--redo-ocr', '--skip-big', '500' , __DATA_DIR+filename, __DATA_DIR+filename]
-      logging.debug(f'Lancement de ocrmypdf: {cmd}')
-      try:
-        output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
-      except subprocess.CalledProcessError as exc:
-        if not exc.returncode == 6:
-          logging.warning('ATTENTION : Impossible d\'OCRiser le document', exc.returncode, exc.output)
+      ocr(__DATA_DIR+filename,url,True)
 
       parse_pdf(filename, name, date)
-- 
GitLab