From 01803c525c88cf78943ba19ef1c54503a597b54c Mon Sep 17 00:00:00 2001 From: Jeppy Date: Sat, 5 Nov 2022 18:36:10 +0100 Subject: [PATCH] UPDATE Enable parsing of yaml datetime value without error - ADD parse_datetime helper function to parse datetime or isoformat string to datetime --- kleinanzeigen_bot/__init__.py | 6 +++--- kleinanzeigen_bot/utils.py | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/kleinanzeigen_bot/__init__.py b/kleinanzeigen_bot/__init__.py index aaab6b5..9874ffb 100644 --- a/kleinanzeigen_bot/__init__.py +++ b/kleinanzeigen_bot/__init__.py @@ -19,7 +19,7 @@ from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from . import utils, resources, extract # pylint: disable=W0406 -from .utils import abspath, apply_defaults, ensure, is_frozen, pause, pluralize, safe_get +from .utils import abspath, apply_defaults, ensure, is_frozen, pause, pluralize, safe_get, parse_datetime from .selenium_mixin import SeleniumMixin # W0406: possibly a bug, see https://github.com/PyCQA/pylint/issues/3933 @@ -256,9 +256,9 @@ class KleinanzeigenBot(SeleniumMixin): if self.ads_selector == "due": if ad_cfg["updated_on"]: - last_updated_on = datetime.fromisoformat(ad_cfg["updated_on"]) + last_updated_on = parse_datetime(ad_cfg["updated_on"]) elif ad_cfg["created_on"]: - last_updated_on = datetime.fromisoformat(ad_cfg["created_on"]) + last_updated_on = parse_datetime(ad_cfg["created_on"]) else: last_updated_on = None diff --git a/kleinanzeigen_bot/utils.py b/kleinanzeigen_bot/utils.py index 07ca892..f0b4d01 100644 --- a/kleinanzeigen_bot/utils.py +++ b/kleinanzeigen_bot/utils.py @@ -5,6 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-or-later import copy, decimal, json, logging, os, re, secrets, sys, traceback, time from importlib.resources import read_text as get_resource_as_string from collections.abc import Callable, Sized +from datetime import datetime from types import FrameType, ModuleType, TracebackType from typing import Any, Final, TypeVar @@ -253,3 +254,19 @@ def parse_decimal(number:float | int | str) -> decimal.Decimal: return decimal.Decimal("".join(parts[:-1]) + "." + parts[-1]) except decimal.InvalidOperation: raise decimal.DecimalException(f"Invalid number format: {number}") from ex + + +def parse_datetime(date:datetime | str | None) -> datetime | None: + """ + >>> parse_datetime(datetime(2020, 1, 1, 0, 0)) + datetime.datetime(2020, 1, 1, 0, 0) + >>> parse_datetime("2020-01-01T00:00:00") + datetime.datetime(2020, 1, 1, 0, 0) + >>> parse_datetime(None) + + """ + if date is None: + return None + if isinstance(date, datetime): + return date + return datetime.fromisoformat(date)