summaryrefslogtreecommitdiffstats
path: root/lib/python/web_support.py
diff options
context:
space:
mode:
authorFlorian Weimer <fw@deneb.enyo.de>2005-10-20 09:04:01 +0000
committerFlorian Weimer <fw@deneb.enyo.de>2005-10-20 09:04:01 +0000
commit2f136874c08cae1171c443fbb6defb9311e31236 (patch)
tree3efc57d80c2846d7acd4e4cd5ed7890251e9ef99 /lib/python/web_support.py
parent3680f7792602f5a01706adc4d5cda380afa7fe45 (diff)
r772@deneb: fw | 2005-10-20 10:41:31 +0200
lib/python/web_support.py (URLFactory.updateParams): New method. (charToHTML, charToHTMLattr): Replaces stringToHTML. git-svn-id: svn+ssh://svn.debian.org/svn/secure-testing@2490 e39458fd-73e7-0310-bf30-c45bca0a0e42
Diffstat (limited to 'lib/python/web_support.py')
-rw-r--r--lib/python/web_support.py32
1 files changed, 23 insertions, 9 deletions
diff --git a/lib/python/web_support.py b/lib/python/web_support.py
index 1f3a09bec9..8a2c96e63e 100644
--- a/lib/python/web_support.py
+++ b/lib/python/web_support.py
@@ -144,13 +144,16 @@ class URLFactory:
This factory class handles the case where a script wants to
generate URLs which reference to itself (see scriptRelative)."""
- def __init__(self, server_name, script_name):
+ def __init__(self, server_name, script_name, path_info='',
+ params={}):
self.server_name = server_name or 'localhost'
script_name = self._stripSlashes(script_name or '')
if script_name[-1:] == '/' or script_name == '':
self.script_name = script_name
else:
self.script_name = script_name + '/'
+ self.path_info = self._stripSlashes(path_info)
+ self.params = params
def _convertArgs(self, args):
arglist = []
@@ -189,15 +192,26 @@ class URLFactory:
self._stripSlashes(path),
self._convertArgs(args)))
+ def updateParams(self, **args):
+ new_args = {}
+ for (key, value) in self.params.items():
+ new_args[key] = value
+ for (key, value) in args.items():
+ new_args[key] = value
+ return URL("/%s%s%s" % (self.script_name, self.path_info,
+ self._convertArgs(new_args)))
+
-stringToHTML = map(chr, range(256))
+charToHTML = map(chr, range(256))
+charToHTMLattr = map(chr, range(256))
def _initStringToHTML(s):
for (ch, repl) in (('<', '&lt;'),
('>', '&gt;'),
- ('&', '&amp;'),
- ('"', '&quot;')):
+ ('&', '&amp;')):
s[ord(ch)] = repl
-_initStringToHTML(stringToHTML)
+_initStringToHTML(charToHTML)
+_initStringToHTML(charToHTMLattr)
+charToHTMLattr[ord('"')] = '&34;'
del _initStringToHTML
def escapeHTML(str):
@@ -207,7 +221,7 @@ def escapeHTML(str):
result = []
append = result.append
for ch in str:
- append(stringToHTML[ord(ch)])
+ append(charToHTML[ord(ch)])
return ''.join(result)
class HTMLBase:
@@ -277,7 +291,7 @@ class Tag(HTMLBase):
append(key)
append('="')
for ch in str(value):
- append(stringToHTML[ord(ch)])
+ append(charToHTMLattr[ord(ch)])
append('"')
self.__attribs = ''.join(attrs)
self.contents = contents
@@ -624,7 +638,7 @@ class WebService(Service):
self.__writeError(result, 404, "page not found")
return
self.pre_dispatch()
- url = URLFactory(server_name, script_name)
+ url = URLFactory(server_name, script_name, path, params)
r = method(remaining, params, url)
assert isinstance(r, Result), `r`
r.flatten(result.write)
@@ -653,7 +667,7 @@ def __test():
assert P("").toString() == '<p></p>'
assert P(" ").toString() == '<p> </p>'
assert P("&").toString() == '<p>&amp;</p>'
- assert P("\"").toString() == '<p>&quot;</p>'
+ assert P("\"").toString() == '<p>"</p>'
assert P("<").toString() == '<p>&lt;</p>'
assert P(">").toString() == '<p>&gt;</p>'
assert P(">").toHTML().toString() == '<p>&gt;</p>'

© 2014-2024 Faster IT GmbH | imprint | privacy policy