diff options
author | Florian Weimer <fw@deneb.enyo.de> | 2005-10-20 09:04:01 +0000 |
---|---|---|
committer | Florian Weimer <fw@deneb.enyo.de> | 2005-10-20 09:04:01 +0000 |
commit | 2f136874c08cae1171c443fbb6defb9311e31236 (patch) | |
tree | 3efc57d80c2846d7acd4e4cd5ed7890251e9ef99 /lib/python/web_support.py | |
parent | 3680f7792602f5a01706adc4d5cda380afa7fe45 (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.py | 32 |
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 (('<', '<'), ('>', '>'), - ('&', '&'), - ('"', '"')): + ('&', '&')): 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>&</p>' - assert P("\"").toString() == '<p>"</p>' + assert P("\"").toString() == '<p>"</p>' assert P("<").toString() == '<p><</p>' assert P(">").toString() == '<p>></p>' assert P(">").toHTML().toString() == '<p>></p>' |