gh-118761: Always lazy import re in locale (#129860)

This commit is contained in:
Semyon Moroz 2025-03-27 17:47:08 +04:00 committed by GitHub
parent 3796884528
commit cf5e438c02
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 10 additions and 3 deletions

View file

@ -13,7 +13,6 @@ also includes default encodings for all supported locale names.
import sys import sys
import encodings import encodings
import encodings.aliases import encodings.aliases
import re
import _collections_abc import _collections_abc
from builtins import str as _builtin_str from builtins import str as _builtin_str
import functools import functools
@ -177,8 +176,7 @@ def _strip_padding(s, amount):
amount -= 1 amount -= 1
return s[lpos:rpos+1] return s[lpos:rpos+1]
_percent_re = re.compile(r'%(?:\((?P<key>.*?)\))?' _percent_re = None
r'(?P<modifiers>[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]')
def _format(percent, value, grouping=False, monetary=False, *additional): def _format(percent, value, grouping=False, monetary=False, *additional):
if additional: if additional:
@ -217,6 +215,13 @@ def format_string(f, val, grouping=False, monetary=False):
Grouping is applied if the third parameter is true. Grouping is applied if the third parameter is true.
Conversion uses monetary thousands separator and grouping strings if Conversion uses monetary thousands separator and grouping strings if
forth parameter monetary is true.""" forth parameter monetary is true."""
global _percent_re
if _percent_re is None:
import re
_percent_re = re.compile(r'%(?:\((?P<key>.*?)\))?(?P<modifiers'
r'>[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]')
percents = list(_percent_re.finditer(f)) percents = list(_percent_re.finditer(f))
new_f = _percent_re.sub('%s', f) new_f = _percent_re.sub('%s', f)

View file

@ -0,0 +1,2 @@
Improve import time of :mod:`locale` using lazy import ``re``. Patch by
Semyon Moroz.