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