From d882a090eea084d2a558021448b9a14e2e97a2b1 Mon Sep 17 00:00:00 2001
From: pipou <9146-pipou@users.noreply.git.laquadrature.net>
Date: Mon, 19 Aug 2024 16:34:12 +0200
Subject: [PATCH] =?UTF-8?q?pref10:=20ajout=20de=20la=20pr=C3=A9fecture=20d?=
 =?UTF-8?q?e=20l'Aube?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Co-authored-by: pipou <9146-pipou@users.noreply.git.laquadrature.net>
Co-authored-by: Bastien Le Querrec <blq@laquadrature.net>
---
 .gitlab-ci.yml   |  5 ++++
 Attrap_pref10.py | 70 ++++++++++++++++++++++++++++++++++++++++++++++++
 Makefile         |  4 ++-
 README.md        |  1 +
 cli.py           |  1 +
 5 files changed, 80 insertions(+), 1 deletion(-)
 create mode 100644 Attrap_pref10.py

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index cc7865d..bd55480 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -124,6 +124,11 @@ test_pref09:
     PREF: "pref09"
   extends: .default_pref
 
+test_pref10:
+  variables:
+    PREF: "pref10"
+  extends: .default_pref
+
 test_pref13:
   variables:
     PREF: "pref13"
diff --git a/Attrap_pref10.py b/Attrap_pref10.py
new file mode 100644
index 0000000..c6cff76
--- /dev/null
+++ b/Attrap_pref10.py
@@ -0,0 +1,70 @@
+import os
+import datetime
+
+from bs4 import BeautifulSoup
+from urllib.parse import unquote
+
+from Attrap import Attrap
+
+
+class Attrap_pref10(Attrap):
+
+    # Config
+    __HOST = 'https://www.aube.gouv.fr'
+    __RAA_ARCHIVES_PAGE = f'{__HOST}/Publications/RAA-Recueil-des-Actes-Administratifs/RAA-Archives/'
+    __USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0'
+    full_name = 'Préfecture de l\'Aube'
+    short_code = 'pref10'
+
+    def __init__(self, data_dir):
+        super().__init__(data_dir, self.__USER_AGENT)
+        self.set_sleep_time(30)
+
+    def get_raa(self, keywords):
+        # La préfecture de l'Aube a une page avec ses archives, et une page avec l'année en cours. On parse
+        # donc le menu déroulant de la gauche de la page d'archives (et non le contenu de la page) pour récupérér,
+        # premièrement, la page d'année en cours et, deuxièmement, les années archivées.
+
+        pages_to_parse = []
+
+        archives_page_content = self.get_page(self.__RAA_ARCHIVES_PAGE, 'get').content
+        for year_page in self.get_sub_pages(
+            archives_page_content,
+            'ul.fr-sidemenu__list a.fr-sidemenu__link',
+            self.__HOST,
+            False,
+        ):
+            if Attrap.guess_date(year_page['name'], '.* ([0-9]{4})').year >= self.not_before.year:
+                pages_to_parse.append(year_page['url'])
+
+        elements = self.get_raa_with_pager(
+            pages_to_parse,
+            'ul.fr-pagination__list li a.fr-pagination__link.fr-pagination__link--next',
+            self.__HOST
+        )
+
+        self.parse_raa(elements, keywords)
+        self.mailer()
+
+    def get_raa_elements(self, page_content):
+        elements = []
+        # On charge le parser
+        soup = BeautifulSoup(page_content, 'html.parser')
+
+        # On récupère chaque balise a
+        for a in soup.select('a.fr-card__link.menu-item-link'):
+            if a.get('href') and a['href'].endswith('.pdf'):
+                if a['href'].startswith('/'):
+                    url = f"{self.__HOST}{a['href']}"
+                else:
+                    url = a['href']
+
+                url = unquote(url)
+                name = a.text.strip()
+                date = datetime.datetime.strptime(a['title'].split(' - ')[-1].strip(), '%d/%m/%Y')
+
+                if date >= self.not_before:
+                    raa = Attrap.RAA(url, date, name)
+                    elements.append(raa)
+
+        return elements
diff --git a/Makefile b/Makefile
index f66379d..cabe8d4 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-make: ppparis pref03 pref04 pref05 pref06 pref09 pref13 pref25 pref31 pref33 pref34 pref35 pref38 pref42 pref44 pref59 pref62 pref63 pref64 pref65 pref66 pref69 pref73 pref75 pref80 pref81 pref83 pref87 pref93 pref94 pref976 prefIdf
+make: ppparis pref03 pref04 pref05 pref06 pref09 pref10 pref13 pref25 pref31 pref33 pref34 pref35 pref38 pref42 pref44 pref59 pref62 pref63 pref64 pref65 pref66 pref69 pref73 pref75 pref80 pref81 pref83 pref87 pref93 pref94 pref976 prefIdf
 ppparis:
 	bin/python3 cli.py ppparis
 pref03:
@@ -11,6 +11,8 @@ pref06:
 	bin/python3 cli.py pref06
 pref09:
 	bin/python3 cli.py pref09
+pref10:
+	bin/python3 cli.py pref10
 pref13:
 	bin/python3 cli.py pref13
 pref25:
diff --git a/README.md b/README.md
index c1a0d3b..7ec894f 100644
--- a/README.md
+++ b/README.md
@@ -62,6 +62,7 @@ Vous pouvez également activer le safe mode en spécifiant la variable d'environ
 - Préfecture des Hautes-Alpes (identifiant : `pref05`)
 - Préfecture des Alpes-Maritimes (identifiant : `pref06`)
 - Préfecture de l'Ariège (identifiant : `pref09`)
+- Préfecture de l'Aube (identifiant : `pref10`)
 - Préfecture des Bouches-du-Rhône (identifiant : `pref13`)
 - Préfecture du Doubs (identifiant : `pref25`)
 - Préfecture de la Haute-Garonne (identifiant : `pref31`)
diff --git a/cli.py b/cli.py
index 82901dd..e58f3e4 100755
--- a/cli.py
+++ b/cli.py
@@ -50,6 +50,7 @@ available_administrations = [
     'pref05',
     'pref06',
     'pref09',
+    'pref10',
     'pref13',
     'pref25',
     'pref31',
-- 
GitLab