refactor(parse): rework date parser
This commit is contained in:
@@ -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]):
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -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]):
|
||||
|
||||
@@ -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"])
|
||||
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", value)
|
||||
raise ParseError("Invalid date", data)
|
||||
return date
|
||||
|
||||
|
||||
DATE_PARSER = DateParser()
|
||||
|
||||
Reference in New Issue
Block a user