diff --git a/gallery/painting/gismeteo/parser.py b/gallery/painting/gismeteo/parser.py index 207eed6..dd2971b 100644 --- a/gallery/painting/gismeteo/parser.py +++ b/gallery/painting/gismeteo/parser.py @@ -7,7 +7,7 @@ from typing import Any, Literal from bs4 import Tag from gallery.sketch.parse.core import ParsedContext, ParseError, Parser -from gallery.sketch.parse.date import parse_date +from gallery.sketch.parse.date import DATE_PARSER from gallery.sketch.parse.html import HTMLContextParser, TableParser, TableValueParser from gallery.sketch.parse.json import JSONParser from gallery.sketch.weather.model import ( @@ -51,7 +51,7 @@ class DateParser(TableValueParser[datetime.datetime]): model_key = "date" def extract(self, data: Tag) -> datetime.datetime: - return parse_date(data.text) + return DATE_PARSER.parse(data.text) class SkyParser(TableValueParser[Sky]): diff --git a/gallery/painting/rp5/parser.py b/gallery/painting/rp5/parser.py index 459a1ed..319eb4c 100644 --- a/gallery/painting/rp5/parser.py +++ b/gallery/painting/rp5/parser.py @@ -3,7 +3,7 @@ import re from bs4 import Tag -from gallery.sketch.parse.date import parse_date +from gallery.sketch.parse.date import DATE_PARSER from gallery.sketch.parse.html import ( HTMLParser, TableParser, @@ -41,7 +41,7 @@ class DatesParser(TagIterParser[tuple[datetime.datetime, int]]): if index == 1: colspan -= 1 date_str = ",".join(data.text.strip().split(",")[-2:]) - date = parse_date(date_str) + date = DATE_PARSER.parse(date_str) return (date, colspan) diff --git a/gallery/painting/yandexweather/parser.py b/gallery/painting/yandexweather/parser.py index 465037f..25ab2cd 100644 --- a/gallery/painting/yandexweather/parser.py +++ b/gallery/painting/yandexweather/parser.py @@ -4,7 +4,7 @@ from typing import Any from bs4 import Tag -from gallery.sketch.parse.date import parse_date +from gallery.sketch.parse.date import DATE_PARSER from gallery.sketch.parse.html import ( HTMLParser, TableParser, @@ -39,7 +39,7 @@ class DateParser(TagParser[datetime.date]): selector = "[class^=AppForecastDayHeader_dayTitle]" def extract(self, data: Tag) -> datetime.date: - return parse_date(data.text.split(",")[-1].strip()) + return DATE_PARSER.parse(data.text.split(",")[-1].strip()) class TimeParser(TableValueParser[datetime.datetime]): diff --git a/gallery/sketch/parse/date.py b/gallery/sketch/parse/date.py index d022463..3c3b38b 100644 --- a/gallery/sketch/parse/date.py +++ b/gallery/sketch/parse/date.py @@ -2,11 +2,15 @@ import datetime import dateparser -from .core import ParseError +from .core import ParseError, Parser -def parse_date(value: str) -> datetime.datetime: - date = dateparser.parse(value, languages=["ru"]) - if date is None: - raise ParseError("Invalid date", value) - return date +class DateParser(Parser[str, datetime.datetime]): + def parse(self, data: str) -> datetime.datetime: + date = dateparser.parse(data, languages=["ru"]) + if date is None: + raise ParseError("Invalid date", data) + return date + + +DATE_PARSER = DateParser()