Thanks to visit codestin.com Credit goes to github.com
We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
2 parents 84293af + 60ac989 commit 5ca92abCopy full SHA for 5ca92ab
2 files changed
Lib/gettext.py
@@ -158,6 +158,14 @@ def _parse(tokens, priority=-1):
158
159
return result, nexttok
160
161
+def _as_int(n):
162
+ try:
163
+ i = round(n)
164
+ except TypeError:
165
+ raise TypeError('Plural value must be an integer, got %s' %
166
+ (n.__class__.__name__,)) from None
167
+ return n
168
+
169
def c2py(plural):
170
"""Gets a C expression as used in PO files for plural forms and returns a
171
Python function that implements an equivalent expression.
@@ -181,11 +189,11 @@ def c2py(plural):
181
189
elif c == ')':
182
190
depth -= 1
183
191
184
- ns = {}
192
+ ns = {'_as_int': _as_int}
185
193
exec('''if True:
186
194
def func(n):
187
195
if not isinstance(n, int):
188
- raise ValueError('Plural value must be an integer.')
196
+ n = _as_int(n)
197
return int(%s)
198
''' % result, ns)
199
return ns['func']
Lib/test/test_gettext.py
@@ -371,12 +371,16 @@ def test_division(self):
371
self.assertRaises(ZeroDivisionError, f, 0)
372
373
def test_plural_number(self):
374
- f = gettext.c2py('1')
375
- self.assertEqual(f(1), 1)
376
- self.assertRaises(ValueError, f, 1.0)
377
- self.assertRaises(ValueError, f, '1')
378
- self.assertRaises(ValueError, f, [])
379
- self.assertRaises(ValueError, f, object())
+ f = gettext.c2py('n != 1')
+ self.assertEqual(f(1), 0)
+ self.assertEqual(f(2), 1)
+ self.assertEqual(f(1.0), 0)
+ self.assertEqual(f(2.0), 1)
+ self.assertEqual(f(1.1), 1)
380
+ self.assertRaises(TypeError, f, '2')
381
+ self.assertRaises(TypeError, f, b'2')
382
+ self.assertRaises(TypeError, f, [])
383
+ self.assertRaises(TypeError, f, object())
384
385
386
class GNUTranslationParsingTest(GettextBaseTest):
0 commit comments