"""
from __future__ import annotations
-import decimal
import gettext
import locale
import os
)
if TYPE_CHECKING:
+ import datetime as _datetime
+ from decimal import Decimal
+
from typing_extensions import Literal
from babel.dates import _PredefinedTimeFormat
def __init__(
self,
locale: Locale | str,
- tzinfo: datetime.tzinfo | None = None,
+ tzinfo: _datetime.tzinfo | None = None,
*,
numbering_system: Literal["default"] | str = "latn",
) -> None:
def date(
self,
- date: datetime.date | None = None,
+ date: _datetime.date | None = None,
format: _PredefinedTimeFormat | str = 'medium',
) -> str:
"""Return a date formatted according to the given pattern.
def datetime(
self,
- datetime: datetime.date | None = None,
+ datetime: _datetime.date | None = None,
format: _PredefinedTimeFormat | str = 'medium',
) -> str:
"""Return a date and time formatted according to the given pattern.
def time(
self,
- time: datetime.time | datetime.datetime | None = None,
+ time: _datetime.time | _datetime.datetime | None = None,
format: _PredefinedTimeFormat | str = 'medium',
) -> str:
"""Return a time formatted according to the given pattern.
def timedelta(
self,
- delta: datetime.timedelta | int,
+ delta: _datetime.timedelta | int,
granularity: Literal["year", "month", "week", "day", "hour", "minute", "second"] = "second",
threshold: float = 0.85,
format: Literal["narrow", "short", "medium", "long"] = "long",
format=format, add_direction=add_direction,
locale=self.locale)
- def number(self, number: float | decimal.Decimal | str) -> str:
+ def number(self, number: float | Decimal | str) -> str:
"""Return an integer number formatted for the locale.
>>> fmt = Format('en_US')
"""
return format_decimal(number, locale=self.locale, numbering_system=self.numbering_system)
- def decimal(self, number: float | decimal.Decimal | str, format: str | None = None) -> str:
+ def decimal(self, number: float | Decimal | str, format: str | None = None) -> str:
"""Return a decimal number formatted for the locale.
>>> fmt = Format('en_US')
def compact_decimal(
self,
- number: float | decimal.Decimal | str,
+ number: float | Decimal | str,
format_type: Literal['short', 'long'] = 'short',
fraction_digits: int = 0,
) -> str:
numbering_system=self.numbering_system,
)
- def currency(self, number: float | decimal.Decimal | str, currency: str) -> str:
+ def currency(self, number: float | Decimal | str, currency: str) -> str:
"""Return a number in the given currency formatted for the locale.
"""
return format_currency(number, currency, locale=self.locale, numbering_system=self.numbering_system)
def compact_currency(
self,
- number: float | decimal.Decimal | str,
+ number: float | Decimal | str,
currency: str,
format_type: Literal['short'] = 'short',
fraction_digits: int = 0,
return format_compact_currency(number, currency, format_type=format_type, fraction_digits=fraction_digits,
locale=self.locale, numbering_system=self.numbering_system)
- def percent(self, number: float | decimal.Decimal | str, format: str | None = None) -> str:
+ def percent(self, number: float | Decimal | str, format: str | None = None) -> str:
"""Return a number formatted as percentage for the locale.
>>> fmt = Format('en_US')
"""
return format_percent(number, format, locale=self.locale, numbering_system=self.numbering_system)
- def scientific(self, number: float | decimal.Decimal | str) -> str:
+ def scientific(self, number: float | Decimal | str) -> str:
"""Return a number formatted using scientific notation for the locale.
"""
return format_scientific(number, locale=self.locale, numbering_system=self.numbering_system)
# is parsed (fp != None). Ensure that they are always present because
# some *gettext methods (including '.gettext()') rely on the attributes.
self._catalog: dict[tuple[str, Any] | str, str] = {}
- self.plural: Callable[[float | decimal.Decimal], int] = lambda n: int(n != 1)
+ self.plural: Callable[[float | Decimal], int] = lambda n: int(n != 1)
super().__init__(fp=fp)
self.files = list(filter(None, [getattr(fp, 'name', None)]))
self.domain = self.DEFAULT_DOMAIN