Commit 308d637c authored by Benjamin Peterson's avatar Benjamin Peterson

Merged revisions 74929 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r74929 | benjamin.peterson | 2009-09-18 16:14:55 -0500 (Fri, 18 Sep 2009) | 1 line

  add keyword arguments support to str/unicode encode and decode #6300
........
parent 7a4e5866
...@@ -788,11 +788,10 @@ String Methods ...@@ -788,11 +788,10 @@ String Methods
.. index:: pair: string; methods .. index:: pair: string; methods
String objects support the methods listed below. Note that none of these String objects support the methods listed below.
methods take keyword arguments.
In addition, Python's strings support the sequence type methods described in In addition, Python's strings support the sequence type methods described in the
the :ref:`typesseq` section. To output formatted strings, see the :ref:`typesseq` section. To output formatted strings, see the
:ref:`string-formatting` section. Also, see the :mod:`re` module for string :ref:`string-formatting` section. Also, see the :mod:`re` module for string
functions based on regular expressions. functions based on regular expressions.
...@@ -825,6 +824,8 @@ functions based on regular expressions. ...@@ -825,6 +824,8 @@ functions based on regular expressions.
:func:`codecs.register_error`, see section :ref:`codec-base-classes`. For a :func:`codecs.register_error`, see section :ref:`codec-base-classes`. For a
list of possible encodings, see section :ref:`standard-encodings`. list of possible encodings, see section :ref:`standard-encodings`.
.. versionchanged:: 3.1
Added support for keyword arguments added.
.. method:: str.endswith(suffix[, start[, end]]) .. method:: str.endswith(suffix[, start[, end]])
...@@ -1539,6 +1540,9 @@ Wherever one of these methods needs to interpret the bytes as characters ...@@ -1539,6 +1540,9 @@ Wherever one of these methods needs to interpret the bytes as characters
:func:`codecs.register_error`, see section :ref:`codec-base-classes`. For a :func:`codecs.register_error`, see section :ref:`codec-base-classes`. For a
list of possible encodings, see section :ref:`standard-encodings`. list of possible encodings, see section :ref:`standard-encodings`.
.. versionchanged:: 3.1
Added support for keyword arguments.
The bytes and bytearray types have an additional class method: The bytes and bytearray types have an additional class method:
......
...@@ -186,6 +186,8 @@ class BaseBytesTest(unittest.TestCase): ...@@ -186,6 +186,8 @@ class BaseBytesTest(unittest.TestCase):
b = self.type2test(sample, "latin1") b = self.type2test(sample, "latin1")
self.assertRaises(UnicodeDecodeError, b.decode, "utf8") self.assertRaises(UnicodeDecodeError, b.decode, "utf8")
self.assertEqual(b.decode("utf8", "ignore"), "Hello world\n") self.assertEqual(b.decode("utf8", "ignore"), "Hello world\n")
self.assertEqual(b.decode(errors="ignore", encoding="utf8"),
"Hello world\n")
def test_from_int(self): def test_from_int(self):
b = self.type2test(0) b = self.type2test(0)
......
...@@ -955,6 +955,10 @@ class UnicodeTest( ...@@ -955,6 +955,10 @@ class UnicodeTest(
self.assertRaises(UnicodeError, 'Andr\202 x'.encode, 'ascii','strict') self.assertRaises(UnicodeError, 'Andr\202 x'.encode, 'ascii','strict')
self.assertEqual('Andr\202 x'.encode('ascii','ignore'), b"Andr x") self.assertEqual('Andr\202 x'.encode('ascii','ignore'), b"Andr x")
self.assertEqual('Andr\202 x'.encode('ascii','replace'), b"Andr? x") self.assertEqual('Andr\202 x'.encode('ascii','replace'), b"Andr? x")
self.assertEqual('Andr\202 x'.encode('ascii', 'replace'),
'Andr\202 x'.encode('ascii', errors='replace'))
self.assertEqual('Andr\202 x'.encode('ascii', 'ignore'),
'Andr\202 x'.encode(encoding='ascii', errors='ignore'))
# Error handling (decoding) # Error handling (decoding)
self.assertRaises(UnicodeError, str, b'Andr\202 x', 'ascii') self.assertRaises(UnicodeError, str, b'Andr\202 x', 'ascii')
......
...@@ -87,6 +87,7 @@ Peter Bosch ...@@ -87,6 +87,7 @@ Peter Bosch
Eric Bouck Eric Bouck
Thierry Bousch Thierry Bousch
Sebastian Boving Sebastian Boving
Jeff Bradberry
Monty Brandenberg Monty Brandenberg
Georg Brandl Georg Brandl
Christopher Brannon Christopher Brannon
......
...@@ -2877,12 +2877,13 @@ as well as any other name registered with codecs.register_error that is\n\ ...@@ -2877,12 +2877,13 @@ as well as any other name registered with codecs.register_error that is\n\
able to handle UnicodeDecodeErrors."); able to handle UnicodeDecodeErrors.");
static PyObject * static PyObject *
bytearray_decode(PyObject *self, PyObject *args) bytearray_decode(PyObject *self, PyObject *args, PyObject *kwargs)
{ {
const char *encoding = NULL; const char *encoding = NULL;
const char *errors = NULL; const char *errors = NULL;
static char *kwlist[] = {"encoding", "errors", 0};
if (!PyArg_ParseTuple(args, "|ss:decode", &encoding, &errors)) if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ss:decode", kwlist, &encoding, &errors))
return NULL; return NULL;
if (encoding == NULL) if (encoding == NULL)
encoding = PyUnicode_GetDefaultEncoding(); encoding = PyUnicode_GetDefaultEncoding();
...@@ -3112,7 +3113,7 @@ bytearray_methods[] = { ...@@ -3112,7 +3113,7 @@ bytearray_methods[] = {
_Py_capitalize__doc__}, _Py_capitalize__doc__},
{"center", (PyCFunction)stringlib_center, METH_VARARGS, center__doc__}, {"center", (PyCFunction)stringlib_center, METH_VARARGS, center__doc__},
{"count", (PyCFunction)bytearray_count, METH_VARARGS, count__doc__}, {"count", (PyCFunction)bytearray_count, METH_VARARGS, count__doc__},
{"decode", (PyCFunction)bytearray_decode, METH_VARARGS, decode_doc}, {"decode", (PyCFunction)bytearray_decode, METH_VARARGS | METH_KEYWORDS, decode_doc},
{"endswith", (PyCFunction)bytearray_endswith, METH_VARARGS, endswith__doc__}, {"endswith", (PyCFunction)bytearray_endswith, METH_VARARGS, endswith__doc__},
{"expandtabs", (PyCFunction)stringlib_expandtabs, METH_VARARGS, {"expandtabs", (PyCFunction)stringlib_expandtabs, METH_VARARGS,
expandtabs__doc__}, expandtabs__doc__},
......
...@@ -2725,12 +2725,13 @@ as well as any other name registerd with codecs.register_error that is\n\ ...@@ -2725,12 +2725,13 @@ as well as any other name registerd with codecs.register_error that is\n\
able to handle UnicodeDecodeErrors."); able to handle UnicodeDecodeErrors.");
static PyObject * static PyObject *
bytes_decode(PyObject *self, PyObject *args) bytes_decode(PyObject *self, PyObject *args, PyObject *kwargs)
{ {
const char *encoding = NULL; const char *encoding = NULL;
const char *errors = NULL; const char *errors = NULL;
static char *kwlist[] = {"encoding", "errors", 0};
if (!PyArg_ParseTuple(args, "|ss:decode", &encoding, &errors)) if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ss:decode", kwlist, &encoding, &errors))
return NULL; return NULL;
if (encoding == NULL) if (encoding == NULL)
encoding = PyUnicode_GetDefaultEncoding(); encoding = PyUnicode_GetDefaultEncoding();
...@@ -2831,7 +2832,7 @@ bytes_methods[] = { ...@@ -2831,7 +2832,7 @@ bytes_methods[] = {
_Py_capitalize__doc__}, _Py_capitalize__doc__},
{"center", (PyCFunction)stringlib_center, METH_VARARGS, center__doc__}, {"center", (PyCFunction)stringlib_center, METH_VARARGS, center__doc__},
{"count", (PyCFunction)bytes_count, METH_VARARGS, count__doc__}, {"count", (PyCFunction)bytes_count, METH_VARARGS, count__doc__},
{"decode", (PyCFunction)bytes_decode, METH_VARARGS, decode__doc__}, {"decode", (PyCFunction)bytes_decode, METH_VARARGS | METH_KEYWORDS, decode__doc__},
{"endswith", (PyCFunction)bytes_endswith, METH_VARARGS, {"endswith", (PyCFunction)bytes_endswith, METH_VARARGS,
endswith__doc__}, endswith__doc__},
{"expandtabs", (PyCFunction)stringlib_expandtabs, METH_VARARGS, {"expandtabs", (PyCFunction)stringlib_expandtabs, METH_VARARGS,
......
...@@ -7141,13 +7141,15 @@ a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and\n\ ...@@ -7141,13 +7141,15 @@ a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and\n\
codecs.register_error that can handle UnicodeEncodeErrors."); codecs.register_error that can handle UnicodeEncodeErrors.");
static PyObject * static PyObject *
unicode_encode(PyUnicodeObject *self, PyObject *args) unicode_encode(PyUnicodeObject *self, PyObject *args, PyObject *kwargs)
{ {
static char *kwlist[] = {"encoding", "errors", 0};
char *encoding = NULL; char *encoding = NULL;
char *errors = NULL; char *errors = NULL;
PyObject *v; PyObject *v;
if (!PyArg_ParseTuple(args, "|ss:encode", &encoding, &errors)) if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ss:encode",
kwlist, &encoding, &errors))
return NULL; return NULL;
v = PyUnicode_AsEncodedString((PyObject *)self, encoding, errors); v = PyUnicode_AsEncodedString((PyObject *)self, encoding, errors);
if (v == NULL) if (v == NULL)
...@@ -8804,7 +8806,7 @@ static PyMethodDef unicode_methods[] = { ...@@ -8804,7 +8806,7 @@ static PyMethodDef unicode_methods[] = {
/* Order is according to common usage: often used methods should /* Order is according to common usage: often used methods should
appear first, since lookup is done sequentially. */ appear first, since lookup is done sequentially. */
{"encode", (PyCFunction) unicode_encode, METH_VARARGS, encode__doc__}, {"encode", (PyCFunction) unicode_encode, METH_VARARGS | METH_KEYWORDS, encode__doc__},
{"replace", (PyCFunction) unicode_replace, METH_VARARGS, replace__doc__}, {"replace", (PyCFunction) unicode_replace, METH_VARARGS, replace__doc__},
{"split", (PyCFunction) unicode_split, METH_VARARGS, split__doc__}, {"split", (PyCFunction) unicode_split, METH_VARARGS, split__doc__},
{"rsplit", (PyCFunction) unicode_rsplit, METH_VARARGS, rsplit__doc__}, {"rsplit", (PyCFunction) unicode_rsplit, METH_VARARGS, rsplit__doc__},
...@@ -8820,6 +8822,7 @@ static PyMethodDef unicode_methods[] = { ...@@ -8820,6 +8822,7 @@ static PyMethodDef unicode_methods[] = {
{"ljust", (PyCFunction) unicode_ljust, METH_VARARGS, ljust__doc__}, {"ljust", (PyCFunction) unicode_ljust, METH_VARARGS, ljust__doc__},
{"lower", (PyCFunction) unicode_lower, METH_NOARGS, lower__doc__}, {"lower", (PyCFunction) unicode_lower, METH_NOARGS, lower__doc__},
{"lstrip", (PyCFunction) unicode_lstrip, METH_VARARGS, lstrip__doc__}, {"lstrip", (PyCFunction) unicode_lstrip, METH_VARARGS, lstrip__doc__},
/* {"maketrans", (PyCFunction) unicode_maketrans, METH_VARARGS, maketrans__doc__}, */
{"rfind", (PyCFunction) unicode_rfind, METH_VARARGS, rfind__doc__}, {"rfind", (PyCFunction) unicode_rfind, METH_VARARGS, rfind__doc__},
{"rindex", (PyCFunction) unicode_rindex, METH_VARARGS, rindex__doc__}, {"rindex", (PyCFunction) unicode_rindex, METH_VARARGS, rindex__doc__},
{"rjust", (PyCFunction) unicode_rjust, METH_VARARGS, rjust__doc__}, {"rjust", (PyCFunction) unicode_rjust, METH_VARARGS, rjust__doc__},
......
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