[Lxml-checkins] r44937 - in lxml/branch/lxml-1.3: . src/lxml src/lxml/tests
scoder at codespeak.net
scoder at codespeak.net
Thu Jul 12 00:13:33 CEST 2007
Author: scoder
Date: Thu Jul 12 00:13:32 2007
New Revision: 44937
Modified:
lxml/branch/lxml-1.3/CHANGES.txt
lxml/branch/lxml-1.3/src/lxml/apihelpers.pxi
lxml/branch/lxml-1.3/src/lxml/etree.pyx
lxml/branch/lxml-1.3/src/lxml/tests/test_etree.py
Log:
trunk merge: split of fromstring() and XML(), raise exception on tag names containing ':'
Modified: lxml/branch/lxml-1.3/CHANGES.txt
==============================================================================
--- lxml/branch/lxml-1.3/CHANGES.txt (original)
+++ lxml/branch/lxml-1.3/CHANGES.txt Thu Jul 12 00:13:32 2007
@@ -8,11 +8,16 @@
Features added
--------------
+* ``etree.fromstring()`` now supports parsing both HTML and XML, depending on
+ the parser you pass.
+
* Support ``base_url`` keyword argument in ``HTML()`` and ``XML()``
Bugs fixed
----------
+* ``Element()`` did not raise an exception on tag names containing ':'
+
1.3.2 (2007-07-03)
==================
Modified: lxml/branch/lxml-1.3/src/lxml/apihelpers.pxi
==============================================================================
--- lxml/branch/lxml-1.3/src/lxml/apihelpers.pxi (original)
+++ lxml/branch/lxml-1.3/src/lxml/apihelpers.pxi Thu Jul 12 00:13:32 2007
@@ -708,6 +708,8 @@
c_ns_end = cstd.strchr(c_tag, c'}')
if c_ns_end is NULL:
raise ValueError, "Invalid tag name"
+ if cstd.strchr(c_ns_end, c':') is not NULL:
+ raise ValueError, "Invalid tag name"
nslen = c_ns_end - c_tag
taglen = python.PyString_GET_SIZE(tag) - nslen - 2
if taglen == 0:
@@ -717,6 +719,8 @@
tag = python.PyString_FromStringAndSize(c_ns_end+1, taglen)
elif python.PyString_GET_SIZE(tag) == 0:
raise ValueError, "Empty tag name"
+ elif cstd.strchr(c_tag, c':') is not NULL:
+ raise ValueError, "Invalid tag name"
return ns, tag
cdef object _namespacedName(xmlNode* c_node):
Modified: lxml/branch/lxml-1.3/src/lxml/etree.pyx
==============================================================================
--- lxml/branch/lxml-1.3/src/lxml/etree.pyx (original)
+++ lxml/branch/lxml-1.3/src/lxml/etree.pyx Thu Jul 12 00:13:32 2007
@@ -1892,7 +1892,9 @@
def XML(text, _BaseParser parser=None, base_url=None):
"""Parses an XML document from a string constant. This function can be used
- to embed "XML literals" in Python code.
+ to embed "XML literals" in Python code, like in
+
+ >>> root = etree.XML("<root><test/></root>")
To override the parser with a different ``XMLParser`` you can pass it to
the ``parser`` keyword argument.
@@ -1909,7 +1911,21 @@
doc = _parseMemoryDocument(text, base_url, parser)
return doc.getroot()
-fromstring = XML
+def fromstring(text, _BaseParser parser=None, base_url=None):
+ """Parses an XML document from a string.
+
+ To override the default parser with a different parser you can pass it to
+ the ``parser`` keyword argument.
+
+ The ``base_url`` keyword argument allows to set the original base URL of
+ the document to support relative Paths when looking up external entities
+ (DTD, XInclude, ...).
+ """
+ cdef _Document doc
+ if parser is None:
+ parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
+ doc = _parseMemoryDocument(text, base_url, parser)
+ return doc.getroot()
def iselement(element):
"""Checks if an object appears to be a valid element object.
Modified: lxml/branch/lxml-1.3/src/lxml/tests/test_etree.py
==============================================================================
--- lxml/branch/lxml-1.3/src/lxml/tests/test_etree.py (original)
+++ lxml/branch/lxml-1.3/src/lxml/tests/test_etree.py Thu Jul 12 00:13:32 2007
@@ -52,14 +52,28 @@
def test_element_names(self):
Element = self.etree.Element
-
el = Element('name')
self.assertEquals(el.tag, 'name')
el = Element('{}name')
self.assertEquals(el.tag, 'name')
+
+ def test_element_name_empty(self):
+ Element = self.etree.Element
+ el = Element('name')
+ self.assertRaises(ValueError, Element, '{}')
+ self.assertRaises(ValueError, setattr, el, 'tag', '{}')
+
self.assertRaises(ValueError, Element, '{test}')
self.assertRaises(ValueError, setattr, el, 'tag', '{test}')
+ def test_element_name_colon(self):
+ Element = self.etree.Element
+ self.assertRaises(ValueError, Element, 'p:name')
+ self.assertRaises(ValueError, Element, '{test}p:name')
+
+ el = Element('name')
+ self.assertRaises(ValueError, setattr, el, 'tag', 'p:name')
+
def test_attribute_set(self):
# ElementTree accepts arbitrary attribute values
# lxml.etree allows only strings
More information about the lxml-checkins
mailing list