refactor(parse): rework date parser

This commit is contained in:
2026-09-21 22:30:17 +03:00
parent 0baa1277ef
commit c0503458e4
4 changed files with 16 additions and 12 deletions
+2 -2
View File
@@ -7,7 +7,7 @@ from typing import Any, Literal
from bs4 import Tag from bs4 import Tag
from gallery.sketch.parse.core import ParsedContext, ParseError, Parser 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.html import HTMLContextParser, TableParser, TableValueParser
from gallery.sketch.parse.json import JSONParser from gallery.sketch.parse.json import JSONParser
from gallery.sketch.weather.model import ( from gallery.sketch.weather.model import (
@@ -51,7 +51,7 @@ class DateParser(TableValueParser[datetime.datetime]):
model_key = "date" model_key = "date"
def extract(self, data: Tag) -> datetime.datetime: def extract(self, data: Tag) -> datetime.datetime:
return parse_date(data.text) return DATE_PARSER.parse(data.text)
class SkyParser(TableValueParser[Sky]): class SkyParser(TableValueParser[Sky]):
+2 -2
View File
@@ -3,7 +3,7 @@ import re
from bs4 import Tag 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 ( from gallery.sketch.parse.html import (
HTMLParser, HTMLParser,
TableParser, TableParser,
@@ -41,7 +41,7 @@ class DatesParser(TagIterParser[tuple[datetime.datetime, int]]):
if index == 1: if index == 1:
colspan -= 1 colspan -= 1
date_str = ",".join(data.text.strip().split(",")[-2:]) date_str = ",".join(data.text.strip().split(",")[-2:])
date = parse_date(date_str) date = DATE_PARSER.parse(date_str)
return (date, colspan) return (date, colspan)
+2 -2
View File
@@ -4,7 +4,7 @@ from typing import Any
from bs4 import Tag 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 ( from gallery.sketch.parse.html import (
HTMLParser, HTMLParser,
TableParser, TableParser,
@@ -39,7 +39,7 @@ class DateParser(TagParser[datetime.date]):
selector = "[class^=AppForecastDayHeader_dayTitle]" selector = "[class^=AppForecastDayHeader_dayTitle]"
def extract(self, data: Tag) -> datetime.date: 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]): class TimeParser(TableValueParser[datetime.datetime]):
+10 -6
View File
@@ -2,11 +2,15 @@ import datetime
import dateparser import dateparser
from .core import ParseError from .core import ParseError, Parser
def parse_date(value: str) -> datetime.datetime: class DateParser(Parser[str, datetime.datetime]):
date = dateparser.parse(value, languages=["ru"]) def parse(self, data: str) -> datetime.datetime:
if date is None: date = dateparser.parse(data, languages=["ru"])
raise ParseError("Invalid date", value) if date is None:
return date raise ParseError("Invalid date", data)
return date
DATE_PARSER = DateParser()