diff --git a/Attrap.py b/Attrap.py index bde6027ca493e2c2cba86a721147677b30386306..f8c788cdda08ad4f02ccc915a669cb96ba8d8511 100644 --- a/Attrap.py +++ b/Attrap.py @@ -55,7 +55,7 @@ class Attrap: if not url == "": self.url = url if date is not None: - self.date = date + self.date = Attrap.get_aware_datetime(date) self.date_str = date.strftime("%d/%m/%Y") if not name == "": self.name = name @@ -75,15 +75,15 @@ class Attrap: if pdf_metadata: if pdf_metadata.creation_date: - self.pdf_creation_date = pdf_metadata.creation_date + self.pdf_creation_date = Attrap.get_aware_datetime(pdf_metadata.creation_date) if self.date is None: - self.date = pdf_metadata.creation_date + self.date = Attrap.get_aware_datetime(pdf_metadata.creation_date) self.date_str = self.date.strftime("%d/%m/%Y") if pdf_metadata.modification_date: - self.pdf_modification_date = pdf_metadata.modification_date + self.pdf_modification_date = Attrap.get_aware_datetime(pdf_metadata.modification_date) if self.date is None: - self.date = pdf_metadata.modification_date + self.date = Attrap.get_aware_datetime(pdf_metadata.modification_date) self.date_str = self.date.strftime("%d/%m/%Y") def extract_content(self, data_dir): @@ -118,15 +118,15 @@ class Attrap: pdf_modification_date_json = None if self.pdf_creation_date: - pdf_creation_date_json = self.pdf_creation_date.strftime("%d/%m/%Y %H:%M:%S") + pdf_creation_date_json = self.pdf_creation_date.strftime("%d/%m/%Y %H:%M:%S%z") if self.pdf_modification_date: - pdf_modification_date_json = self.pdf_modification_date.strftime("%d/%m/%Y %H:%M:%S") + pdf_modification_date_json = self.pdf_modification_date.strftime("%d/%m/%Y %H:%M:%S%z") properties = { 'name': self.name, 'date': self.date_str, 'url': quote(self.url, safe='/:'), - 'first_saw_on': datetime.datetime.today().strftime("%d/%m/%Y %H:%M:%S"), + 'first_saw_on': datetime.datetime.now(datetime.timezone.utc).strftime("%d/%m/%Y %H:%M:%S%z"), 'pdf_creation_date': pdf_creation_date_json, 'pdf_modification_date': pdf_modification_date_json } @@ -583,13 +583,13 @@ class Attrap: for raa in elements: # Si le fichier n'a pas déjà été parsé et qu'il est postérieur à la # date maximale d'analyse, on le télécharge et on le parse - if not os.path.isfile(f'{self.data_dir}/raa/{raa.get_sha256()}.txt') and (not raa.date or (raa.date >= self.not_before)): + if not os.path.isfile(f'{self.data_dir}/raa/{raa.get_sha256()}.txt') and (not raa.date or (raa.date >= Attrap.get_aware_datetime(self.not_before))): url = quote(raa.url, safe='/:') self.download_file(raa) raa.parse_metadata(self.data_dir) # Lorsque la date du RAA n'est pas connue, on a dû télécharger le PDF pour récupérer la date de ses métadonnées. # Donc on vérifie à nouveau ici si la date correspond à ce qu'on veut analyser - if (raa.date and raa.date >= self.not_before): + if (raa.date and raa.date >= Attrap.get_aware_datetime(self.not_before)): logger.info(f'Nouveau fichier : {raa.name} ({raa.date_str}). URL : {url}') self.flatten_pdf(raa) self.ocr(raa, True) @@ -694,3 +694,15 @@ class Attrap: except Exception as exc: logger.warning(f'Impossible de deviner la date du terme {string} : {exc}') return datetime.datetime(9999, 1, 1) + + def get_aware_datetime(unknown_datetime): + """ + Retourne un objet datetime avisé. + + datetime - L'objet datetime à aviser. Utilise le fuseau horaire du système si datetime est naïf. + """ + + if unknown_datetime.tzinfo is not None and unknown_datetime.tzinfo.utcoffset(unknown_datetime) is not None: + return unknown_datetime + else: + return unknown_datetime.replace(tzinfo=datetime.datetime.now(datetime.timezone.utc).astimezone().tzinfo)