Opened 12 years ago
Closed 12 years ago
#569 closed defect (fixed)
Suppressing linebreaks with backspaces dosen't work in 0.7
| Reported by: | anonymous | Owned by: | hodgestar |
|---|---|---|---|
| Priority: | major | Milestone: | 0.7 |
| Component: | General | Version: | |
| Keywords: | Cc: |
Description
Hi
Using Genshi 0.6 (with speedups) + Trac 1.0.1 generates emails looking like http://trac.edgewall.org/wiki/TracNotification#SampleEmail
But using Genshi 0.7 (with speedups) results in all "\" being showed in the email and no linebreaks are removed.
Or are the docs outdated? http://genshi.edgewall.org/wiki/Documentation/text-templates.html#white-space-and-line-breaks
Attachments (1)
Change History (14)
comment:1 Changed 12 years ago by hodgestar
comment:2 Changed 12 years ago by hodgestar
There are tests for this in 0.7 and they appear to pass. Could you provide a short example showing the problem?
comment:3 Changed 12 years ago by anonymous
This is what Trac uses:
$ticket_body_hdr
$ticket_props
{% choose ticket.new %}\
{% when True %}\
$ticket.description
{% end %}\
{% otherwise %}\
{% if changes_body %}\
${_('Changes (by %(author)s):', author=change.author)}
$changes_body
{% end %}\
{% if changes_descr %}\
{% if not changes_body and not change.comment and change.author %}\
${_('Description changed by %(author)s:', author=change.author)}
{% end %}\
$changes_descr
--
{% end %}\
{% if change.comment %}\
${_('Comment:') if changes_body else _('Comment (by %(author)s):', author=change.author)}
$change.comment
{% end %}\
{% end %}\
{% end %}\
--
${_('Ticket URL: <%(link)s>', link=ticket.link)}
$project.name <${project.url or abs_href()}>
$project.descr
Which can be found here: http://trac.edgewall.org/browser/tags/trac-1.0.1/trac/ticket/templates/ticket_notify_email.txt
comment:4 follow-up: ↓ 7 Changed 12 years ago by hodgestar
This bit of Python code works fine for me on 0.7:
>>> t = """$ticket_body_hdr ... $ticket_props ... {% choose ticket.new %}\ ... {% when True %}\ ... $ticket.description ... {% end %}\ ... {% end %}\ ... """ >>> tmpl = NewTextTemplate(t) >>> class Ticket(object): ... pass ... >>> ticket = Ticket() >>> ticket.new = True >>> ticket.description = "Description" >>> tmpl.generate(ticket_body_hdr="HDR", ticket_props="PROPS", ticket=ticket).render() u'HDR\nPROPS\nDescription\n'
Does it work for you?
comment:5 Changed 12 years ago by hodgestar
My example is missing a
>>> from genshi.template.text import NewTextTemplate
at the top.
comment:6 Changed 12 years ago by hodgestar
- Owner changed from cmlenz to hodgestar
- Status changed from new to assigned
comment:7 in reply to: ↑ 4 ; follow-up: ↓ 8 Changed 12 years ago by jomae
Replying to hodgestar:
>>> t = """$ticket_body_hdr..."""
The multiline strings don't have \-escape at end of line.
>>> t = """aaaaa ... bbbbbb\ ... ccccc""" >>> print t aaaaa bbbbbbccccc >>>
The test cases in genshi/templates/tests/text.py have the same.
comment:8 in reply to: ↑ 7 Changed 12 years ago by hodgestar
Replying to jomae:
The multiline strings don't have \-escape at end of line.
Oops. You are correct. I will fix the tests.
Adding t = r""" doesn't change the result though, so the newline escaping is working.
comment:9 Changed 12 years ago by hodgestar
It turns out this is caused by a combination of Genshi changing from loading templates with file mode "U" to opening them with file mode "rb" in 0.7, and of this particular Trac template having "\r\n" line-endings.
comment:10 Changed 12 years ago by t2y <tetsuya.morimoto@…>
Is this difficult to fix? or is there any workaround?
comment:11 Changed 12 years ago by t2y <tetsuya.morimoto@…>
Then, I finally understood. This issue happens when the template has \r\n line break. I can accept to avoid extra \ character using only \n for the template. However, in case the email-template, RFC says \r\n (CRLF) is appropriate as line break.
http://tools.ietf.org/html/rfc2046#section-4.1.1 http://tools.ietf.org/html/rfc2822
Changed 12 years ago by t2y <tetsuya.morimoto@…>
comment:12 Changed 12 years ago by t2y <tetsuya.morimoto@…>
I made a simple patch for trunk (0.8dev) to be able to handle CRLF line break. I confirmed all tests are passed on py26, py27, py32, py33. Could you review it?
comment:13 Changed 12 years ago by hodgestar
- Resolution set to fixed
- Status changed from assigned to closed

This sounds like a regression in 0.7.