py/objstr: Support '{:08}'.format("Jan") like Python 3.10.

The new test has an .exp file, because it is not compatible with Python 3.9
and lower.

See CPython version of the issue at https://bugs.python.org/issue27772

Signed-off-by: Jeff Epler <jepler@gmail.com>
This commit is contained in:
Jeff Epler 2022-01-10 09:03:27 -06:00 committed by Damien George
parent 5e506567a3
commit 037b2c72a1
4 changed files with 15 additions and 2 deletions

View File

@ -1163,7 +1163,7 @@ STATIC vstr_t mp_obj_str_format_helper(const char *str, const char *top, int *ar
s++;
}
if (*s == '0') {
if (!align) {
if (!align && arg_looks_numeric(arg)) {
align = '=';
}
if (!fill) {

View File

@ -0,0 +1,9 @@
# Python 3.10+ functionality test for {} format string
def test(fmt, *args):
print('{:8s}'.format(fmt) + '>' + fmt.format(*args) + '<')
test("{:0s}", "ab")
test("{:06s}", "ab")
test("{:<06s}", "ab")
test("{:>06s}", "ab")

View File

@ -0,0 +1,4 @@
{:0s} >ab<
{:06s} >ab0000<
{:<06s} >ab0000<
{:>06s} >0000ab<

View File

@ -1,7 +1,7 @@
# tests for errors in {} format string
try:
'{0:0}'.format('zzz')
'{0:=}'.format('zzz')
except (ValueError):
print('ValueError')