mirror of https://github.com/python/cpython
Fix up struct docstrings, add struct.pack_to function for symmetry
This commit is contained in:
parent
90bd0a554e
commit
1fcdc232db
|
@ -62,6 +62,18 @@ def pack(fmt, *args):
|
|||
o = _compile(fmt)
|
||||
return o.pack(*args)
|
||||
|
||||
def pack_to(fmt, buf, offset, *args):
|
||||
"""
|
||||
Pack the values v2, v2, ... according to fmt, write
|
||||
the packed bytes into the writable buffer buf starting at offset.
|
||||
See struct.__doc__ for more on format strings.
|
||||
"""
|
||||
try:
|
||||
o = _cache[fmt]
|
||||
except KeyError:
|
||||
o = _compile(fmt)
|
||||
return o.pack_to(buf, offset, *args)
|
||||
|
||||
def unpack(fmt, s):
|
||||
"""
|
||||
Unpack the string, containing packed C structure data, according
|
||||
|
|
|
@ -509,6 +509,28 @@ class PackBufferTestCase(unittest.TestCase):
|
|||
self.assertRaises(struct.error, s.pack_to, small_buf, 0, test_string)
|
||||
self.assertRaises(struct.error, s.pack_to, small_buf, 2, test_string)
|
||||
|
||||
def test_pack_to_fn( self ):
|
||||
test_string = 'Reykjavik rocks, eow!'
|
||||
writable_buf = array.array('c', ' '*100)
|
||||
fmt = '21s'
|
||||
pack_to = lambda *args: struct.pack_to(fmt, *args)
|
||||
|
||||
# Test without offset
|
||||
pack_to(writable_buf, 0, test_string)
|
||||
from_buf = writable_buf.tostring()[:len(test_string)]
|
||||
self.assertEquals(from_buf, test_string)
|
||||
|
||||
# Test with offset.
|
||||
pack_to(writable_buf, 10, test_string)
|
||||
from_buf = writable_buf.tostring()[:len(test_string)+10]
|
||||
self.assertEquals(from_buf, (test_string[:10] + test_string))
|
||||
|
||||
# Go beyond boundaries.
|
||||
small_buf = array.array('c', ' '*10)
|
||||
self.assertRaises(struct.error, pack_to, small_buf, 0, test_string)
|
||||
self.assertRaises(struct.error, pack_to, small_buf, 2, test_string)
|
||||
|
||||
|
||||
def test_main():
|
||||
test.test_support.run_unittest(PackBufferTestCase)
|
||||
|
||||
|
|
|
@ -1277,7 +1277,7 @@ fail:
|
|||
|
||||
|
||||
PyDoc_STRVAR(s_unpack__doc__,
|
||||
"unpack(str) -> (v1, v2, ...)\n\
|
||||
"S.unpack(str) -> (v1, v2, ...)\n\
|
||||
\n\
|
||||
Return tuple containing values unpacked according to this Struct's format.\n\
|
||||
Requires len(str) == self.size. See struct.__doc__ for more on format\n\
|
||||
|
@ -1299,7 +1299,7 @@ s_unpack(PyObject *self, PyObject *inputstr)
|
|||
}
|
||||
|
||||
PyDoc_STRVAR(s_unpack_from__doc__,
|
||||
"unpack_from(buffer[, offset]) -> (v1, v2, ...)\n\
|
||||
"S.unpack_from(buffer[, offset]) -> (v1, v2, ...)\n\
|
||||
\n\
|
||||
Return tuple containing values unpacked according to this Struct's format.\n\
|
||||
Unlike unpack, unpack_from can unpack values from any object supporting\n\
|
||||
|
@ -1407,7 +1407,7 @@ s_pack_internal(PyStructObject *soself, PyObject *args, int offset, char* buf)
|
|||
|
||||
|
||||
PyDoc_STRVAR(s_pack__doc__,
|
||||
"pack(v1, v2, ...) -> string\n\
|
||||
"S.pack(v1, v2, ...) -> string\n\
|
||||
\n\
|
||||
Return a string containing values v1, v2, ... packed according to this\n\
|
||||
Struct's format. See struct.__doc__ for more on format strings.");
|
||||
|
@ -1445,11 +1445,11 @@ s_pack(PyObject *self, PyObject *args)
|
|||
}
|
||||
|
||||
PyDoc_STRVAR(s_pack_to__doc__,
|
||||
"pack_to(buffer, offset, v1, v2, ...)\n\
|
||||
"S.pack_to(buffer, offset, v1, v2, ...)\n\
|
||||
\n\
|
||||
Pack the values v2, v2, ... according to this Struct's format, write \n\
|
||||
the packed bytes into the given buffer at the given offset. Note that \n\
|
||||
the offset is not an optional argument. See struct.__doc__ for \n\
|
||||
the packed bytes into the writable buffer buf starting at offset. Note\n\
|
||||
that the offset is not an optional argument. See struct.__doc__ for \n\
|
||||
more on format strings.");
|
||||
|
||||
static PyObject *
|
||||
|
@ -1530,8 +1530,8 @@ PyDoc_STRVAR(s__doc__, "Compiled struct object");
|
|||
#define OFF(x) offsetof(PyStructObject, x)
|
||||
|
||||
static PyGetSetDef s_getsetlist[] = {
|
||||
{"format", (getter)s_get_format, (setter)NULL, "buffer's capacity", NULL},
|
||||
{"size", (getter)s_get_size, (setter)NULL, "buffer's position", NULL},
|
||||
{"format", (getter)s_get_format, (setter)NULL, "struct format string", NULL},
|
||||
{"size", (getter)s_get_size, (setter)NULL, "struct size in bytes", NULL},
|
||||
{NULL} /* sentinel */
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue