]> granicus.if.org Git - python/commitdiff
The get() and iter() are now able to accept keyword arguments.
authorEli Bendersky <eliben@gmail.com>
Sat, 5 Jan 2013 14:26:39 +0000 (06:26 -0800)
committerEli Bendersky <eliben@gmail.com>
Sat, 5 Jan 2013 14:26:39 +0000 (06:26 -0800)
In conformance with the documentation and the Python version.
Patch by Franck Michea.

Lib/test/test_xml_etree.py
Misc/ACKS
Modules/_elementtree.c

index 2bbf513e9f313fe92527698ff3de3e3a91c39012..89138450e9977f6773ee961f038c36111e217f66 100644 (file)
@@ -1769,6 +1769,11 @@ class BasicElementTest(unittest.TestCase):
         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 @@ class ElementIterTest(unittest.TestCase):
         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']
index 8dbdc4dc208dda07b06661de0f98a952975e6aeb..714b807e241137eb3292a331d81000773bea02a4 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -794,6 +794,7 @@ Piotr Meyer
 Alexis Métaireau
 Steven Miale
 Trent Mick
+Franck Michea
 Tom Middleton
 Stan Mihai
 Stefan Mihaila
index 0c8abcf901068dd4f7e18111595a713617ecec6b..9f302f916b071a9e9bdb5f482ed7ce6b96a7a92d 100644 (file)
@@ -1031,13 +1031,16 @@ element_iterfind(ElementObject *self, PyObject *args, PyObject *kwds)
 }
 
 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 @@ create_elementiter(ElementObject *self, PyObject *tag, int gettext);
 
 
 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 @@ static PyMethodDef element_methods[] = {
 
     {"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 @@ static PyMethodDef element_methods[] = {
     {"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 @@ static PyTypeObject XMLParser_Type = {
 /* python module interface */
 
 static PyMethodDef _functions[] = {
-    {"SubElement", (PyCFunction) subelement, METH_VARARGS|METH_KEYWORDS},
+    {"SubElement", (PyCFunction) subelement, METH_VARARGS | METH_KEYWORDS},
     {NULL, NULL}
 };