Improved performance of utils.html.escape().

This commit is contained in:
Tom 2017-10-13 02:02:04 +01:00 committed by Tim Graham
parent 6c92f711ea
commit abb636c1af
2 changed files with 11 additions and 5 deletions

View File

@ -1,4 +1,5 @@
import copy
import itertools
import operator
from functools import total_ordering, wraps
@ -189,7 +190,7 @@ def keep_lazy(*resultclasses):
@wraps(func)
def wrapper(*args, **kwargs):
for arg in list(args) + list(kwargs.values()):
for arg in itertools.chain(args, kwargs.values()):
if isinstance(arg, Promise):
break
else:

View File

@ -30,6 +30,14 @@ simple_url_re = re.compile(r'^https?://\[?\w', re.IGNORECASE)
simple_url_2_re = re.compile(r'^www\.|^(?!http)\w[^@]+\.(com|edu|gov|int|mil|net|org)($|/.*)$', re.IGNORECASE)
simple_email_re = re.compile(r'^\S+@\S+\.\S+$')
_html_escapes = {
ord('&'): '&',
ord('<'): '&lt;',
ord('>'): '&gt;',
ord('"'): '&quot;',
ord("'"): '&#39;',
}
@keep_lazy(str, SafeText)
def escape(text):
@ -41,10 +49,7 @@ def escape(text):
This may result in double-escaping. If this is a concern, use
conditional_escape() instead.
"""
return mark_safe(
str(text).replace('&', '&amp;').replace('<', '&lt;')
.replace('>', '&gt;').replace('"', '&quot;').replace("'", '&#39;')
)
return mark_safe(str(text).translate(_html_escapes))
_js_escapes = {