diff options
author | W. Trevor King <wking@drexel.edu> | 2010-01-20 15:44:39 -0500 |
---|---|---|
committer | W. Trevor King <wking@drexel.edu> | 2010-01-20 15:44:39 -0500 |
commit | 55f1e8588edc35410dd16b883e7cddd06ebc4ed6 (patch) | |
tree | ddfe7a95b1870036a4ab8cafe7ab43a624125fa5 | |
parent | c8985785eb741ff646082879f1ca5e9cfe3873b0 (diff) | |
download | bugseverywhere-55f1e8588edc35410dd16b883e7cddd06ebc4ed6.tar.gz |
Strip footers (signatures) in be-mail-to-xml
7 files changed, 145 insertions, 2 deletions
diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/b8e5c376-32a4-42ea-b6b2-adbee069384a/body b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/b8e5c376-32a4-42ea-b6b2-adbee069384a/body new file mode 100644 index 0000000..6af098a --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/b8e5c376-32a4-42ea-b6b2-adbee069384a/body @@ -0,0 +1,19 @@ +On Wed, Jan 20, 2010 at 01:24:25PM -0500, W. Trevor King wrote: +> Of course, incorperating interactive functionality in command output +> (i.e. changing the bug target from the bug-show page), doesn't fit +> into this model. To do that, we'd have to abstract the default +> command output the way we've already abstracted the commands and their +> input... + +Does anyone know of any output-abstraction implementations to look at +for inspiration. + * How would we handle the options we currently pass through + (shortlist, show_comments, etc.)? + * Would standard arguments know how to display themselves? + class Status (Argument): + def str(self, ui, command, *args, **kwargs): + ui.display_status(self, command, *args, **kwargs) + class Bug (Argument): + def str(self, ui, command, *args, **kwargs): + ui.display_bug(self, command, *args, **kwargs) + ... diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/b8e5c376-32a4-42ea-b6b2-adbee069384a/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/b8e5c376-32a4-42ea-b6b2-adbee069384a/values new file mode 100644 index 0000000..378cc67 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/b8e5c376-32a4-42ea-b6b2-adbee069384a/values @@ -0,0 +1,14 @@ +Alt-id: <20100120183646.GC14791@mjolnir> + + +Author: '"W. Trevor King" <wking@drexel.edu>' + + +Content-type: text/plain + + +Date: Wed, 20 Jan 2010 18:36:46 +0000 + + +In-reply-to: <20100120182425.GB14791@mjolnir> + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/f5139012-e20b-4d24-90a5-10d969ddd364/body b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/f5139012-e20b-4d24-90a5-10d969ddd364/body new file mode 100644 index 0000000..636137c --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/f5139012-e20b-4d24-90a5-10d969ddd364/body @@ -0,0 +1,76 @@ +On Wed, Jan 20, 2010 at 09:34:44AM -0500, W. Trevor King wrote: +> On Sun, Dec 06, 2009 at 04:47:23AM -0500, W. Trevor King wrote: +> > Steve, I've caught my CFBE branch up to my current pre-trunk BE and +> > added dependency links to the bug page, so you should be all set once +> > you get back to CFBE. +> +> And I haven't pulled it up to date with my recent reorganization. As +> far as release tarballs go though, we don't have to port to Bazaar at +> all, we can stuff a recent CFBE snapshot into the BE tarball. How +> do people feel about that? + +Ok, I've got CFBE working with my BE head: + http://www.physics.drexel.edu/~wking/code/hg/cfbe/ +However, I haven't reworked CFBE to take advantage of the new command +structure. + +We'll need to extend libbe.command.base.Argument a bit as we work this +out, but I expect we can auto-generate handlers for various commands +with something along the lines of: + +<snip web.py> + +class CommandHandler (object): + def __init__(self, command): + self.command = command + def __call__(self, *args, **kwargs): + if GET: + template = self.env.get_template('command.html') + return template.render(command=self.command) + else: + try: + ret = libbe.ui.command_line.dispatch( + self.command.ui, self.command, *args, **kwargs) + except libbe.command.UserError, e: + HANDLE ERROR + stdout = self.command.ui.get_stdout() + DISPLAY STDOUT OR REDIRECT... + +class WebInterface (libbe.command.UserInterface): + ... + def add_commands(self): + for command_name in libbe.command.commands(): + Class = libbe.command.get_command_class( + command_name=command_name) + command = Class(ui=self) + self.command_name = cherrypy.expose( + CommandHandler(command)) + +</snip web.py> + +<snip command.html> + +<form id="command-form" action="/command" method="post"> + <fieldset> + {% for option in command.options %} + {{ option_form_html(option) }} + {% endfor %} + {% for argument in command.args %} + {{ argument_form_html(argument) }} + {% endfor %} + </fieldset> +</form> + +{{ command.help() }} + +</snip command.html> + +Of course, incorperating interactive functionality in command output +(i.e. changing the bug target from the bug-show page), doesn't fit +into this model. To do that, we'd have to abstract the default +command output the way we've already abstracted the commands and their +input... This sounds like a lot of work, and it is, but the goal is +that BE adds functionality (new commands, option, etc.), and CFBE, +be-handle-mail, etc. automatically incorperate the new stuff. + +Thoughts? diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/f5139012-e20b-4d24-90a5-10d969ddd364/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/f5139012-e20b-4d24-90a5-10d969ddd364/values new file mode 100644 index 0000000..fb6ab4e --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/f5139012-e20b-4d24-90a5-10d969ddd364/values @@ -0,0 +1,14 @@ +Alt-id: <20100120182425.GB14791@mjolnir> + + +Author: '"W. Trevor King" <wking@drexel.edu>' + + +Content-type: text/plain + + +Date: Wed, 20 Jan 2010 18:24:25 +0000 + + +In-reply-to: <20100120143444.GA14451@mjolnir> + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/values new file mode 100644 index 0000000..c44ddef --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/values @@ -0,0 +1,11 @@ +severity: minor + + +status: open + + +summary: Need command output abstraction for flexible UIs + + +time: Wed, 20 Jan 2010 20:35:12 +0000 + diff --git a/libbe/ui/command_line.py b/libbe/ui/command_line.py index 9c97eec..89d791d 100644 --- a/libbe/ui/command_line.py +++ b/libbe/ui/command_line.py @@ -314,7 +314,7 @@ def main(): command = Class(ui=ui) ui.setup_command(command) - if command.name in ['comment', 'commit', 'serve']: + if command.name in ['comment', 'commit', 'import-xml', 'serve']: paginate = 'never' else: paginate = 'auto' diff --git a/misc/xml/be-mail-to-xml b/misc/xml/be-mail-to-xml index 2add065..0b33465 100755 --- a/misc/xml/be-mail-to-xml +++ b/misc/xml/be-mail-to-xml @@ -34,6 +34,7 @@ from time import asctime, gmtime, mktime import types from xml.sax.saxutils import escape +BREAK = u'--' # signature separator DEFAULT_ENCODING = get_output_encoding() sys.stdout = codecs.getwriter(DEFAULT_ENCODING)(sys.stdout) @@ -60,6 +61,14 @@ def normalize_RFC_2822_date(date): 'unparsable date: "%s"' % date return time_to_str(mktime(time_tuple)) +def strip_footer(body): + body_lines = body.splitlines() + for i,line in enumerate(body_lines): + if line.startswith(BREAK): + break + i += 1 # increment past the current valid line. + return u'\n'.join(body_lines[:i]).strip() + def comment_message_to_xml(message, fields=None): if fields == None: fields = {} @@ -131,7 +140,7 @@ def comment_message_to_xml(message, fields=None): body = message.get_payload(decode=True) # attempt to decode assert body != None, "Unable to decode?" if fields[u'content-type'].startswith(u"text/"): - body = unicode(body, encoding=charset).rstrip(u'\n') + body = strip_footer(unicode(body, encoding=charset)) else: body = base64.encode(body) fields[u'body'] = body |