From e1d01001ab55997d202e8dc040a0ef6678807e3f Mon Sep 17 00:00:00 2001 From: Christian Ulrich Date: Mon, 17 May 2021 15:19:40 +0200 Subject: [PATCH 1/2] remove escaping of variable values as it is handled by jinja2 since at least 2.10 --- secretary.py | 14 ++------------ test_secretary.py | 21 --------------------- 2 files changed, 2 insertions(+), 33 deletions(-) diff --git a/secretary.py b/secretary.py index ffad3d5..bc828e2 100644 --- a/secretary.py +++ b/secretary.py @@ -29,7 +29,6 @@ import re import sys import logging import zipfile -import jinja2 from os import path from mimetypes import guess_type, guess_extension from uuid import uuid4 @@ -135,27 +134,18 @@ class Renderer(object): self.environment = environment else: self.environment = Environment(undefined=UndefinedSilently, - autoescape=True, - finalize=self.finalize_value) + autoescape=True) # Register filters self.environment.filters['pad'] = pad_string self.environment.filters['markdown'] = self.markdown_filter self.environment.filters['image'] = self.image_filter - self.environment.globals['SafeValue'] = jinja2.Markup + self.environment.globals['SafeValue'] = Markup self.media_path = kwargs.pop('media_path', '') self.media_callback = self.fs_loader self._compile_tags_expressions() - @jinja2.evalcontextfilter - def finalize_value(self, value, *args): - """Escapes variables values.""" - if isinstance(value, Markup): - return value - - return Markup(self.get_escaped_var_value(value)) - def media_loader(self, callback): """This sets the the media loader. A user defined function which loads media. The function should take a template value, optionals diff --git a/test_secretary.py b/test_secretary.py index d3883e9..5be7722 100644 --- a/test_secretary.py +++ b/test_secretary.py @@ -63,24 +63,3 @@ class RenderTestCase(TestCase): def test_create_text_span_node(self): assert self.engine.create_text_span_node(self.document, 'text').toxml() == 'text' - - -class EscapingVariablesValues(TestCase): - """ - Test encoding of line feed and tab variables valuess - """ - def test_encode_linefeed_char(self): - xml = 'This\nLF' - expected = 'ThisLF' - assert (Renderer.get_escaped_var_value(xml) == expected) - - def test_encode_linefeed_char(self): - xml = 'This\tTab char' - expected = 'ThisTab char' - assert (Renderer.get_escaped_var_value(xml) == expected) - - def test_escape_xml_reserved_chars(self): - ''' Should also escape minor and mayor signs ''' - xml = '1 is > than 0 & -1 is <' - expected = '1 is > than 0 & -1 is <' - assert (Renderer.get_escaped_var_value(xml) == expected) From 881b659560945ae54e514e1bb967fe9fcff23ba3 Mon Sep 17 00:00:00 2001 From: Christian Ulrich Date: Mon, 17 May 2021 15:45:38 +0200 Subject: [PATCH 2/2] remove escaping of variable values as it is handled by jinja2 since at least 2.10 --- secretary.py | 29 ++--------------------------- test_secretary.py | 21 --------------------- 2 files changed, 2 insertions(+), 48 deletions(-) diff --git a/secretary.py b/secretary.py index ffad3d5..2a21714 100644 --- a/secretary.py +++ b/secretary.py @@ -29,7 +29,6 @@ import re import sys import logging import zipfile -import jinja2 from os import path from mimetypes import guess_type, guess_extension from uuid import uuid4 @@ -135,27 +134,18 @@ class Renderer(object): self.environment = environment else: self.environment = Environment(undefined=UndefinedSilently, - autoescape=True, - finalize=self.finalize_value) + autoescape=True) # Register filters self.environment.filters['pad'] = pad_string self.environment.filters['markdown'] = self.markdown_filter self.environment.filters['image'] = self.image_filter - self.environment.globals['SafeValue'] = jinja2.Markup + self.environment.globals['SafeValue'] = Markup self.media_path = kwargs.pop('media_path', '') self.media_callback = self.fs_loader self._compile_tags_expressions() - @jinja2.evalcontextfilter - def finalize_value(self, value, *args): - """Escapes variables values.""" - if isinstance(value, Markup): - return value - - return Markup(self.get_escaped_var_value(value)) - def media_loader(self, callback): """This sets the the media loader. A user defined function which loads media. The function should take a template value, optionals @@ -449,21 +439,6 @@ class Renderer(object): return xml_text - @staticmethod - def get_escaped_var_value(value): - """ - Encodes XML reserved chars in value (eg. &, <, >) and also replaces - the control chars \n and \t control chars to their ODF counterparts. - """ - value = Markup.escape(value) - return ( - value.replace('\n', Markup('')) - .replace('\t', Markup('')) - .replace('\x0b', '') - .replace('\x0c', '') - ) - - def add_media_to_archive(self, media, mime, name=''): """ Adds to "Pictures" archive folder the file in `media` and register diff --git a/test_secretary.py b/test_secretary.py index d3883e9..5be7722 100644 --- a/test_secretary.py +++ b/test_secretary.py @@ -63,24 +63,3 @@ class RenderTestCase(TestCase): def test_create_text_span_node(self): assert self.engine.create_text_span_node(self.document, 'text').toxml() == 'text' - - -class EscapingVariablesValues(TestCase): - """ - Test encoding of line feed and tab variables valuess - """ - def test_encode_linefeed_char(self): - xml = 'This\nLF' - expected = 'ThisLF' - assert (Renderer.get_escaped_var_value(xml) == expected) - - def test_encode_linefeed_char(self): - xml = 'This\tTab char' - expected = 'ThisTab char' - assert (Renderer.get_escaped_var_value(xml) == expected) - - def test_escape_xml_reserved_chars(self): - ''' Should also escape minor and mayor signs ''' - xml = '1 is > than 0 & -1 is <' - expected = '1 is > than 0 & -1 is <' - assert (Renderer.get_escaped_var_value(xml) == expected)