From cb6a9e819d05402ee8b9cde356d509ab22de4780 Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Sat, 21 Nov 2009 12:52:37 -0500 Subject: `be email-bugs` now uses `be show` internals to produce consistent XML. Broke the bulk of show.py out into new function show.output(), which is used by both show.py and email_bugs.py to reduce duplication of effort and increase consistency of the XML. Also a few relevant help string updates. --- becommands/show.py | 79 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 41 insertions(+), 38 deletions(-) (limited to 'becommands/show.py') diff --git a/becommands/show.py b/becommands/show.py index 1211e3d..11890a8 100644 --- a/becommands/show.py +++ b/becommands/show.py @@ -79,42 +79,7 @@ def execute(args, manipulate_encodings=True): "--only-raw-body requires a comment ID, not '%s'" % args[0]) sys.__stdout__.write(comment.body) sys.exit(0) - - bugs,root_comments = _sort_ids(args, options.comments) - if options.XML: - print _xml_header(bd.encoding) - else: - spaces_left = len(args) - 1 - for bugname in bugs: - bug = cmdutil.bug_from_id(bd, bugname) - if options.XML: - print bug.xml(indent=2, show_comments=options.comments) - else: - print bug.string(show_comments=options.comments) - if spaces_left > 0: - spaces_left -= 1 - print '' # add a blank line between bugs/comments - for bugname,comments in root_comments.items(): - bug = cmdutil.bug_from_id(bd, bugname) - if options.XML: - print ' ' - print ' %s' % bug.uuid - for commname in comments: - try: - comment = bug.comment_root.comment_from_shortname(commname) - except comment.InvalidShortname, e: - raise UserError(e.message) - if options.XML: - print comment.xml(indent=4, shortname=bugname) - else: - print comment.string(shortname=shortname) - if spaces_left > 0: - spaces_left -= 1 - print '' # add a blank line between bugs/comments - if options.XML: - print '' - if options.XML: - print _xml_footer() + print output(args, bd, as_xml=options.XML, with_comments=options.comments) def get_parser(): parser = cmdutil.CmdOptionParser("be show [options] ID [ID ...]") @@ -173,7 +138,45 @@ def _xml_header(encoding): value = _version.version_info[tag.replace('-', '_')] lines.append(' <%s>%s' % (tag, value, tag)) lines.append(' ') - return '\n'.join(lines) + return lines def _xml_footer(): - return '' + return [''] + +def output(ids, bd, as_xml=True, with_comments=True): + bugs,root_comments = _sort_ids(ids, with_comments) + lines = [] + if as_xml: + lines.extend(_xml_header(bd.encoding)) + else: + spaces_left = len(ids) - 1 + for bugname in bugs: + bug = cmdutil.bug_from_id(bd, bugname) + if as_xml: + lines.append(bug.xml(indent=2, show_comments=with_comments)) + else: + lines.append(bug.string(show_comments=with_comments)) + if spaces_left > 0: + spaces_left -= 1 + lines.append('') # add a blank line between bugs/comments + for bugname,comments in root_comments.items(): + bug = cmdutil.bug_from_id(bd, bugname) + if as_xml: + lines.extend([' ', ' %s' % bug.uuid]) + for commname in comments: + try: + comment = bug.comment_root.comment_from_shortname(commname) + except comment.InvalidShortname, e: + raise UserError(e.message) + if as_xml: + lines.append(comment.xml(indent=4, shortname=bugname)) + else: + lines.append(comment.string(shortname=shortname)) + if spaces_left > 0: + spaces_left -= 1 + lines.append('') # add a blank line between bugs/comments + if as_xml: + lines.append('') + if as_xml: + lines.extend(_xml_footer()) + return '\n'.join(lines) -- cgit