Skip to content

Commit 9f3310f

Browse files
authored
Improve dateparser (#13796)
1 parent 09416d0 commit 9f3310f

20 files changed

Lines changed: 166 additions & 129 deletions
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
from typing import Any
2-
31
from dateparser.calendars import CalendarBase
2+
from dateparser.calendars.hijri_parser import hijri_parser
43

54
class HijriCalendar(CalendarBase):
6-
parser: Any
5+
parser: type[hijri_parser]
Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1-
from _typeshed import Incomplete
2-
from typing import Any
1+
from typing import Any, SupportsIndex
32

43
from dateparser.calendars import non_gregorian_parser
54

65
class hijri:
76
@classmethod
8-
def to_gregorian(cls, year: Incomplete | None = ..., month: Incomplete | None = ..., day: Incomplete | None = ...): ...
7+
def to_gregorian(cls, year: int | None = None, month: int | None = None, day: int | None = None) -> tuple[int, int, int]: ...
98
@classmethod
10-
def from_gregorian(cls, year: Incomplete | None = ..., month: Incomplete | None = ..., day: Incomplete | None = ...): ...
9+
def from_gregorian(
10+
cls, year: SupportsIndex | None = None, month: SupportsIndex | None = None, day: SupportsIndex | None = None
11+
) -> tuple[int, int, int]: ...
1112
@classmethod
12-
def month_length(cls, year, month): ...
13+
def month_length(cls, year: int, month: int) -> int: ...
1314

1415
class HijriDate:
1516
year: Any
@@ -19,9 +20,9 @@ class HijriDate:
1920
def weekday(self): ...
2021

2122
class hijri_parser(non_gregorian_parser):
22-
calendar_converter: Any
23+
calendar_converter: type[hijri]
2324
default_year: int
2425
default_month: int
2526
default_day: int
26-
non_gregorian_date_cls: Any
27+
non_gregorian_date_cls: type[HijriDate]
2728
def handle_two_digit_year(self, year: int) -> int: ...
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
from typing import Any
1+
from dateparser.calendars.jalali_parser import jalali_parser
22

33
from . import CalendarBase
44

55
class JalaliCalendar(CalendarBase):
6-
parser: Any
6+
parser: type[jalali_parser]

stubs/dateparser/dateparser/calendars/jalali_parser.pyi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@ class jalali_parser(non_gregorian_parser):
1414
default_year: int
1515
default_month: int
1616
default_day: int
17-
non_gregorian_date_cls: Any
17+
non_gregorian_date_cls: type[PersianDate]
1818
def handle_two_digit_year(self, year: int) -> int: ...
Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
1-
from _typeshed import Incomplete
21
from typing import Any
32
from typing_extensions import Self
43

54
class Settings:
65
def __new__(cls, *args, **kw) -> Self: ...
7-
def __init__(self, settings: Incomplete | None = None) -> None: ...
6+
def __init__(self, settings: dict[str, Any] | None = None) -> None: ...
87
@classmethod
9-
def get_key(cls, settings: Incomplete | None = None): ...
10-
def replace(self, mod_settings: Incomplete | None = None, **kwds): ...
8+
def get_key(cls, settings: dict[str, Any] | None = None) -> str: ...
9+
def replace(self, mod_settings: dict[str, Any] | None = None, **kwds) -> Self: ...
1110

12-
settings: Any
11+
settings: Settings
1312

1413
def apply_settings(f): ...
1514

1615
class SettingValidationError(ValueError): ...
1716

18-
def check_settings(settings) -> None: ...
17+
def check_settings(settings: Settings) -> None: ...
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1-
language_order: list[str]
2-
language_locale_dict: dict[str, str]
3-
language_map: dict[str, list[str]]
1+
from typing import Final
2+
3+
language_order: Final[list[str]]
4+
language_locale_dict: Final[dict[str, str]]
5+
language_map: Final[dict[str, list[str]]]

stubs/dateparser/dateparser/date.pyi

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import collections
22
from collections.abc import Callable, Iterable, Iterator
3-
from datetime import datetime
3+
from datetime import datetime, tzinfo
44
from re import Pattern
5-
from typing import ClassVar, Literal, overload
5+
from typing import ClassVar, Final, Literal, overload
66
from typing_extensions import TypeAlias
77

88
from dateparser import _Settings
@@ -13,23 +13,23 @@ from dateparser.languages.locale import Locale
1313
_DetectLanguagesFunction: TypeAlias = Callable[[str, float], list[str]]
1414
_Period: TypeAlias = Literal["time", "day", "week", "month", "year"]
1515

16-
APOSTROPHE_LOOK_ALIKE_CHARS: list[str]
17-
RE_NBSP: Pattern[str]
18-
RE_SPACES: Pattern[str]
19-
RE_TRIM_SPACES: Pattern[str]
20-
RE_TRIM_COLONS: Pattern[str]
21-
RE_SANITIZE_SKIP: Pattern[str]
22-
RE_SANITIZE_RUSSIAN: Pattern[str]
23-
RE_SANITIZE_PERIOD: Pattern[str]
24-
RE_SANITIZE_ON: Pattern[str]
25-
RE_SANITIZE_APOSTROPHE: Pattern[str]
26-
RE_SEARCH_TIMESTAMP: Pattern[str]
27-
RE_SANITIZE_CROATIAN: Pattern[str]
28-
RE_SEARCH_NEGATIVE_TIMESTAMP: Pattern[str]
16+
APOSTROPHE_LOOK_ALIKE_CHARS: Final[list[str]]
17+
RE_NBSP: Final[Pattern[str]]
18+
RE_SPACES: Final[Pattern[str]]
19+
RE_TRIM_SPACES: Final[Pattern[str]]
20+
RE_TRIM_COLONS: Final[Pattern[str]]
21+
RE_SANITIZE_SKIP: Final[Pattern[str]]
22+
RE_SANITIZE_RUSSIAN: Final[Pattern[str]]
23+
RE_SANITIZE_PERIOD: Final[Pattern[str]]
24+
RE_SANITIZE_ON: Final[Pattern[str]]
25+
RE_SANITIZE_APOSTROPHE: Final[Pattern[str]]
26+
RE_SEARCH_TIMESTAMP: Final[Pattern[str]]
27+
RE_SANITIZE_CROATIAN: Final[Pattern[str]]
28+
RE_SEARCH_NEGATIVE_TIMESTAMP: Final[Pattern[str]]
2929

3030
def sanitize_spaces(date_string: str) -> str: ...
31-
def date_range(begin, end, **kwargs) -> None: ...
32-
def get_intersecting_periods(low, high, period: str = "day") -> None: ...
31+
def date_range(begin: datetime, end: datetime, **kwargs) -> None: ...
32+
def get_intersecting_periods(low: datetime, high: datetime, period: str = "day") -> None: ...
3333
def sanitize_date(date_string: str) -> str: ...
3434
def get_date_from_timestamp(date_string: str, settings: Settings, negative: bool = False) -> datetime | None: ...
3535
def parse_with_formats(date_string: str, date_formats: Iterable[str], settings: Settings) -> DateData: ...
@@ -58,7 +58,7 @@ class _DateLocaleParser:
5858
def _try_freshness_parser(self) -> DateData | None: ...
5959
def _try_absolute_parser(self) -> DateData | None: ...
6060
def _try_nospaces_parser(self) -> DateData | None: ...
61-
def _try_parser(self, parse_method) -> DateData | None: ...
61+
def _try_parser(self, parse_method: Callable[[str, Settings, tzinfo | None], tuple[datetime, str]]) -> DateData | None: ...
6262
def _try_given_formats(self) -> DateData | None: ...
6363
def _get_translated_date(self) -> str: ...
6464
def _get_translated_date_with_formatting(self) -> str: ...
Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
1-
from _typeshed import Incomplete
2-
from typing import Any
1+
from collections.abc import Callable
2+
from datetime import datetime, tzinfo
3+
4+
from dateparser.conf import Settings
35

46
class DateParser:
5-
def parse(self, date_string, parse_method, settings: Incomplete | None = None): ...
7+
def parse(
8+
self,
9+
date_string: str,
10+
parse_method: Callable[[str, Settings, tzinfo | None], tuple[datetime, str]],
11+
settings: Settings | None = None,
12+
) -> tuple[datetime, str]: ...
613

7-
date_parser: Any
14+
date_parser: DateParser
Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1+
import re
12
from _typeshed import Incomplete
2-
from typing import Any
3+
from typing import Final
4+
from zoneinfo import ZoneInfo
35

4-
PATTERN: Any
6+
from dateparser.date import DateData
7+
8+
PATTERN: Final[re.Pattern[str]]
59

610
class FreshnessDateDataParser:
7-
def get_local_tz(self): ...
8-
def parse(self, date_string, settings): ...
9-
def get_kwargs(self, date_string): ...
10-
def get_date_data(self, date_string, settings: Incomplete | None = None): ...
11+
def get_local_tz(self) -> ZoneInfo: ...
12+
def parse(self, date_string: str, settings) -> tuple[Incomplete | None, str | None]: ...
13+
def get_kwargs(self, date_string: str) -> dict[str, float]: ...
14+
def get_date_data(self, date_string: str, settings: Incomplete | None = None) -> DateData: ...
1115

12-
freshness_date_parser: Any
16+
freshness_date_parser: FreshnessDateDataParser
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from .loader import default_loader as default_loader
2+
from .locale import Locale as Locale

0 commit comments

Comments
 (0)