Package: python-meld3
Version: 0.6.5-3
Severity: important
Tags: patch
User: [email protected]
Usertags: origin-ubuntu ubuntu-patch oneiric
When built for Python 2.7, python-meld3 is broken:
$ python
Python 2.7.2+ (default, Aug 16 2011, 07:29:45)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import meld3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/pymodules/python2.7/meld3/__init__.py", line 2, in <module>
from meld3 import parse_xml
File "/usr/lib/pymodules/python2.7/meld3/meld3.py", line 27, in <module>
from xml.etree.ElementTree import fixtag
ImportError: cannot import name fixtag
This has been reported in a few other distributions' bug tracking
systems:
https://bugs.launchpad.net/ubuntu/+source/python-meld3/+bug/749880
https://bugzilla.redhat.com/show_bug.cgi?id=652890
... and fixed upstream:
https://github.com/Supervisor/meld3/commit/afe92611ee5959d1105a37c4403c99520e24c4ae
Jessica McKellar extracted the relevant patch and applied it to the
Ubuntu package. Here's a diff.
* Apply most of commit afe92611 upstream to make the package compatible
with Python 2.7. (LP: #749880)
-- Jessica McKellar <[email protected]> Sun, 02 Oct 2011 16:08:55 -0400
--- python-meld3-0.6.5.orig/meld3/meld3.py
+++ python-meld3-0.6.5/meld3/meld3.py
@@ -3,6 +3,7 @@
import re
import types
import mimetools
+import string
from StringIO import StringIO
try:
@@ -24,10 +25,32 @@
from xml.etree.ElementTree import QName
from xml.etree.ElementTree import _raise_serialization_error
from xml.etree.ElementTree import _namespace_map
- from xml.etree.ElementTree import fixtag
from xml.etree.ElementTree import parse as et_parse
from xml.etree.ElementTree import ElementPath
+ try:
+ from xml.etree.ElementTree import fixtag
+ except:
+ def fixtag(tag, namespaces):
+ # given a decorated tag (of the form {uri}tag), return prefixed
+ # tag and namespace declaration, if any
+ if isinstance(tag, QName):
+ tag = tag.text
+ namespace_uri, tag = string.split(tag[1:], "}", 1)
+ prefix = namespaces.get(namespace_uri)
+ if prefix is None:
+ prefix = _namespace_map.get(namespace_uri)
+ if prefix is None:
+ prefix = "ns%d" % len(namespaces)
+ namespaces[namespace_uri] = prefix
+ if prefix == "xml":
+ xmlns = None
+ else:
+ xmlns = ("xmlns:%s" % prefix, namespace_uri)
+ else:
+ xmlns = None
+ return "%s:%s" % (prefix, tag), xmlns
+
# HTMLTreeBuilder does not exist in python 2.5 standard elementtree
from HTMLParser import HTMLParser
AUTOCLOSE = "p", "li", "tr", "th", "td", "head", "body"
--- python-meld3-0.6.5.orig/meld3/test_meld3.py
+++ python-meld3-0.6.5/meld3/test_meld3.py
@@ -1,6 +1,7 @@
import unittest
from StringIO import StringIO
import re
+import sys
_SIMPLE_XML = r"""<?xml version="1.0"?>
<root xmlns:meld="http://www.plope.com/software/meld3">
@@ -1671,9 +1672,13 @@
</html>"""
def test_unknown_entity(self):
- from xml.parsers import expat
- self.assertRaises(expat.error, self._parse,
- '<html><head></head><body>&fleeb;</body></html>')
+ if sys.version_info[:3] >= (2,7,0):
+ self.assertRaises(SyntaxError, self._parse,
+ '<html><head></head><body>&fleeb;</body></html>')
+ else:
+ from xml.parsers import expat
+ self.assertRaises(expat.error, self._parse,
+ '<html><head></head><body>&fleeb;</body></html>')
def test_content_nostructure(self):
root = self._parse(_SIMPLE_XML)
Thanks,
--
Colin Watson [[email protected]]
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]