Download rtme/lib/python3.10/site-packages/babel/lists.py from ckadirt/backup_rtme: direct link, hf CLI and curl.
- Browser
- Download file 4.36 kB
-
https://huggingface.co/ckadirt/backup_rtme/resolve/main/rtme/lib/python3.10/site-packages/babel/lists.py
- Command line
-
hf download hf://ckadirt/backup_rtme/rtme/lib/python3.10/site-packages/babel/lists.py
-
curl -L -o lists.py https://huggingface.co/ckadirt/backup_rtme/resolve/main/rtme/lib/python3.10/site-packages/babel/lists.py
4.36 kB
| """ | |
| babel.lists | |
| ~~~~~~~~~~~ | |
| Locale dependent formatting of lists. | |
| The default locale for the functions in this module is determined by the | |
| following environment variables, in that order: | |
| * ``LC_ALL``, and | |
| * ``LANG`` | |
| :copyright: (c) 2015-2025 by the Babel Team. | |
| :license: BSD, see LICENSE for more details. | |
| """ | |
| from __future__ import annotations | |
| import warnings | |
| from collections.abc import Sequence | |
| from typing import Literal | |
| from babel.core import Locale, default_locale | |
| _DEFAULT_LOCALE = default_locale() # TODO(3.0): Remove this. | |
| def __getattr__(name): | |
| if name == "DEFAULT_LOCALE": | |
| warnings.warn( | |
| "The babel.lists.DEFAULT_LOCALE constant is deprecated and will be removed.", | |
| DeprecationWarning, | |
| stacklevel=2, | |
| ) | |
| return _DEFAULT_LOCALE | |
| raise AttributeError(f"module {__name__!r} has no attribute {name!r}") | |
| def format_list( | |
| lst: Sequence[str], | |
| style: Literal['standard', 'standard-short', 'or', 'or-short', 'unit', 'unit-short', 'unit-narrow'] = 'standard', | |
| locale: Locale | str | None = None, | |
| ) -> str: | |
| """ | |
| Format the items in `lst` as a list. | |
| >>> format_list(['apples', 'oranges', 'pears'], locale='en') | |
| u'apples, oranges, and pears' | |
| >>> format_list(['apples', 'oranges', 'pears'], locale='zh') | |
| u'apples\u3001oranges\u548cpears' | |
| >>> format_list(['omena', 'peruna', 'aplari'], style='or', locale='fi') | |
| u'omena, peruna tai aplari' | |
| Not all styles are necessarily available in all locales. | |
| The function will attempt to fall back to replacement styles according to the rules | |
| set forth in the CLDR root XML file, and raise a ValueError if no suitable replacement | |
| can be found. | |
| The following text is verbatim from the Unicode TR35-49 spec [1]. | |
| * standard: | |
| A typical 'and' list for arbitrary placeholders. | |
| eg. "January, February, and March" | |
| * standard-short: | |
| A short version of an 'and' list, suitable for use with short or abbreviated placeholder values. | |
| eg. "Jan., Feb., and Mar." | |
| * or: | |
| A typical 'or' list for arbitrary placeholders. | |
| eg. "January, February, or March" | |
| * or-short: | |
| A short version of an 'or' list. | |
| eg. "Jan., Feb., or Mar." | |
| * unit: | |
| A list suitable for wide units. | |
| eg. "3 feet, 7 inches" | |
| * unit-short: | |
| A list suitable for short units | |
| eg. "3 ft, 7 in" | |
| * unit-narrow: | |
| A list suitable for narrow units, where space on the screen is very limited. | |
| eg. "3′ 7″" | |
| [1]: https://www.unicode.org/reports/tr35/tr35-49/tr35-general.html#ListPatterns | |
| :param lst: a sequence of items to format in to a list | |
| :param style: the style to format the list with. See above for description. | |
| :param locale: the locale. Defaults to the system locale. | |
| """ | |
| locale = Locale.parse(locale or _DEFAULT_LOCALE) | |
| if not lst: | |
| return '' | |
| if len(lst) == 1: | |
| return lst[0] | |
| patterns = _resolve_list_style(locale, style) | |
| if len(lst) == 2 and '2' in patterns: | |
| return patterns['2'].format(*lst) | |
| result = patterns['start'].format(lst[0], lst[1]) | |
| for elem in lst[2:-1]: | |
| result = patterns['middle'].format(result, elem) | |
| result = patterns['end'].format(result, lst[-1]) | |
| return result | |
| # Based on CLDR 45's root.xml file's `<alias>`es. | |
| # The root file defines both `standard` and `or`, | |
| # so they're always available. | |
| # TODO: It would likely be better to use the | |
| # babel.localedata.Alias mechanism for this, | |
| # but I'm not quite sure how it's supposed to | |
| # work with inheritance and data in the root. | |
| _style_fallbacks = { | |
| "or-narrow": ["or-short", "or"], | |
| "or-short": ["or"], | |
| "standard-narrow": ["standard-short", "standard"], | |
| "standard-short": ["standard"], | |
| "unit": ["unit-short", "standard"], | |
| "unit-narrow": ["unit-short", "unit", "standard"], | |
| "unit-short": ["standard"], | |
| } | |
| def _resolve_list_style(locale: Locale, style: str): | |
| for style in (style, *(_style_fallbacks.get(style, []))): # noqa: B020 | |
| if style in locale.list_patterns: | |
| return locale.list_patterns[style] | |
| raise ValueError( | |
| f"Locale {locale} does not support list formatting style {style!r} " | |
| f"(supported are {sorted(locale.list_patterns)})", | |
| ) | |