Skip to content

Commit c998d70

Browse files
authored
Merge pull request galaxyproject#8643 from mvdbeek/py3_xml_fixes
[19.09] Fix issue with xml comment handling on python 3
2 parents 399da3b + 05ca6ff commit c998d70

2 files changed

Lines changed: 16 additions & 5 deletions

File tree

lib/galaxy/util/tool_shed/xml_util.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,25 @@
1111
log = logging.getLogger(__name__)
1212

1313

14-
class Py27CommentedTreeBuilder(XmlET.TreeBuilder):
14+
class CommentedTreeBuilder(XmlET.TreeBuilder):
15+
16+
non_comment_seen = False
1517

1618
def doctype(*args):
1719
# handle deprecation warning for XMLParsing a file with DOCTYPE
1820
pass
1921

22+
def start(self, tag, attrib):
23+
if tag is not XmlET.Comment:
24+
self.non_comment_seen = True
25+
super(CommentedTreeBuilder, self).start(tag, attrib)
26+
2027
def comment(self, data):
21-
self.start(XmlET.Comment, {})
22-
self.data(data)
23-
self.end(XmlET.Comment)
28+
if self.non_comment_seen:
29+
# Cannot start XML file with comment
30+
self.start(XmlET.Comment, {})
31+
self.data(data)
32+
self.end(XmlET.Comment)
2433

2534

2635
def create_and_write_tmp_file(elem):
@@ -84,7 +93,7 @@ def parse_xml(file_name, check_exists=True):
8493

8594
with open(file_name, 'r') as fobj:
8695
try:
87-
tree = XmlET.parse(fobj, parser=XmlET.XMLParser(target=Py27CommentedTreeBuilder()))
96+
tree = XmlET.parse(fobj, parser=XmlET.XMLParser(target=CommentedTreeBuilder()))
8897
except Exception as e:
8998
error_message = "Exception attempting to parse %s: %s" % (str(file_name), str(e))
9099
log.exception(error_message)

lib/tool_shed/galaxy_install/tools/data_manager.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ def install_data_managers(self, shed_data_manager_conf_filename, metadata_dict,
131131
tool_path=shed_config_dict.get('tool_path', ''))
132132
if data_manager:
133133
rval.append(data_manager)
134+
elif elem.tag is ElementTree.Comment:
135+
pass
134136
else:
135137
log.warning("Encountered unexpected element '%s':\n%s" % (elem.tag, xml_to_string(elem)))
136138
config_elems.append(elem)

0 commit comments

Comments
 (0)