diff options
author | Burak Arslan <burak.arslan@arskom.com.tr> | 2017-01-05 19:10:03 +0300 |
---|---|---|
committer | Burak Arslan <burak.arslan@arskom.com.tr> | 2017-01-05 19:22:50 +0300 |
commit | 53f2721a1a9e585ac769b908a2371066575eaf97 (patch) | |
tree | 47380be56d4718b18596adb1082084130b1ca0d1 | |
parent | fb23f64abd87aa79924c9db3dab0f01f050e2cb3 (diff) | |
download | python-lxml-53f2721a1a9e585ac769b908a2371066575eaf97.tar.gz |
Add method keyword to _IncrementalWriter.element()
-rw-r--r-- | src/lxml/serializer.pxi | 15 | ||||
-rw-r--r-- | src/lxml/tests/test_incremental_xmlfile.py | 11 |
2 files changed, 22 insertions, 4 deletions
diff --git a/src/lxml/serializer.pxi b/src/lxml/serializer.pxi index 489ed2de..0eb95a76 100644 --- a/src/lxml/serializer.pxi +++ b/src/lxml/serializer.pxi @@ -812,7 +812,7 @@ cdef class _IncrementalFileWriter: tree.xmlOutputBufferFlush(self._c_out) self._handle_error(self._c_out.error) - def element(self, tag, attrib=None, nsmap=None, **_extra): + def element(self, tag, attrib=None, nsmap=None, method=None, **_extra): """element(self, tag, attrib=None, nsmap=None, **_extra) Returns a context manager that writes an opening and closing tag. @@ -836,7 +836,10 @@ cdef class _IncrementalFileWriter: _prefixValidOrRaise(prefix) reversed_nsmap[_utf8(ns)] = prefix ns, name = _getNsTag(tag) - return _FileWriterElement(self, (ns, name, attributes, reversed_nsmap)) + + c_method = self._method if method is None else _findOutputMethod(method) + + return _FileWriterElement(self, (ns, name, attributes, reversed_nsmap), c_method) cdef _write_qname(self, bytes name, bytes prefix): if prefix: # empty bytes for no prefix (not None to allow sorting) @@ -1015,14 +1018,20 @@ cdef class _IncrementalFileWriter: @cython.freelist(8) cdef class _FileWriterElement: cdef object _element + cdef int _new_method + cdef int _old_method cdef _IncrementalFileWriter _writer - def __cinit__(self, _IncrementalFileWriter writer not None, element_config): + def __cinit__(self, _IncrementalFileWriter writer not None, element_config, int method): self._writer = writer self._element = element_config + self._new_method = method + self._old_method = writer._method def __enter__(self): + self._writer._method = self._new_method self._writer._write_start_element(self._element) def __exit__(self, exc_type, exc_val, exc_tb): self._writer._write_end_element(self._element) + self._writer._method = self._old_method diff --git a/src/lxml/tests/test_incremental_xmlfile.py b/src/lxml/tests/test_incremental_xmlfile.py index 414edd12..6670471c 100644 --- a/src/lxml/tests/test_incremental_xmlfile.py +++ b/src/lxml/tests/test_incremental_xmlfile.py @@ -381,7 +381,9 @@ class HtmlFileTestCase(_XmlFileTestCaseBase): self._file = BytesIO() def test_xml_mode_write_inside_html(self): - elt = etree.Element("foo", attrib={'selected': 'bar'}) + tag = 'foo' + attrib = {'selected': 'bar'} + elt = etree.Element(tag, attrib=attrib) with etree.htmlfile(self._file) as xf: with xf.element("root"): @@ -393,11 +395,18 @@ class HtmlFileTestCase(_XmlFileTestCaseBase): elt.text = "" xf.write(elt, method='xml') # 3 + with xf.element(tag, attrib=attrib, method='xml'): + pass # 4 + + xf.write(elt) # 5 + self.assertXml( '<root>' '<foo selected></foo>' # 1 '<foo selected="bar"/>' # 2 '<foo selected="bar"></foo>' # 3 + '<foo selected="bar"></foo>' # 4 + '<foo selected></foo>' # 5 '</root>') self._file = BytesIO() |