From d76c1d136006d3b1390de60dfed6b7d66a2121ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20Ram=C3=ADrez?= Date: Sun, 17 Aug 2014 19:32:33 -0600 Subject: [PATCH 1/3] This fix #8. --- secretary.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/secretary.py b/secretary.py index a481131..f6bc147 100644 --- a/secretary.py +++ b/secretary.py @@ -297,14 +297,13 @@ class Renderer(object): return xml_text def _encode_escape_chars(self, xml_text): - encode_rules = { - '(?i)(.*)(\n)(.*)': r'\1\3', - '(?i)(.*)(\u0009)(.*)': r'\1\3', - '(?i)[\u0009|\u000d|\u000a](?:(?![]))': '' - } - - for p, r in encode_rules.items(): - xml_text = re.sub(p, r, xml_text) + # Replace line feed and/or tabs within text span entities. + find_pattern = r'(?is)([^>]*?([\n|\t])[^<]*?)' + for m in re.findall(find_pattern, xml_text): + print(m[1]) + replacement = m[1].replace('\n', '') + replacement = replacement.replace('\t', '') + xml_text = xml_text.replace(m[1], replacement) return xml_text @@ -320,13 +319,17 @@ class Renderer(object): result = jinja_template.render(**kwargs) result = self._encode_escape_chars(result) - return parseString(result.encode('ascii', 'xmlcharrefreplace')) + try: + return parseString(result.encode('ascii', 'xmlcharrefreplace')) + except: + self.log.error('Error parsing XML result:\n%s', result, + exc_info=True) + raise except: - self.log.debug('Error rendering template:\n%s', - xml_document.toprettyxml()) + self.log.error('Error rendering template:\n%s', + xml_document.toprettyxml(), exc_info=True) raise - finally: self.log.debug('Rendering xml object finished') From 62efc4a24f71b5b0c1e512ca3f9c5e1c23e069d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20Ram=C3=ADrez?= Date: Sun, 17 Aug 2014 19:33:14 -0600 Subject: [PATCH 2/3] New tests for issue #8. --- test_secretary.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/test_secretary.py b/test_secretary.py index c95824a..766a971 100644 --- a/test_secretary.py +++ b/test_secretary.py @@ -45,12 +45,11 @@ class RenderTestCase(TestCase): '\n': '', '\n': '', '\n': '', + 'Hello\n': 'Hello', + 'Hello\nWorld\n!': 'HelloWorld!', '\n': '', - '\u0009': '', + '\u0009': '', '\n': '', - '\u0009': '', - '\u000d': '', - '\u000a': '', } for test, expect in test_samples.items(): From d5931ad1fe45caa07922638d443e8744e196e362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20Ram=C3=ADrez?= Date: Sun, 17 Aug 2014 19:36:02 -0600 Subject: [PATCH 3/3] Update version number. Version 0.2.1 fix issue #8. --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 8e2c737..84ca689 100644 --- a/setup.py +++ b/setup.py @@ -24,7 +24,7 @@ class PyTest(TestCommand): setup( name='secretary', - version='0.2.0', + version='0.2.1', url='https://github.com/christopher-ramirez/secretary', license='MIT', author='Christopher Ramírez',