cpython: 0b2660384d4e (original) (raw)
Mercurial > cpython
changeset 72462:0b2660384d4e
Issue #13012: Allow 'keepends' to be passed as a keyword argument in str.splitlines, bytes.splitlines and bytearray.splitlines. [#13012]
Mark Dickinson mdickinson@enthought.com | |
---|---|
date | Sat, 24 Sep 2011 09:14:39 +0100 |
parents | 18eec56bcf29 |
children | ac79caff7d6d |
files | Lib/test/buffer_tests.py Lib/test/string_tests.py Lib/test/test_userstring.py Misc/NEWS Objects/bytearrayobject.c Objects/bytesobject.c Objects/unicodeobject.c |
diffstat | 7 files changed, 41 insertions(+), 17 deletions(-)[+] [-] Lib/test/buffer_tests.py 8 Lib/test/string_tests.py 14 Lib/test/test_userstring.py 4 Misc/NEWS 4 Objects/bytearrayobject.c 10 Objects/bytesobject.c 8 Objects/unicodeobject.c 10 |
line wrap: on
line diff
--- a/Lib/test/buffer_tests.py +++ b/Lib/test/buffer_tests.py @@ -200,7 +200,13 @@ class MixinBytesBufferCommonTests(object self.marshal(b'abc\ndef\r\nghi\n\r').splitlines()) self.assertEqual([b'', b'abc', b'def', b'ghi', b''], self.marshal(b'\nabc\ndef\r\nghi\n\r').splitlines())
self.assertEqual([b'', b'abc', b'def', b'ghi', b''],[](#l1.7)
self.marshal(b'\nabc\ndef\r\nghi\n\r').splitlines(False))[](#l1.8) self.assertEqual([b'\n', b'abc\n', b'def\r\n', b'ghi\n', b'\r'],[](#l1.9)
self.marshal(b'\nabc\ndef\r\nghi\n\r').splitlines(1))[](#l1.10)
self.marshal(b'\nabc\ndef\r\nghi\n\r').splitlines(True))[](#l1.11)
self.assertEqual([b'', b'abc', b'def', b'ghi', b''],[](#l1.12)
self.marshal(b'\nabc\ndef\r\nghi\n\r').splitlines(keepends=False))[](#l1.13)
self.assertEqual([b'\n', b'abc\n', b'def\r\n', b'ghi\n', b'\r'],[](#l1.14)
self.marshal(b'\nabc\ndef\r\nghi\n\r').splitlines(keepends=True))[](#l1.15)
self.assertRaises(TypeError, self.marshal(b'abc').splitlines, 42, 42)
--- a/Lib/test/string_tests.py +++ b/Lib/test/string_tests.py @@ -47,11 +47,12 @@ class BaseTest(unittest.TestCase): return obj # check that obj.method(*args) returns result
- def checkequal(self, result, obj, methodname, *args, **kwargs): result = self.fixtype(result) obj = self.fixtype(obj) args = self.fixtype(args)
realresult = getattr(obj, methodname)(*args)[](#l2.12)
kwargs = self.fixtype(kwargs)[](#l2.13)
realresult = getattr(obj, methodname)(*args, **kwargs)[](#l2.14) self.assertEqual([](#l2.15) result,[](#l2.16) realresult[](#l2.17)
@@ -908,7 +909,14 @@ class MixinStrUnicodeUserStringTest: self.checkequal(['abc', 'def', 'ghi'], "abc\ndef\r\nghi\n", 'splitlines') self.checkequal(['abc', 'def', 'ghi', ''], "abc\ndef\r\nghi\n\r", 'splitlines') self.checkequal(['', 'abc', 'def', 'ghi', ''], "\nabc\ndef\r\nghi\n\r", 'splitlines')
self.checkequal(['\n', 'abc\n', 'def\r\n', 'ghi\n', '\r'], "\nabc\ndef\r\nghi\n\r", 'splitlines', 1)[](#l2.22)
self.checkequal(['', 'abc', 'def', 'ghi', ''],[](#l2.23)
"\nabc\ndef\r\nghi\n\r", 'splitlines', False)[](#l2.24)
self.checkequal(['\n', 'abc\n', 'def\r\n', 'ghi\n', '\r'],[](#l2.25)
"\nabc\ndef\r\nghi\n\r", 'splitlines', True)[](#l2.26)
self.checkequal(['', 'abc', 'def', 'ghi', ''], "\nabc\ndef\r\nghi\n\r",[](#l2.27)
'splitlines', keepends=False)[](#l2.28)
self.checkequal(['\n', 'abc\n', 'def\r\n', 'ghi\n', '\r'],[](#l2.29)
"\nabc\ndef\r\nghi\n\r", 'splitlines', keepends=True)[](#l2.30)
self.checkraises(TypeError, 'abc', 'splitlines', 42, 42)
--- a/Lib/test/test_userstring.py +++ b/Lib/test/test_userstring.py @@ -17,11 +17,11 @@ class UserStringTest( # Overwrite the three testing methods, because UserString # can't cope with arguments propagated to UserString # (and we don't test with subclasses)
- def checkequal(self, result, object, methodname, *args, **kwargs): result = self.fixtype(result) object = self.fixtype(object) # we don't fix the arguments, because UserString can't cope with it
realresult = getattr(object, methodname)(*args)[](#l3.12)
realresult = getattr(object, methodname)(*args, **kwargs)[](#l3.13) self.assertEqual([](#l3.14) result,[](#l3.15) realresult[](#l3.16)
--- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,10 @@ What's New in Python 3.3 Alpha 1? Core and Builtins ----------------- +- Issue #13012: The 'keepends' parameter to str.splitlines may now be passed
- as a keyword argument: "my_string.splitlines(keepends=True)". The same
- change also applies to bytes.splitlines and bytearray.splitlines. +
- Issue #7732: Don't open a directory as a file anymore while importing a module. Ignore the direcotry if its name matchs the module name (e.g. "init.py") and raise a ImportError instead.
--- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -2608,11 +2608,13 @@ Line breaks are not included in the resu is given and true."); static PyObject* -bytearray_splitlines(PyObject *self, PyObject *args) +bytearray_splitlines(PyObject *self, PyObject *args, PyObject *kwds) {
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "|i:splitlines",
kwlist, &keepends))[](#l5.15) return NULL;[](#l5.16)
return stringlib_splitlines( @@ -2801,8 +2803,8 @@ bytearray_methods[] = { {"rsplit", (PyCFunction)bytearray_rsplit, METH_VARARGS, rsplit__doc__}, {"rstrip", (PyCFunction)bytearray_rstrip, METH_VARARGS, rstrip__doc__}, {"split", (PyCFunction)bytearray_split, METH_VARARGS, split__doc__},
- {"splitlines", (PyCFunction)bytearray_splitlines,
{"startswith", (PyCFunction)bytearray_startswith, METH_VARARGS , startswith__doc__}, {"strip", (PyCFunction)bytearray_strip, METH_VARARGS, strip__doc__},METH_VARARGS | METH_KEYWORDS, splitlines__doc__},[](#l5.26)
--- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -2312,11 +2312,13 @@ Line breaks are not included in the resu is given and true."); static PyObject* -bytes_splitlines(PyObject *self, PyObject *args) +bytes_splitlines(PyObject *self, PyObject *args, PyObject *kwds) {
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "|i:splitlines",
kwlist, &keepends))[](#l6.15) return NULL;[](#l6.16)
return stringlib_splitlines( @@ -2458,7 +2460,7 @@ bytes_methods[] = { {"rsplit", (PyCFunction)bytes_rsplit, METH_VARARGS, rsplit__doc__}, {"rstrip", (PyCFunction)bytes_rstrip, METH_VARARGS, rstrip__doc__}, {"split", (PyCFunction)bytes_split, METH_VARARGS, split__doc__},
- {"splitlines", (PyCFunction)bytes_splitlines, METH_VARARGS | METH_KEYWORDS, splitlines__doc__}, {"startswith", (PyCFunction)bytes_startswith, METH_VARARGS, startswith__doc__},
--- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -8881,11 +8881,13 @@ Line breaks are not included in the resu is given and true."); static PyObject* -unicode_splitlines(PyUnicodeObject *self, PyObject *args) -{ +unicode_splitlines(PyUnicodeObject *self, PyObject *args, PyObject *kwds) +{
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "|i:splitlines",
kwlist, &keepends))[](#l7.16) return NULL;[](#l7.17)
return PyUnicode_Splitlines((PyObject *)self, keepends); @@ -9273,7 +9275,7 @@ static PyMethodDef unicode_methods[] = { {"rjust", (PyCFunction) unicode_rjust, METH_VARARGS, rjust__doc__}, {"rstrip", (PyCFunction) unicode_rstrip, METH_VARARGS, rstrip__doc__}, {"rpartition", (PyCFunction) unicode_rpartition, METH_O, rpartition__doc__},
- {"splitlines", (PyCFunction) unicode_splitlines, METH_VARARGS | METH_KEYWORDS, splitlines__doc__}, {"strip", (PyCFunction) unicode_strip, METH_VARARGS, strip__doc__}, {"swapcase", (PyCFunction) unicode_swapcase, METH_NOARGS, swapcase__doc__}, {"translate", (PyCFunction) unicode_translate, METH_O, translate__doc__},