mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
gh-114678: Fix incorrect deprecation warning for 'N' specifier in Decimal format (GH-114683)
Co-authored-by: Stefan Krah <skrah@bytereef.org>
This commit is contained in:
parent
0cd9bacb8a
commit
aa3402ad45
3 changed files with 20 additions and 7 deletions
|
@ -41,6 +41,7 @@ from test.support import (TestFailed,
|
||||||
darwin_malloc_err_warning, is_emscripten)
|
darwin_malloc_err_warning, is_emscripten)
|
||||||
from test.support.import_helper import import_fresh_module
|
from test.support.import_helper import import_fresh_module
|
||||||
from test.support import threading_helper
|
from test.support import threading_helper
|
||||||
|
from test.support import warnings_helper
|
||||||
import random
|
import random
|
||||||
import inspect
|
import inspect
|
||||||
import threading
|
import threading
|
||||||
|
@ -1237,7 +1238,14 @@ class FormatTest:
|
||||||
else:
|
else:
|
||||||
self.assertRaises(ValueError, format, h, 'N')
|
self.assertRaises(ValueError, format, h, 'N')
|
||||||
self.assertRaises(ValueError, format, h, '010.3N')
|
self.assertRaises(ValueError, format, h, '010.3N')
|
||||||
|
with warnings_helper.check_no_warnings(self):
|
||||||
|
self.assertEqual(format(h, 'N>10.3'), 'NN6.63E-34')
|
||||||
|
self.assertEqual(format(h, 'N>10.3n'), 'NN6.63e-34')
|
||||||
|
self.assertEqual(format(h, 'N>10.3e'), 'N6.626e-34')
|
||||||
|
self.assertEqual(format(h, 'N>10.3f'), 'NNNNN0.000')
|
||||||
|
self.assertRaises(ValueError, format, h, '>Nf')
|
||||||
|
self.assertRaises(ValueError, format, h, '10Nf')
|
||||||
|
self.assertRaises(ValueError, format, h, 'Nx')
|
||||||
|
|
||||||
@run_with_locale('LC_ALL', 'ps_AF')
|
@run_with_locale('LC_ALL', 'ps_AF')
|
||||||
def test_wide_char_separator_decimal_point(self):
|
def test_wide_char_separator_decimal_point(self):
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
Ensure that deprecation warning for 'N' specifier in :class:`~decimal.Decimal`
|
||||||
|
format is not raised for cases where 'N' appears in other places
|
||||||
|
in the format specifier. Based on patch by Stefan Krah.
|
|
@ -3446,6 +3446,14 @@ dec_format(PyObject *dec, PyObject *args)
|
||||||
if (fmt == NULL) {
|
if (fmt == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (size > 0 && fmt[size-1] == 'N') {
|
||||||
|
if (PyErr_WarnEx(PyExc_DeprecationWarning,
|
||||||
|
"Format specifier 'N' is deprecated", 1) < 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* NOTE: If https://github.com/python/cpython/pull/29438 lands, the
|
/* NOTE: If https://github.com/python/cpython/pull/29438 lands, the
|
||||||
* format string manipulation below can be eliminated by enhancing
|
* format string manipulation below can be eliminated by enhancing
|
||||||
* the forked mpd_parse_fmt_str(). */
|
* the forked mpd_parse_fmt_str(). */
|
||||||
|
@ -3593,12 +3601,6 @@ dec_format(PyObject *dec, PyObject *args)
|
||||||
if (replace_fillchar) {
|
if (replace_fillchar) {
|
||||||
dec_replace_fillchar(decstring);
|
dec_replace_fillchar(decstring);
|
||||||
}
|
}
|
||||||
if (strchr(fmt, 'N') != NULL) {
|
|
||||||
if (PyErr_WarnEx(PyExc_DeprecationWarning,
|
|
||||||
"Format specifier 'N' is deprecated", 1) < 0) {
|
|
||||||
goto finish;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
result = PyUnicode_DecodeUTF8(decstring, size, NULL);
|
result = PyUnicode_DecodeUTF8(decstring, size, NULL);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue