[Python-checkins] r46454 - in python/trunk: Lib/struct.py Lib/test/test_struct.py Modules/_struct.c
bob.ippolito
python-checkins at python.org
Sat May 27 14:11:36 CEST 2006
Author: bob.ippolito
Date: Sat May 27 14:11:36 2006
New Revision: 46454
Modified:
python/trunk/Lib/struct.py
python/trunk/Lib/test/test_struct.py
python/trunk/Modules/_struct.c
Log:
Fix up struct docstrings, add struct.pack_to function for symmetry
Modified: python/trunk/Lib/struct.py
==============================================================================
--- python/trunk/Lib/struct.py (original)
+++ python/trunk/Lib/struct.py Sat May 27 14:11:36 2006
@@ -62,6 +62,18 @@
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
Modified: python/trunk/Lib/test/test_struct.py
==============================================================================
--- python/trunk/Lib/test/test_struct.py (original)
+++ python/trunk/Lib/test/test_struct.py Sat May 27 14:11:36 2006
@@ -509,6 +509,28 @@
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)
Modified: python/trunk/Modules/_struct.c
==============================================================================
--- python/trunk/Modules/_struct.c (original)
+++ python/trunk/Modules/_struct.c Sat May 27 14:11:36 2006
@@ -1277,7 +1277,7 @@
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 @@
}
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 @@
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 @@
}
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 @@
#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 */
};
More information about the Python-checkins
mailing list