Skip to content

Commit 566d9aa

Browse files
authored
Update gettext.py from 3.13.5 (#6063)
1 parent 18a9bf0 commit 566d9aa

File tree

2 files changed

+419
-51
lines changed

2 files changed

+419
-51
lines changed

Lib/gettext.py

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
# find this format documented anywhere.
4747

4848

49+
import operator
4950
import os
5051
import re
5152
import sys
@@ -166,14 +167,28 @@ def _parse(tokens, priority=-1):
166167

167168
def _as_int(n):
168169
try:
169-
i = round(n)
170+
round(n)
170171
except TypeError:
171172
raise TypeError('Plural value must be an integer, got %s' %
172173
(n.__class__.__name__,)) from None
174+
return _as_int2(n)
175+
176+
def _as_int2(n):
177+
try:
178+
return operator.index(n)
179+
except TypeError:
180+
pass
181+
173182
import warnings
183+
frame = sys._getframe(1)
184+
stacklevel = 2
185+
while frame.f_back is not None and frame.f_globals.get('__name__') == __name__:
186+
stacklevel += 1
187+
frame = frame.f_back
174188
warnings.warn('Plural value must be an integer, got %s' %
175189
(n.__class__.__name__,),
176-
DeprecationWarning, 4)
190+
DeprecationWarning,
191+
stacklevel)
177192
return n
178193

179194

@@ -200,7 +215,7 @@ def c2py(plural):
200215
elif c == ')':
201216
depth -= 1
202217

203-
ns = {'_as_int': _as_int}
218+
ns = {'_as_int': _as_int, '__name__': __name__}
204219
exec('''if True:
205220
def func(n):
206221
if not isinstance(n, int):
@@ -280,6 +295,7 @@ def gettext(self, message):
280295
def ngettext(self, msgid1, msgid2, n):
281296
if self._fallback:
282297
return self._fallback.ngettext(msgid1, msgid2, n)
298+
n = _as_int2(n)
283299
if n == 1:
284300
return msgid1
285301
else:
@@ -293,6 +309,7 @@ def pgettext(self, context, message):
293309
def npgettext(self, context, msgid1, msgid2, n):
294310
if self._fallback:
295311
return self._fallback.npgettext(context, msgid1, msgid2, n)
312+
n = _as_int2(n)
296313
if n == 1:
297314
return msgid1
298315
else:
@@ -579,6 +596,7 @@ def dngettext(domain, msgid1, msgid2, n):
579596
try:
580597
t = translation(domain, _localedirs.get(domain, None))
581598
except OSError:
599+
n = _as_int2(n)
582600
if n == 1:
583601
return msgid1
584602
else:
@@ -598,6 +616,7 @@ def dnpgettext(domain, context, msgid1, msgid2, n):
598616
try:
599617
t = translation(domain, _localedirs.get(domain, None))
600618
except OSError:
619+
n = _as_int2(n)
601620
if n == 1:
602621
return msgid1
603622
else:

0 commit comments

Comments
 (0)