[Python-checkins] cpython (3.3): The get() and iter() are now able to accept keyword arguments.

eli.bendersky python-checkins at python.org
Sat Jan 5 15:31:42 CET 2013


http://hg.python.org/cpython/rev/c1fc6b6d1cfc
changeset: 81296:c1fc6b6d1cfc
branch: 3.3
parent: 81292:b66049748535
user: Eli Bendersky <eliben at gmail.com>
date: Sat Jan 05 06:26:39 2013 -0800
summary:
 The get() and iter() are now able to accept keyword arguments.
In conformance with the documentation and the Python version.
Patch by Franck Michea.
files:
 Lib/test/test_xml_etree.py | 10 ++++++++++
 Misc/ACKS | 1 +
 Modules/_elementtree.c | 21 +++++++++++++--------
 3 files changed, 24 insertions(+), 8 deletions(-)
diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py
--- a/Lib/test/test_xml_etree.py
+++ b/Lib/test/test_xml_etree.py
@@ -1769,6 +1769,11 @@
 self.assertEqual(flag, True)
 self.assertEqual(wref(), None)
 
+ def test_get_keyword_args(self):
+ e1 = ET.Element('foo' , x=1, y=2, z=3)
+ self.assertEqual(e1.get('x', default=7), 1)
+ self.assertEqual(e1.get('w', default=7), 7)
+
 def test_pickle(self):
 # For now this test only works for the Python version of ET,
 # so set sys.modules accordingly because pickle uses __import__
@@ -1897,6 +1902,11 @@
 self.assertEqual(self._ilist(doc, 'room'), ['room'] * 3)
 self.assertEqual(self._ilist(doc, 'house'), ['house'] * 2)
 
+ # test that iter also accepts 'tag' as a keyword arg
+ self.assertEqual(
+ summarize_list(doc.iter(tag='room')),
+ ['room'] * 3)
+
 # make sure both tag=None and tag='*' return all tags
 all_tags = ['document', 'house', 'room', 'room',
 'shed', 'house', 'room']
diff --git a/Misc/ACKS b/Misc/ACKS
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -794,6 +794,7 @@
 Alexis Métaireau
 Steven Miale
 Trent Mick
+Franck Michea
 Tom Middleton
 Stan Mihai
 Stefan Mihaila
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -1031,13 +1031,16 @@
 }
 
 static PyObject*
-element_get(ElementObject* self, PyObject* args)
+element_get(ElementObject* self, PyObject* args, PyObject* kwds)
 {
 PyObject* value;
+ static char* kwlist[] = {"key", "default", 0};
 
 PyObject* key;
 PyObject* default_value = Py_None;
- if (!PyArg_ParseTuple(args, "O|O:get", &key, &default_value))
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:get", kwlist, &key,
+ &default_value))
 return NULL;
 
 if (!self->extra || self->extra->attrib == Py_None)
@@ -1085,10 +1088,12 @@
 
 
 static PyObject *
-element_iter(ElementObject *self, PyObject *args)
+element_iter(ElementObject *self, PyObject *args, PyObject *kwds)
 {
 PyObject* tag = Py_None;
- if (!PyArg_ParseTuple(args, "|O:iter", &tag))
+ static char* kwlist[] = {"tag", 0};
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:iter", kwlist, &tag))
 return NULL;
 
 return create_elementiter(self, tag, 0);
@@ -1555,7 +1560,7 @@
 
 {"clear", (PyCFunction) element_clearmethod, METH_VARARGS},
 
- {"get", (PyCFunction) element_get, METH_VARARGS},
+ {"get", (PyCFunction) element_get, METH_VARARGS | METH_KEYWORDS},
 {"set", (PyCFunction) element_set, METH_VARARGS},
 
 {"find", (PyCFunction) element_find, METH_VARARGS | METH_KEYWORDS},
@@ -1567,11 +1572,11 @@
 {"insert", (PyCFunction) element_insert, METH_VARARGS},
 {"remove", (PyCFunction) element_remove, METH_VARARGS},
 
- {"iter", (PyCFunction) element_iter, METH_VARARGS},
+ {"iter", (PyCFunction) element_iter, METH_VARARGS | METH_KEYWORDS},
 {"itertext", (PyCFunction) element_itertext, METH_VARARGS},
 {"iterfind", (PyCFunction) element_iterfind, METH_VARARGS | METH_KEYWORDS},
 
- {"getiterator", (PyCFunction) element_iter, METH_VARARGS},
+ {"getiterator", (PyCFunction) element_iter, METH_VARARGS | METH_KEYWORDS},
 {"getchildren", (PyCFunction) element_getchildren, METH_VARARGS},
 
 {"items", (PyCFunction) element_items, METH_VARARGS},
@@ -3461,7 +3466,7 @@
 /* python module interface */
 
 static PyMethodDef _functions[] = {
- {"SubElement", (PyCFunction) subelement, METH_VARARGS|METH_KEYWORDS},
+ {"SubElement", (PyCFunction) subelement, METH_VARARGS | METH_KEYWORDS},
 {NULL, NULL}
 };
 
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /