[PATCH V3] [utils] Backport of the changeset 9d62d9fed785 to support the fonctionnality in cubicweb 3.26.14

Nicola Spanti nicola.spanti at logilab.fr
Wed Feb 12 16:32:01 CET 2020


Thanks to the unit test, I am confident, so it is now published.

However, and it is not to only me to decide, but this kind of 
backporting may not be a good idea, because the aim is to keep Python 2, 
that is not supported anymore, so we should get rid of it and not 
putting in perfusion. It looks like Python 2.7: backporting in order not 
to upgrade to new version that breaks, even if we should use it instead 
of delaying it.

Regards.

Le 12/02/2020 à 16:05, Guillaume Vandevelde a écrit :
> # HG changeset patch
> # User Guillaume Vandevelde <gvandevelde at logilab.fr>
> # Date 1581350162 -3600
> #      Mon Feb 10 16:56:02 2020 +0100
> # Branch 3.26
> # Node ID 510385d553405fec89f2ebcbb2dcf4702573716e
> # Parent  9fa65579520f0c2dba413cfa791e0419fbd6105e
> # Available At http://hg.logilab.org/review/cubicweb
> #              hg pull http://hg.logilab.org/review/cubicweb -r 510385d55340
> [utils] Backport of the changeset 9d62d9fed785 to support the fonctionnality in cubicweb 3.26.14
> 
> diff -r 9fa65579520f -r 510385d55340 cubicweb/test/unittest_utils.py
> --- a/cubicweb/test/unittest_utils.py	Tue Aug 27 20:16:01 2019 +0200
> +++ b/cubicweb/test/unittest_utils.py	Mon Feb 10 16:56:02 2020 +0100
> @@ -287,6 +287,9 @@
>               head.add_js(base_url + u'bob1.js')
>               head.add_js(u'http://ext.com/bob2.js')
>               head.add_js(u'http://ext.com/bob3.js')
> +            head.write_front(
> +                '<script type="text/javascript">console.log("FIRST SCRIPT ADDED HERE")</script>'
> +            )
>               head.add_css(base_url + u'bob4.css')
>               head.add_css(base_url + u'bob5.css')
>               head.add_css(base_url + u'bob6.css', 'print')
> @@ -295,6 +298,7 @@
>               head.add_ie_css(base_url + u'bob9.css', 'print', u'[if lt IE 7]')
>               result = head.getvalue()
>               expected = u"""<head>
> +<script type="text/javascript">console.log("FIRST SCRIPT ADDED HERE")</script>
>   <link rel="stylesheet" type="text/css" media="all" href="http://test.fr/data/bob4.css"/>
>   <link rel="stylesheet" type="text/css" media="all" href="http://test.fr/data/bob5.css"/>
>   <link rel="stylesheet" type="text/css" media="print" href="http://test.fr/data/bob6.css"/>
> diff -r 9fa65579520f -r 510385d55340 cubicweb/utils.py
> --- a/cubicweb/utils.py	Tue Aug 27 20:16:01 2019 +0200
> +++ b/cubicweb/utils.py	Mon Feb 10 16:56:02 2020 +0100
> @@ -33,6 +33,7 @@
>       from inspect import getfullargspec as getargspec
>   else:
>       from inspect import getargspec
> +from functools import wraps
>   from itertools import repeat
>   from uuid import uuid4
>   from warnings import warn
> @@ -191,6 +192,22 @@
>           self._size -= 1
>   
>   
> +def handle_writing_constraints(method):
> +    @wraps(method)
> +    def wrapper(self, value):
> +        assert isinstance(value, text_type), u"unicode required not %s : %s"\
> +            % (type(value).__name__, repr(value))
> +        if self.tracewrites:
> +            from traceback import format_stack
> +            stack = format_stack(None)[:-1]
> +            escaped_stack = xml_escape(json_dumps(u'\n'.join(stack)))
> +            escaped_html = xml_escape(value).replace('\n', '<br/>\n')
> +            tpl = u'<span onclick="alert(%s)">%s</span>'
> +            value = tpl % (escaped_stack, escaped_html)
> +        return method(self, value)
> +    return wrapper
> +
> +
>   class UStringIO(list):
>       """a file wrapper which automatically encode unicode string to an encoding
>       specifed in the constructor
> @@ -205,18 +222,14 @@
>   
>       __nonzero__ = __bool__
>   
> +    @handle_writing_constraints
>       def write(self, value):
> -        assert isinstance(value, text_type), u"unicode required not %s : %s"\
> -                                     % (type(value).__name__, repr(value))
> -        if self.tracewrites:
> -            from traceback import format_stack
> -            stack = format_stack(None)[:-1]
> -            escaped_stack = xml_escape(json_dumps(u'\n'.join(stack)))
> -            escaped_html = xml_escape(value).replace('\n', '<br/>\n')
> -            tpl = u'<span onclick="alert(%s)">%s</span>'
> -            value = tpl % (escaped_stack, escaped_html)
>           self.append(value)
>   
> +    @handle_writing_constraints
> +    def write_front(self, value):
> +        self.insert(0, value)
> +
>       def getvalue(self):
>           return u''.join(self)
>   
> 



More information about the cubicweb-devel mailing list