On 04/13/2015 07:00 PM, Andrew Shadura wrote:
# HG changeset patch
# User Andrew Shadura <[email protected]>
# Date 1428965992 -7200
#      Tue Apr 14 00:59:52 2015 +0200
# Node ID abeb4a96c92a913b61e2fcb9c9c87f4d02ea00a2
# Parent  caef25781d8cb4b9e43e0def6b7a199c3f3cb462
lib: remove ineffective html_escape implementation, use escape instead

lib.helpers.html_escape scanned the whole string replacing HTML-unsafe
characters; webhelpers, however, use optimised implementation from markupsafe.

I agree that html_escape seems weird and inefficient - it would be better to reduce complexity and consistently use the existing escape web helper.

html_escape is however only used for tests. It might make sense to have a simple and 'obviously correct' html escaper for use in the tests so we don't "beg the question". We should thus perhaps move the function to the tests somewhere. Or perhaps just hardcode the expected strings so we get simpler tests that don't do any computation. The pytest experts can perhaps give some advice on the right way to do that.

Also, formencode uses its own implementation, html_quote, which is used in
form validators. For uniformity, patch it to use escape function from 
webhelpers.

This seems like an unrelated change?

Formencode is weird ... but it seems like it works correctly even though it does weird things?

I don't like that it adds extra complexity and risk by hacking module externals (apparently) without achieving anything important. I would prefer to leave this part out.

/Mads


diff --git a/kallithea/lib/compat.py b/kallithea/lib/compat.py
--- a/kallithea/lib/compat.py
+++ b/kallithea/lib/compat.py
@@ -566,3 +566,7 @@ else:
              memo[id(self)] = result
              result.__init__(deepcopy(tuple(self), memo))
              return result
+
+import formencode.rewritingparser
+import webhelpers.html
+formencode.rewritingparser.html_quote = webhelpers.html.escape
diff --git a/kallithea/lib/helpers.py b/kallithea/lib/helpers.py
--- a/kallithea/lib/helpers.py
+++ b/kallithea/lib/helpers.py
@@ -89,19 +89,6 @@ def canonical_hostname():
          parts = url('home', qualified=True).split('://', 1)
          return parts[1].split('/', 1)[0]
-def html_escape(text, html_escape_table=None):
-    """Produce entities within text."""
-    if not html_escape_table:
-        html_escape_table = {
-            "&": "&amp;",
-            '"': "&quot;",
-            "'": "&apos;",
-            ">": "&gt;",
-            "<": "&lt;",
-        }
-    return "".join(html_escape_table.get(c, c) for c in text)
-
-
  def shorter(text, size=20):
      postfix = '...'
      if len(text) > size:
diff --git a/kallithea/tests/functional/test_admin_users.py 
b/kallithea/tests/functional/test_admin_users.py
--- a/kallithea/tests/functional/test_admin_users.py
+++ b/kallithea/tests/functional/test_admin_users.py
@@ -94,7 +94,7 @@ class TestAdminUsersController(TestContr
                                                 '_authentication_token': 
self.authentication_token()})
msg = validators.ValidUsername(False, {})._messages['system_invalid_username']
-        msg = h.html_escape(msg % {'username': 'new_user'})
+        msg = h.escape(msg % {'username': 'new_user'})
          response.mustcontain("""<span class="error-message">%s</span>""" % 
msg)
          response.mustcontain("""<span class="error-message">Please enter a 
value</span>""")
          response.mustcontain("""<span class="error-message">An email address must contain a single 
@</span>""")
diff --git a/kallithea/tests/functional/test_login.py 
b/kallithea/tests/functional/test_login.py
--- a/kallithea/tests/functional/test_login.py
+++ b/kallithea/tests/functional/test_login.py
@@ -114,7 +114,7 @@ class TestLoginController(TestController
                                               'lastname': 'test'})
msg = validators.ValidUsername()._messages['username_exists']
-        msg = h.html_escape(msg % {'username': uname})
+        msg = h.escape(msg % {'username': uname})
          response.mustcontain(msg)
def test_register_err_same_email(self):
@@ -179,7 +179,7 @@ class TestLoginController(TestController
response.mustcontain('An email address must contain a single @')
          msg = validators.ValidUsername()._messages['username_exists']
-        msg = h.html_escape(msg % {'username': usr})
+        msg = h.escape(msg % {'username': usr})
          response.mustcontain(msg)
def test_register_special_chars(self):
@@ -240,7 +240,7 @@ class TestLoginController(TestController
          )
msg = validators.ValidSystemEmail()._messages['non_existing_email']
-        msg = h.html_escape(msg % {'email': bad_email})
+        msg = h.escape(msg % {'email': bad_email})
          response.mustcontain()
def test_forgot_password(self):
diff --git a/kallithea/tests/functional/test_my_account.py 
b/kallithea/tests/functional/test_my_account.py
--- a/kallithea/tests/functional/test_my_account.py
+++ b/kallithea/tests/functional/test_my_account.py
@@ -181,7 +181,7 @@ class TestMyAccountController(TestContro
          from kallithea.model import validators
          msg = validators.ValidUsername(edit=False, old_data={})\
                  ._messages['username_exists']
-        msg = h.html_escape(msg % {'username': 'test_admin'})
+        msg = h.escape(msg % {'username': 'test_admin'})
          response.mustcontain(u"%s" % msg)
def test_my_account_api_keys(self):
_______________________________________________
kallithea-general mailing list
[email protected]
http://lists.sfconservancy.org/mailman/listinfo/kallithea-general

_______________________________________________
kallithea-general mailing list
[email protected]
http://lists.sfconservancy.org/mailman/listinfo/kallithea-general

Reply via email to