Commit f87b85f8 authored by Victor Stinner's avatar Victor Stinner Committed by GitHub

bpo-21071: struct.Struct.format type is now str (#845)

parent a4b091e1
......@@ -443,6 +443,9 @@ The :mod:`struct` module also defines the following type:
The format string used to construct this Struct object.
.. versionchanged:: 3.7
The format string type is now :class:`str` instead of :class:`bytes`.
.. attribute:: size
The calculated size of the struct (and hence of the bytes object produced
......
......@@ -429,6 +429,9 @@ Changes in the Python API
``makedirs()``.
(Contributed by Serhiy Storchaka in :issue:`19930`.)
* The :attr:`struct.Struct.format` type is now :class:`str` instead of
:class:`bytes`. (Contributed by Victor Stinner in :issue:`21071`.)
CPython bytecode changes
------------------------
......
......@@ -618,6 +618,14 @@ class StructTest(unittest.TestCase):
# Shouldn't crash.
self.assertEqual(struct.unpack(b'b', b'a'), (b'a'[0],))
def test_format_attr(self):
s = struct.Struct('=i2H')
self.assertEqual(s.format, '=i2H')
# use a bytes string
s2 = struct.Struct(s.format.encode())
self.assertEqual(s2.format, s.format)
class UnpackIteratorTest(unittest.TestCase):
"""
......
......@@ -374,6 +374,9 @@ Extension Modules
Library
-------
- bpo-21071: struct.Struct.format type is now :class:`str` instead of
:class:`bytes`.
- bpo-29212: Fix concurrent.futures.thread.ThreadPoolExecutor threads to have
a non repr() based thread name by default when no thread_name_prefix is
supplied. They will now identify themselves as "ThreadPoolExecutor-y_n".
......
......@@ -1957,8 +1957,8 @@ s_pack_into(PyObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames
static PyObject *
s_get_format(PyStructObject *self, void *unused)
{
Py_INCREF(self->s_format);
return self->s_format;
return PyUnicode_FromStringAndSize(PyBytes_AS_STRING(self->s_format),
PyBytes_GET_SIZE(self->s_format));
}
static PyObject *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment