diff -r 2b27ffe611f3 Doc/c-api/arg.rst --- a/Doc/c-api/arg.rst Mon Nov 10 18:28:53 2014 +0200 +++ b/Doc/c-api/arg.rst Mon Nov 10 22:46:05 2014 +0200 @@ -70,14 +70,14 @@ Unless otherwise stated, buffers are not preferable to use the ``O&`` format with :c:func:`PyUnicode_FSConverter` as *converter*. -``s*`` (:class:`str`, :class:`bytes`, :class:`bytearray` or buffer compatible object) [Py_buffer] - This format accepts Unicode objects as well as :term:`bytes-like object`\ s. +``s*`` (:class:`str`, :class:`bytes`, :class:`bytearray` or :term:`bytes-like object`) [Py_buffer] + This format accepts Unicode objects as well as bytes-like objects. It fills a :c:type:`Py_buffer` structure provided by the caller. In this case the resulting C string may contain embedded NUL bytes. Unicode objects are converted to C strings using ``'utf-8'`` encoding. -``s#`` (:class:`str`, :class:`bytes` or read-only buffer compatible object) [const char \*, int or :c:type:`Py_ssize_t`] - Like ``s*``, except that it doesn't accept mutable buffer-like objects +``s#`` (:class:`str`, :class:`bytes` or read-only :term:`bytes-like object`) [const char \*, int or :c:type:`Py_ssize_t`] + Like ``s*``, except that it doesn't accept mutable bytes-like objects such as :class:`bytearray`. The result is stored into two C variables, the first one a pointer to a C string, the second one its length. The string may contain embedded null bytes. Unicode objects are converted @@ -87,15 +87,15 @@ Unless otherwise stated, buffers are not Like ``s``, but the Python object may also be ``None``, in which case the C pointer is set to *NULL*. -``z*`` (:class:`str`, :class:`bytes`, :class:`bytearray`, buffer compatible object or ``None``) [Py_buffer] +``z*`` (:class:`str`, :class:`bytes`, :class:`bytearray`, :term:`bytes-like object` or ``None``) [Py_buffer] Like ``s*``, but the Python object may also be ``None``, in which case the ``buf`` member of the :c:type:`Py_buffer` structure is set to *NULL*. -``z#`` (:class:`str`, :class:`bytes`, read-only buffer compatible object or ``None``) [const char \*, int] +``z#`` (:class:`str`, :class:`bytes`, read-only :term:`bytes-like object` or ``None``) [const char \*, int] Like ``s#``, but the Python object may also be ``None``, in which case the C pointer is set to *NULL*. -``y`` (:class:`bytes`) [const char \*] +``y`` (:class:`bytes` or read-only :term:`bytes-like object`) [const char \*] This format converts a bytes-like object to a C pointer to a character string; it does not accept Unicode objects. The bytes buffer must not contain embedded NUL bytes; if it does, a :exc:`TypeError` @@ -103,12 +103,12 @@ Unless otherwise stated, buffers are not ``y*`` (:class:`bytes`, :class:`bytearray` or :term:`bytes-like object`) [Py_buffer] This variant on ``s*`` doesn't accept Unicode objects, only - :term:`bytes-like object`\ s. **This is the recommended way to accept + bytes-like objects. **This is the recommended way to accept binary data.** -``y#`` (:class:`bytes`) [const char \*, int] - This variant on ``s#`` doesn't accept Unicode objects, only :term:`bytes-like - object`\ s. +``y#`` (:class:`bytes` or read-only :term:`bytes-like object`) [const char \*, int] + This variant on ``s#`` doesn't accept Unicode objects, only bytes-like + objects. ``S`` (:class:`bytes`) [PyBytesObject \*] Requires that the Python object is a :class:`bytes` object, without diff -r 2b27ffe611f3 Doc/c-api/unicode.rst --- a/Doc/c-api/unicode.rst Mon Nov 10 18:28:53 2014 +0200 +++ b/Doc/c-api/unicode.rst Mon Nov 10 22:46:05 2014 +0200 @@ -556,7 +556,7 @@ APIs: Coerce an encoded object *obj* to an Unicode object and return a reference with incremented refcount. - :class:`bytes`, :class:`bytearray` and other char buffer compatible objects + :class:`bytes`, :class:`bytearray` and other :term:`bytes-like object`\ s are decoded according to the given *encoding* and using the error handling defined by *errors*. Both can be *NULL* to have the interface use the default values (see the next section for details). diff -r 2b27ffe611f3 Doc/library/socket.rst --- a/Doc/library/socket.rst Mon Nov 10 18:28:53 2014 +0200 +++ b/Doc/library/socket.rst Mon Nov 10 22:46:05 2014 +0200 @@ -1123,7 +1123,7 @@ to sockets. Send normal and ancillary data to the socket, gathering the non-ancillary data from a series of buffers and concatenating it into a single message. The *buffers* argument specifies the - non-ancillary data as an iterable of buffer-compatible objects + non-ancillary data as an iterable of bytes-like objects (e.g. :class:`bytes` objects); the operating system may set a limit (:func:`~os.sysconf` value ``SC_IOV_MAX``) on the number of buffers that can be used. The *ancdata* argument specifies the ancillary @@ -1131,7 +1131,7 @@ to sockets. ``(cmsg_level, cmsg_type, cmsg_data)``, where *cmsg_level* and *cmsg_type* are integers specifying the protocol level and protocol-specific type respectively, and *cmsg_data* is a - buffer-compatible object holding the associated data. Note that + bytes-like object holding the associated data. Note that some systems (in particular, systems without :func:`CMSG_SPACE`) might support sending only one control message per call. The *flags* argument defaults to 0 and has the same meaning as for diff -r 2b27ffe611f3 Include/unicodeobject.h --- a/Include/unicodeobject.h Mon Nov 10 18:28:53 2014 +0200 +++ b/Include/unicodeobject.h Mon Nov 10 22:46:05 2014 +0200 @@ -849,7 +849,7 @@ PyAPI_FUNC(int) PyUnicode_Resize( Coercion is done in the following way: - 1. bytes, bytearray and other char buffer compatible objects are decoded + 1. bytes, bytearray and other bytes-like objects are decoded under the assumptions that they contain data using the UTF-8 encoding. Decoding is done in "strict" mode. diff -r 2b27ffe611f3 Lib/multiprocessing/connection.py --- a/Lib/multiprocessing/connection.py Mon Nov 10 18:28:53 2014 +0200 +++ b/Lib/multiprocessing/connection.py Mon Nov 10 22:46:05 2014 +0200 @@ -220,7 +220,7 @@ class _ConnectionBase: def recv_bytes_into(self, buf, offset=0): """ - Receive bytes data into a writeable buffer-like object. + Receive bytes data into a writeable bytes-like object. Return the number of bytes read. """ self._check_closed() diff -r 2b27ffe611f3 Modules/arraymodule.c --- a/Modules/arraymodule.c Mon Nov 10 18:28:53 2014 +0200 +++ b/Modules/arraymodule.c Mon Nov 10 22:46:05 2014 +0200 @@ -1573,14 +1573,14 @@ frombytes(arrayobject *self, Py_buffer * Py_ssize_t n; if (buffer->itemsize != 1) { PyBuffer_Release(buffer); - PyErr_SetString(PyExc_TypeError, "string/buffer of bytes required."); + PyErr_SetString(PyExc_TypeError, "a bytes-like object is required"); return NULL; } n = buffer->len; if (n % itemsize != 0) { PyBuffer_Release(buffer); PyErr_SetString(PyExc_ValueError, - "string length not a multiple of item size"); + "bytes length not a multiple of item size"); return NULL; } n = n / itemsize; diff -r 2b27ffe611f3 Modules/socketmodule.c --- a/Modules/socketmodule.c Mon Nov 10 18:28:53 2014 +0200 +++ b/Modules/socketmodule.c Mon Nov 10 22:46:05 2014 +0200 @@ -3560,7 +3560,7 @@ sock_sendmsg(PySocketSockObject *s, PyOb for (; ndatabufs < ndataparts; ndatabufs++) { if (!PyArg_Parse(PySequence_Fast_GET_ITEM(data_fast, ndatabufs), "y*;sendmsg() argument 1 must be an iterable of " - "buffer-compatible objects", + "bytes-like objects", &databufs[ndatabufs])) goto finally; iovs[ndatabufs].iov_base = databufs[ndatabufs].buf; @@ -3717,12 +3717,12 @@ PyDoc_STRVAR(sendmsg_doc, Send normal and ancillary data to the socket, gathering the\n\ non-ancillary data from a series of buffers and concatenating it into\n\ a single message. The buffers argument specifies the non-ancillary\n\ -data as an iterable of buffer-compatible objects (e.g. bytes objects).\n\ +data as an iterable of bytes-like objects (e.g. bytes objects).\n\ The ancdata argument specifies the ancillary data (control messages)\n\ as an iterable of zero or more tuples (cmsg_level, cmsg_type,\n\ cmsg_data), where cmsg_level and cmsg_type are integers specifying the\n\ protocol level and protocol-specific type respectively, and cmsg_data\n\ -is a buffer-compatible object holding the associated data. The flags\n\ +is a bytes-like object holding the associated data. The flags\n\ argument defaults to 0 and has the same meaning as for send(). If\n\ address is supplied and not None, it sets a destination address for\n\ the message. The return value is the number of bytes of non-ancillary\n\ diff -r 2b27ffe611f3 Objects/stringlib/join.h --- a/Objects/stringlib/join.h Mon Nov 10 18:28:53 2014 +0200 +++ b/Objects/stringlib/join.h Mon Nov 10 22:46:05 2014 +0200 @@ -53,15 +53,15 @@ STRINGLIB(bytes_join)(PyObject *sep, PyO /* Here is the general case. Do a pre-pass to figure out the total * amount of space we'll need (sz), and see whether all arguments are - * buffer-compatible. + * bytes-like. */ for (i = 0, nbufs = 0; i < seqlen; i++) { Py_ssize_t itemlen; item = PySequence_Fast_GET_ITEM(seq, i); if (_getbuffer(item, &buffers[i]) < 0) { PyErr_Format(PyExc_TypeError, - "sequence item %zd: expected bytes, bytearray, " - "or an object with the buffer interface, %.80s found", + "sequence item %zd: expected a bytes-like object, " + "%.80s found", i, Py_TYPE(item)->tp_name); goto error; } diff -r 2b27ffe611f3 Objects/unicodeobject.c --- a/Objects/unicodeobject.c Mon Nov 10 18:28:53 2014 +0200 +++ b/Objects/unicodeobject.c Mon Nov 10 22:46:05 2014 +0200 @@ -2940,8 +2940,7 @@ PyUnicode_FromEncodedObject(PyObject *ob /* Retrieve a bytes buffer view through the PEP 3118 buffer interface */ if (PyObject_GetBuffer(obj, &buffer, PyBUF_SIMPLE) < 0) { PyErr_Format(PyExc_TypeError, - "coercing to str: need bytes, bytearray " - "or buffer-like object, %.80s found", + "coercing to str: need a bytes-like object, %.80s found", Py_TYPE(obj)->tp_name); return NULL; } diff -r 2b27ffe611f3 Python/getargs.c --- a/Python/getargs.c Mon Nov 10 18:28:53 2014 +0200 +++ b/Python/getargs.c Mon Nov 10 22:46:05 2014 +0200 @@ -849,7 +849,7 @@ convertsimple(PyObject *arg, const char /* XXX WAAAAH! 's', 'y', 'z', 'u', 'Z', 'e', 'w' codes all need to be cleaned up! */ - case 'y': {/* any buffer-like object, but not PyUnicode */ + case 'y': {/* any bytes-like object */ void **p = (void **)va_arg(*p_va, char **); char *buf; Py_ssize_t count; @@ -880,8 +880,8 @@ convertsimple(PyObject *arg, const char break; } - case 's': /* text string */ - case 'z': /* text string or None */ + case 's': /* text string or bytes-like object */ + case 'z': /* text string, bytes-like object or None */ { if (*format == '*') { /* "s*" or "z*" */ @@ -897,7 +897,7 @@ convertsimple(PyObject *arg, const char arg, msgbuf, bufsize); PyBuffer_FillInfo(p, arg, sarg, len, 1, 0); } - else { /* any buffer-like object */ + else { /* any bytes-like object */ char *buf; if (getbuffer(arg, p, &buf) < 0) return converterr(buf, arg, msgbuf, bufsize); @@ -908,7 +908,7 @@ convertsimple(PyObject *arg, const char arg, msgbuf, bufsize); } format++; - } else if (*format == '#') { /* any buffer-like object */ + } else if (*format == '#') { /* a string or read-only bytes-like object */ /* "s#" or "z#" */ void **p = (void **)va_arg(*p_va, char **); FETCH_SIZE; @@ -926,7 +926,7 @@ convertsimple(PyObject *arg, const char *p = sarg; STORE_SIZE(len); } - else { /* any buffer-like object */ + else { /* read-only bytes-like object */ /* XXX Really? */ char *buf; Py_ssize_t count = convertbuffer(arg, p, &buf); @@ -966,7 +966,7 @@ convertsimple(PyObject *arg, const char { Py_UNICODE **p = va_arg(*p_va, Py_UNICODE **); - if (*format == '#') { /* any buffer-like object */ + if (*format == '#') { /* "s#" or "Z#" */ FETCH_SIZE; diff -r 2b27ffe611f3 Python/marshal.c --- a/Python/marshal.c Mon Nov 10 18:28:53 2014 +0200 +++ b/Python/marshal.c Mon Nov 10 22:46:05 2014 +0200 @@ -527,7 +527,7 @@ w_complex_object(PyObject *v, char flag, w_object(co->co_lnotab, p); } else if (PyObject_CheckBuffer(v)) { - /* Write unknown buffer-style objects as a string */ + /* Write unknown bytes-like objects as a byte string */ Py_buffer view; if (PyObject_GetBuffer(v, &view, PyBUF_SIMPLE) != 0) { w_byte(TYPE_UNKNOWN, p);