Skip to content

Commit 157d818

Browse files
authored
Added types for babel.core and babel.numbers (#9111)
1 parent 658b6e7 commit 157d818

File tree

2 files changed

+166
-127
lines changed

2 files changed

+166
-127
lines changed

stubs/babel/babel/core.pyi

Lines changed: 80 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,121 +1,135 @@
1-
from typing import Any
1+
from collections.abc import Iterable, Mapping
2+
from typing import Any, overload
23
from typing_extensions import Literal, TypeAlias
34

5+
from babel.localedata import LocaleDataDict
6+
from babel.plural import PluralRule
7+
48
class UnknownLocaleError(Exception):
5-
identifier: Any
6-
def __init__(self, identifier) -> None: ...
9+
identifier: str
10+
def __init__(self, identifier: str) -> None: ...
711

812
class Locale:
9-
language: Any
10-
territory: Any
11-
script: Any
12-
variant: Any
13-
def __init__(self, language, territory: Any | None = ..., script: Any | None = ..., variant: Any | None = ...) -> None: ...
13+
language: str
14+
territory: str | None
15+
script: str | None
16+
variant: str | None
17+
def __init__(
18+
self, language: str, territory: str | None = ..., script: str | None = ..., variant: str | None = ...
19+
) -> None: ...
20+
@classmethod
21+
def default(cls, category: str | None = ..., aliases: Mapping[str, str] = ...) -> Locale: ...
1422
@classmethod
15-
def default(cls, category: Any | None = ..., aliases=...): ...
23+
def negotiate(
24+
cls, preferred: Iterable[str], available: Iterable[str], sep: str = ..., aliases: Mapping[str, str] = ...
25+
) -> Locale | None: ...
26+
@overload
1627
@classmethod
17-
def negotiate(cls, preferred, available, sep: str = ..., aliases=...): ...
28+
def parse(cls, identifier: None, sep: str = ..., resolve_likely_subtags: bool = ...) -> None: ...
29+
@overload
1830
@classmethod
19-
def parse(cls, identifier, sep: str = ..., resolve_likely_subtags: bool = ...): ...
20-
def __eq__(self, other): ...
21-
def __ne__(self, other): ...
22-
def __hash__(self): ...
23-
def get_display_name(self, locale: Any | None = ...): ...
31+
def parse(cls, identifier: str | Locale, sep: str = ..., resolve_likely_subtags: bool = ...) -> Locale: ...
32+
def __eq__(self, other: object) -> bool: ...
33+
def __ne__(self, other: object) -> bool: ...
34+
def __hash__(self) -> int: ...
35+
def get_display_name(self, locale: Locale | str | None = ...) -> str | None: ...
2436
@property
25-
def display_name(self): ...
26-
def get_language_name(self, locale: Any | None = ...): ...
37+
def display_name(self) -> str | None: ...
38+
def get_language_name(self, locale: Locale | str | None = ...) -> str | None: ...
2739
@property
28-
def language_name(self): ...
29-
def get_territory_name(self, locale: Any | None = ...): ...
40+
def language_name(self) -> str | None: ...
41+
def get_territory_name(self, locale: Locale | str | None = ...) -> str | None: ...
3042
@property
31-
def territory_name(self): ...
32-
def get_script_name(self, locale: Any | None = ...): ...
43+
def territory_name(self) -> str | None: ...
44+
def get_script_name(self, locale: Locale | str | None = ...) -> str | None: ...
3345
@property
34-
def script_name(self): ...
46+
def script_name(self) -> str | None: ...
3547
@property
36-
def english_name(self): ...
48+
def english_name(self) -> str | None: ...
3749
@property
38-
def languages(self): ...
50+
def languages(self) -> LocaleDataDict: ...
3951
@property
40-
def scripts(self): ...
52+
def scripts(self) -> LocaleDataDict: ...
4153
@property
42-
def territories(self): ...
54+
def territories(self) -> LocaleDataDict: ...
4355
@property
44-
def variants(self): ...
56+
def variants(self) -> LocaleDataDict: ...
4557
@property
46-
def currencies(self): ...
58+
def currencies(self) -> LocaleDataDict: ...
4759
@property
48-
def currency_symbols(self): ...
60+
def currency_symbols(self) -> LocaleDataDict: ...
4961
@property
50-
def number_symbols(self): ...
62+
def number_symbols(self) -> LocaleDataDict: ...
5163
@property
52-
def decimal_formats(self): ...
64+
def decimal_formats(self) -> LocaleDataDict: ...
5365
@property
54-
def compact_decimal_formats(self): ...
66+
def compact_decimal_formats(self) -> LocaleDataDict: ...
5567
@property
56-
def currency_formats(self): ...
68+
def currency_formats(self) -> LocaleDataDict: ...
5769
@property
58-
def percent_formats(self): ...
70+
def percent_formats(self) -> LocaleDataDict: ...
5971
@property
60-
def scientific_formats(self): ...
72+
def scientific_formats(self) -> LocaleDataDict: ...
6173
@property
62-
def periods(self): ...
74+
def periods(self) -> LocaleDataDict: ...
6375
@property
64-
def day_periods(self): ...
76+
def day_periods(self) -> LocaleDataDict: ...
6577
@property
66-
def day_period_rules(self): ...
78+
def day_period_rules(self) -> LocaleDataDict: ...
6779
@property
68-
def days(self): ...
80+
def days(self) -> LocaleDataDict: ...
6981
@property
70-
def months(self): ...
82+
def months(self) -> LocaleDataDict: ...
7183
@property
72-
def quarters(self): ...
84+
def quarters(self) -> LocaleDataDict: ...
7385
@property
74-
def eras(self): ...
86+
def eras(self) -> LocaleDataDict: ...
7587
@property
76-
def time_zones(self): ...
88+
def time_zones(self) -> LocaleDataDict: ...
7789
@property
78-
def meta_zones(self): ...
90+
def meta_zones(self) -> LocaleDataDict: ...
7991
@property
80-
def zone_formats(self): ...
92+
def zone_formats(self) -> LocaleDataDict: ...
8193
@property
82-
def first_week_day(self): ...
94+
def first_week_day(self) -> int: ...
8395
@property
84-
def weekend_start(self): ...
96+
def weekend_start(self) -> int: ...
8597
@property
86-
def weekend_end(self): ...
98+
def weekend_end(self) -> int: ...
8799
@property
88-
def min_week_days(self): ...
100+
def min_week_days(self) -> int: ...
89101
@property
90-
def date_formats(self): ...
102+
def date_formats(self) -> LocaleDataDict: ...
91103
@property
92-
def time_formats(self): ...
104+
def time_formats(self) -> LocaleDataDict: ...
93105
@property
94-
def datetime_formats(self): ...
106+
def datetime_formats(self) -> LocaleDataDict: ...
95107
@property
96-
def datetime_skeletons(self): ...
108+
def datetime_skeletons(self) -> LocaleDataDict: ...
97109
@property
98-
def interval_formats(self): ...
110+
def interval_formats(self) -> LocaleDataDict: ...
99111
@property
100-
def plural_form(self): ...
112+
def plural_form(self) -> PluralRule: ...
101113
@property
102-
def list_patterns(self): ...
114+
def list_patterns(self) -> LocaleDataDict: ...
103115
@property
104-
def ordinal_form(self): ...
116+
def ordinal_form(self) -> PluralRule: ...
105117
@property
106-
def measurement_systems(self): ...
118+
def measurement_systems(self) -> LocaleDataDict: ...
107119
@property
108-
def character_order(self): ...
120+
def character_order(self) -> str: ...
109121
@property
110-
def text_direction(self): ...
122+
def text_direction(self) -> str: ...
111123
@property
112-
def unit_display_names(self): ...
124+
def unit_display_names(self) -> LocaleDataDict: ...
113125

114-
def default_locale(category: Any | None = ..., aliases=...): ...
115-
def negotiate_locale(preferred, available, sep: str = ..., aliases=...): ...
116-
def parse_locale(identifier, sep: str = ...): ...
117-
def get_locale_identifier(tup, sep: str = ...): ...
118-
def get_global(key: _GLOBAL_KEY): ...
126+
def default_locale(category: str | None = ..., aliases: Mapping[str, str] = ...) -> str | None: ...
127+
def negotiate_locale(
128+
preferred: Iterable[str], available: Iterable[str], sep: str = ..., aliases: Mapping[str, str] = ...
129+
) -> str | None: ...
130+
def parse_locale(identifier: str, sep: str = ...) -> tuple[str, str | None, str | None, str | None]: ...
131+
def get_locale_identifier(tup: tuple[str, str | None, str | None, str | None], sep: str = ...) -> str: ...
132+
def get_global(key: _GLOBAL_KEY) -> Mapping[str, Any]: ...
119133

120134
_GLOBAL_KEY: TypeAlias = Literal[
121135
"all_currencies",

stubs/babel/babel/numbers.pyi

Lines changed: 86 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,99 +1,124 @@
1-
from typing import Any
1+
import decimal
2+
from datetime import date
3+
from re import Pattern
4+
from typing_extensions import Literal
25

36
from babel.core import Locale
47

58
long = int
6-
LC_NUMERIC: Any
9+
LC_NUMERIC: str | None
710

811
class UnknownCurrencyError(Exception):
9-
identifier: Any
10-
def __init__(self, identifier) -> None: ...
12+
identifier: str
13+
def __init__(self, identifier: str) -> None: ...
1114

12-
def list_currencies(locale: Any | None = ...): ...
13-
def validate_currency(currency, locale: Any | None = ...) -> None: ...
14-
def is_currency(currency, locale: Any | None = ...): ...
15-
def normalize_currency(currency, locale: Any | None = ...): ...
16-
def get_currency_name(currency, count: Any | None = ..., locale=...): ...
17-
def get_currency_symbol(currency, locale=...): ...
18-
def get_currency_precision(currency): ...
19-
def get_currency_unit_pattern(currency, count: Any | None = ..., locale=...): ...
15+
def list_currencies(locale: Locale | str | None = ...) -> set[str]: ...
16+
def validate_currency(currency: str, locale: Locale | str | None = ...) -> None: ...
17+
def is_currency(currency: str, locale: Locale | str | None = ...) -> bool: ...
18+
def normalize_currency(currency: str, locale: Locale | str | None = ...) -> str | None: ...
19+
def get_currency_name(currency: str, count: float | decimal.Decimal | None = ..., locale: Locale | str | None = ...) -> str: ...
20+
def get_currency_symbol(currency: str, locale: Locale | str | None = ...) -> str: ...
21+
def get_currency_precision(currency: str) -> int: ...
22+
def get_currency_unit_pattern(currency: str, count: float | None = ..., locale: Locale | str | None = ...) -> str: ...
2023
def get_territory_currencies(
21-
territory,
22-
start_date: Any | None = ...,
23-
end_date: Any | None = ...,
24+
territory: str,
25+
start_date: date | None = ...,
26+
end_date: date | None = ...,
2427
tender: bool = ...,
2528
non_tender: bool = ...,
2629
include_details: bool = ...,
27-
): ...
28-
def get_decimal_symbol(locale=...): ...
29-
def get_plus_sign_symbol(locale=...): ...
30-
def get_minus_sign_symbol(locale=...): ...
31-
def get_exponential_symbol(locale=...): ...
32-
def get_group_symbol(locale=...): ...
33-
def format_number(number, locale=...): ...
34-
def get_decimal_precision(number): ...
35-
def get_decimal_quantum(precision): ...
30+
) -> list[str]: ...
31+
def get_decimal_symbol(locale: Locale | str | None = ...) -> str: ...
32+
def get_plus_sign_symbol(locale: Locale | str | None = ...) -> str: ...
33+
def get_minus_sign_symbol(locale: Locale | str | None = ...) -> str: ...
34+
def get_exponential_symbol(locale: Locale | str | None = ...) -> str: ...
35+
def get_group_symbol(locale: Locale | str | None = ...) -> str: ...
36+
def format_number(number: float | decimal.Decimal, locale: Locale | str | None = ...) -> str: ...
37+
def get_decimal_precision(number: decimal.Decimal) -> int: ...
38+
def get_decimal_quantum(precision: int | decimal.Decimal) -> decimal.Decimal: ...
3639
def format_decimal(
37-
number, format: Any | None = ..., locale=..., decimal_quantization: bool = ..., group_separator: bool = ...
40+
number: float | decimal.Decimal,
41+
format: str | None = ...,
42+
locale: Locale | str | None = ...,
43+
decimal_quantization: bool = ...,
44+
group_separator: bool = ...,
3845
): ...
3946
def format_compact_decimal(
40-
number: float, *, format_type: str = ..., locale: Locale | str | None = ..., fraction_digits: int = ...
47+
number: float, *, format_type: Literal["short", "long"] = ..., locale: Locale | str | None = ..., fraction_digits: int = ...
4148
) -> str: ...
4249

4350
class UnknownCurrencyFormatError(KeyError): ...
4451

4552
def format_currency(
46-
number,
47-
currency,
48-
format: Any | None = ...,
49-
locale=...,
53+
number: float | decimal.Decimal,
54+
currency: str,
55+
format: str | None = ...,
56+
locale: Locale | str | None = ...,
5057
currency_digits: bool = ...,
51-
format_type: str = ...,
58+
format_type: Literal["name", "standard", "accounting"] = ...,
5259
decimal_quantization: bool = ...,
5360
group_separator: bool = ...,
54-
): ...
61+
) -> str: ...
5562
def format_percent(
56-
number, format: Any | None = ..., locale=..., decimal_quantization: bool = ..., group_separator: bool = ...
57-
): ...
58-
def format_scientific(number, format: Any | None = ..., locale=..., decimal_quantization: bool = ...): ...
63+
number: float | decimal.Decimal,
64+
format: str | None = ...,
65+
locale: Locale | str | None = ...,
66+
decimal_quantization: bool = ...,
67+
group_separator: bool = ...,
68+
) -> str: ...
69+
def format_scientific(
70+
number: float | decimal.Decimal, format: str | None = ..., locale: Locale | str | None = ..., decimal_quantization: bool = ...
71+
) -> str: ...
5972

6073
class NumberFormatError(ValueError):
61-
suggestions: Any
62-
def __init__(self, message, suggestions: Any | None = ...) -> None: ...
74+
suggestions: str | None
75+
def __init__(self, message: str, suggestions: str | None = ...) -> None: ...
6376

64-
def parse_number(string, locale=...): ...
65-
def parse_decimal(string, locale=..., strict: bool = ...): ...
77+
def parse_number(string: str, locale: Locale | str | None = ...) -> int: ...
78+
def parse_decimal(string: str, locale: Locale | str | None = ..., strict: bool = ...) -> decimal.Decimal: ...
6679

6780
PREFIX_END: str
6881
NUMBER_TOKEN: str
69-
PREFIX_PATTERN: Any
70-
NUMBER_PATTERN: Any
82+
PREFIX_PATTERN: str
83+
NUMBER_PATTERN: str
7184
SUFFIX_PATTERN: str
72-
number_re: Any
85+
number_re: Pattern[str]
7386

74-
def parse_grouping(p): ...
75-
def parse_pattern(pattern): ...
87+
def parse_grouping(p: str) -> tuple[int, int]: ...
88+
def parse_pattern(pattern: NumberPattern | str) -> NumberPattern: ...
7689

7790
class NumberPattern:
78-
pattern: Any
79-
prefix: Any
80-
suffix: Any
81-
grouping: Any
82-
int_prec: Any
83-
frac_prec: Any
84-
exp_prec: Any
85-
exp_plus: Any
86-
scale: Any
87-
def __init__(self, pattern, prefix, suffix, grouping, int_prec, frac_prec, exp_prec, exp_plus) -> None: ...
88-
def compute_scale(self): ...
89-
def scientific_notation_elements(self, value, locale): ...
91+
pattern: str
92+
prefix: tuple[str, str]
93+
suffix: tuple[str, str]
94+
grouping: tuple[int, int]
95+
int_prec: tuple[int, int]
96+
frac_prec: tuple[int, int]
97+
exp_prec: tuple[int, int] | None
98+
exp_plus: bool | None
99+
scale: Literal[0, 2, 3]
100+
def __init__(
101+
self,
102+
pattern: str,
103+
prefix: tuple[str, str],
104+
suffix: tuple[str, str],
105+
grouping: tuple[int, int],
106+
int_prec: tuple[int, int],
107+
frac_prec: tuple[int, int],
108+
exp_prec: tuple[int, int] | None,
109+
exp_plus: bool | None,
110+
) -> None: ...
111+
def compute_scale(self) -> Literal[0, 2, 3]: ...
112+
def scientific_notation_elements(
113+
self, value: decimal.Decimal, locale: Locale | str | None
114+
) -> tuple[decimal.Decimal, int, str]: ...
90115
def apply(
91116
self,
92-
value,
93-
locale,
94-
currency: Any | None = ...,
117+
value: float | decimal.Decimal,
118+
locale: Locale | str | None,
119+
currency: str | None = ...,
95120
currency_digits: bool = ...,
96121
decimal_quantization: bool = ...,
97-
force_frac: Any | None = ...,
122+
force_frac: int | None = ...,
98123
group_separator: bool = ...,
99-
): ...
124+
) -> str: ...

0 commit comments

Comments
 (0)