mirror of
https://github.com/python/cpython.git
synced 2025-08-27 04:05:34 +00:00
Real pickling for bytes.
Restore complex pickling. Use cPickle in io.py.
This commit is contained in:
parent
0ad0812edb
commit
0dd32e246c
3 changed files with 29 additions and 6 deletions
|
@ -23,12 +23,18 @@ def constructor(object):
|
||||||
if not callable(object):
|
if not callable(object):
|
||||||
raise TypeError("constructors must be callable")
|
raise TypeError("constructors must be callable")
|
||||||
|
|
||||||
# Example: provide pickling support for bytes objects.
|
# Example: provide pickling support for complex numbers.
|
||||||
|
|
||||||
def _pickle_bytes(b):
|
try:
|
||||||
return bytes, (str(b),)
|
complex
|
||||||
|
except NameError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
|
||||||
pickle(bytes, _pickle_bytes)
|
def pickle_complex(c):
|
||||||
|
return complex, (c.real, c.imag)
|
||||||
|
|
||||||
|
pickle(complex, pickle_complex, complex)
|
||||||
|
|
||||||
# Support for pickling new-style objects
|
# Support for pickling new-style objects
|
||||||
|
|
||||||
|
|
|
@ -30,10 +30,14 @@ __all__ = ["BlockingIOError", "open", "IOBase", "RawIOBase", "FileIO",
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import codecs
|
import codecs
|
||||||
import pickle
|
|
||||||
import _fileio
|
import _fileio
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
|
try:
|
||||||
|
import cPickle as pickle
|
||||||
|
except ImportError:
|
||||||
|
import pickle
|
||||||
|
|
||||||
# XXX Shouldn't we use st_blksize whenever we can?
|
# XXX Shouldn't we use st_blksize whenever we can?
|
||||||
DEFAULT_BUFFER_SIZE = 8 * 1024 # bytes
|
DEFAULT_BUFFER_SIZE = 8 * 1024 # bytes
|
||||||
|
|
||||||
|
|
|
@ -2598,6 +2598,17 @@ bytes_fromhex(PyObject *cls, PyObject *args)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
bytes_reduce(PyBytesObject *self)
|
||||||
|
{
|
||||||
|
return Py_BuildValue("(O(s#))",
|
||||||
|
self->ob_type,
|
||||||
|
self->ob_bytes == NULL ? "" : self->ob_bytes,
|
||||||
|
self->ob_size);
|
||||||
|
}
|
||||||
|
|
||||||
static PySequenceMethods bytes_as_sequence = {
|
static PySequenceMethods bytes_as_sequence = {
|
||||||
(lenfunc)bytes_length, /* sq_length */
|
(lenfunc)bytes_length, /* sq_length */
|
||||||
(binaryfunc)bytes_concat, /* sq_concat */
|
(binaryfunc)bytes_concat, /* sq_concat */
|
||||||
|
@ -2650,8 +2661,10 @@ bytes_methods[] = {
|
||||||
{"remove", (PyCFunction)bytes_remove, METH_O, remove__doc__},
|
{"remove", (PyCFunction)bytes_remove, METH_O, remove__doc__},
|
||||||
{"decode", (PyCFunction)bytes_decode, METH_VARARGS, decode_doc},
|
{"decode", (PyCFunction)bytes_decode, METH_VARARGS, decode_doc},
|
||||||
{"__alloc__", (PyCFunction)bytes_alloc, METH_NOARGS, alloc_doc},
|
{"__alloc__", (PyCFunction)bytes_alloc, METH_NOARGS, alloc_doc},
|
||||||
{"fromhex", (PyCFunction)bytes_fromhex, METH_VARARGS|METH_CLASS, fromhex_doc},
|
{"fromhex", (PyCFunction)bytes_fromhex, METH_VARARGS|METH_CLASS,
|
||||||
|
fromhex_doc},
|
||||||
{"join", (PyCFunction)bytes_join, METH_O|METH_CLASS, join_doc},
|
{"join", (PyCFunction)bytes_join, METH_O|METH_CLASS, join_doc},
|
||||||
|
{"__reduce__", (PyCFunction)bytes_reduce, METH_NOARGS, reduce_doc},
|
||||||
{NULL}
|
{NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue