2525import textwrap
2626import time , hashlib
2727
28+ try :
29+ from html import escape as html_escape # python 3
30+ except ImportError :
31+ from cgi import escape as html_escape # python 2 fallback
32+
2833from roundup .anypy import urllib_
2934from roundup import hyperdb , date , support
3035from roundup import i18n
@@ -430,7 +435,7 @@ def _set_input_default_args(dic):
430435 pass
431436
432437def cgi_escape_attrs (** attrs ):
433- return ' ' .join (['%s="%s"' % (k ,cgi . escape (str (v ), True ))
438+ return ' ' .join (['%s="%s"' % (k ,html_escape (str (v ), True ))
434439 for k ,v in sorted (attrs .items ())])
435440
436441def input_html4 (** attrs ):
@@ -1044,7 +1049,7 @@ def history(self, direction='descending', dre=re.compile('^\d+$'),
10441049 if labelprop is not None and \
10451050 labelprop != 'id' :
10461051 label = linkcl .get (linkid , labelprop )
1047- label = cgi . escape (label )
1052+ label = html_escape (label )
10481053 except IndexError :
10491054 comments ['no_link' ] = self ._ (
10501055 "<strike>The linked node"
@@ -1069,7 +1074,7 @@ def history(self, direction='descending', dre=re.compile('^\d+$'),
10691074 # there's no labelprop!
10701075 if labelprop is not None and labelprop != 'id' :
10711076 try :
1072- label = cgi . escape (linkcl .get (args [k ],
1077+ label = html_escape (linkcl .get (args [k ],
10731078 labelprop ))
10741079 except IndexError :
10751080 comments ['no_link' ] = self ._ (
@@ -1109,7 +1114,7 @@ def history(self, direction='descending', dre=re.compile('^\d+$'),
11091114 current [k ] = val
11101115
11111116 elif isinstance (prop , hyperdb .String ) and args [k ]:
1112- val = cgi . escape (args [k ])
1117+ val = html_escape (args [k ])
11131118 cell .append ('%s: %s' % (self ._ (k ), val ))
11141119 if k in current and current [k ] is not None :
11151120 cell [- 1 ] += ' -> %s' % current [k ]
@@ -1155,7 +1160,7 @@ def history(self, direction='descending', dre=re.compile('^\d+$'),
11551160 if dre .match (user ):
11561161 user = self ._db .user .get (user , 'username' )
11571162 l .append ('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>' % (
1158- date_s , cgi . escape (user ), self ._ (action ), arg_s ))
1163+ date_s , html_escape (user ), self ._ (action ), arg_s ))
11591164 if comments :
11601165 l .append (self ._ (
11611166 '<tr><td colspan=4><strong>Note:</strong></td></tr>' ))
@@ -1490,13 +1495,13 @@ def plain(self, escape=0, hyperlink=0):
14901495 if self ._value is None :
14911496 return ''
14921497 if escape :
1493- s = cgi . escape (str (self ._value ))
1498+ s = html_escape (str (self ._value ))
14941499 else :
14951500 s = str (self ._value )
14961501 if hyperlink :
14971502 # no, we *must* escape this text
14981503 if not escape :
1499- s = cgi . escape (s )
1504+ s = html_escape (s )
15001505 s = self .hyper_re .sub (self ._hyper_repl , s )
15011506 return s
15021507
@@ -1520,11 +1525,11 @@ def wrapped(self, escape=1, hyperlink=1):
15201525 return ''
15211526 s = '\n ' .join (textwrap .wrap (str (self ._value ), 80 ))
15221527 if escape :
1523- s = cgi . escape (s )
1528+ s = html_escape (s )
15241529 if hyperlink :
15251530 # no, we *must* escape this text
15261531 if not escape :
1527- s = cgi . escape (s )
1532+ s = html_escape (s )
15281533 s = self .hyper_re .sub (self ._hyper_repl , s )
15291534 return s
15301535
@@ -1584,7 +1589,7 @@ def multiline(self, escape=0, rows=5, cols=40, **kwargs):
15841589 if self ._value is None :
15851590 value = ''
15861591 else :
1587- value = cgi . escape (str (self ._value ))
1592+ value = html_escape (str (self ._value ))
15881593
15891594 value = '"' .join (value .split ('"' ))
15901595 name = self ._formname
@@ -1612,7 +1617,7 @@ def email(self, escape=1):
16121617 else :
16131618 value = value .replace ('.' , ' ' )
16141619 if escape :
1615- value = cgi . escape (value )
1620+ value = html_escape (value )
16161621 return value
16171622
16181623class PasswordHTMLProperty (HTMLProperty ):
@@ -1629,7 +1634,7 @@ def plain(self, escape=0):
16291634 except AttributeError :
16301635 value = self ._ ('[hidden]' )
16311636 if escape :
1632- value = cgi . escape (value )
1637+ value = html_escape (value )
16331638 return value
16341639
16351640 def field (self , size = 30 , ** kwargs ):
@@ -2091,7 +2096,7 @@ def plain(self, escape=0):
20912096 else :
20922097 value = self ._value
20932098 if escape :
2094- value = cgi . escape (value )
2099+ value = html_escape (value )
20952100 return value
20962101
20972102 def field (self , showid = 0 , size = None , ** kwargs ):
@@ -2243,7 +2248,7 @@ def menu(self, size=None, height=None, showid=0, additional=[], value=None,
22432248 tr = str
22442249 if translate :
22452250 tr = self ._
2246- lab = cgi . escape (tr (lab ))
2251+ lab = html_escape (tr (lab ))
22472252 l .append ('<option %svalue="%s">%s</option>' % (s , optionid , lab ))
22482253 l .append ('</select>' )
22492254 return '\n ' .join (l )
@@ -2342,7 +2347,7 @@ def plain(self, escape=0):
23422347 labels .append (label )
23432348 value = ', ' .join (labels )
23442349 if escape :
2345- value = cgi . escape (value )
2350+ value = html_escape (value )
23462351 return value
23472352
23482353 def field (self , size = 30 , showid = 0 , ** kwargs ):
@@ -2479,7 +2484,7 @@ def menu(self, size=None, height=None, showid=0, additional=[],
24792484 tr = str
24802485 if translate :
24812486 tr = self ._
2482- lab = cgi . escape (tr (lab ))
2487+ lab = html_escape (tr (lab ))
24832488 l .append ('<option %svalue="%s">%s</option>' % (s , optionid ,
24842489 lab ))
24852490 l .append ('</select>' )
@@ -3082,7 +3087,7 @@ def url_quote(self, url):
30823087
30833088 def html_quote (self , html ):
30843089 """HTML-quote the supplied text."""
3085- return cgi . escape (html )
3090+ return html_escape (html )
30863091
30873092 def __getattr__ (self , name ):
30883093 """Try the tracker's templating_utils."""
0 commit comments