Mercurial > p > roundup > code
comparison roundup/cgi/client.py @ 2467:76ead526113d
client instances may be used as translation engines.
any backend translator may be passed as constructor
argument or via setTranslator() method. by default,
templating.translationService is used.
use this engine to translate client messages.
| author | Alexander Smishlajev <a1s@users.sourceforge.net> |
|---|---|
| date | Tue, 15 Jun 2004 09:19:49 +0000 |
| parents | 1d46cd2f83f6 |
| children | b81c9679f5de |
comparison
equal
deleted
inserted
replaced
| 2466:7b248ea0a2e5 | 2467:76ead526113d |
|---|---|
| 1 # $Id: client.py,v 1.178 2004-05-27 21:51:43 richard Exp $ | 1 # $Id: client.py,v 1.179 2004-06-15 09:19:49 a1s Exp $ |
| 2 | 2 |
| 3 """WWW request handler (also used in the stand-alone server). | 3 """WWW request handler (also used in the stand-alone server). |
| 4 """ | 4 """ |
| 5 __docformat__ = 'restructuredtext' | 5 __docformat__ = 'restructuredtext' |
| 6 | 6 |
| 8 import binascii, Cookie, time, random, stat, rfc822 | 8 import binascii, Cookie, time, random, stat, rfc822 |
| 9 import codecs | 9 import codecs |
| 10 | 10 |
| 11 | 11 |
| 12 from roundup import roundupdb, date, hyperdb, password | 12 from roundup import roundupdb, date, hyperdb, password |
| 13 from roundup.i18n import _ | |
| 14 from roundup.cgi import templating, cgitb | 13 from roundup.cgi import templating, cgitb |
| 15 from roundup.cgi.actions import * | 14 from roundup.cgi.actions import * |
| 16 from roundup.cgi.exceptions import * | 15 from roundup.cgi.exceptions import * |
| 17 from roundup.cgi.form_parser import FormParser | 16 from roundup.cgi.form_parser import FormParser |
| 18 from roundup.mailer import Mailer, MessageSendError | 17 from roundup.mailer import Mailer, MessageSendError |
| 101 | 100 |
| 102 # Note: index page stuff doesn't appear here: | 101 # Note: index page stuff doesn't appear here: |
| 103 # columns, sort, sortdir, filter, group, groupdir, search_text, | 102 # columns, sort, sortdir, filter, group, groupdir, search_text, |
| 104 # pagesize, startwith | 103 # pagesize, startwith |
| 105 | 104 |
| 106 def __init__(self, instance, request, env, form=None): | 105 def __init__(self, instance, request, env, form=None, translator=None): |
| 107 # re-seed the random number generator | 106 # re-seed the random number generator |
| 108 random.seed() | 107 random.seed() |
| 109 if __debug__: | 108 if __debug__: |
| 110 hyperdb.traceMark() | 109 hyperdb.traceMark() |
| 111 self.start = time.time() | 110 self.start = time.time() |
| 112 self.instance = instance | 111 self.instance = instance |
| 113 self.request = request | 112 self.request = request |
| 114 self.env = env | 113 self.env = env |
| 114 self.setTranslator(translator) | |
| 115 self.mailer = Mailer(instance.config) | 115 self.mailer = Mailer(instance.config) |
| 116 | 116 |
| 117 # save off the path | 117 # save off the path |
| 118 self.path = env['PATH_INFO'] | 118 self.path = env['PATH_INFO'] |
| 119 | 119 |
| 151 self.additional_headers = {} | 151 self.additional_headers = {} |
| 152 self.response_code = 200 | 152 self.response_code = 200 |
| 153 | 153 |
| 154 # parse cookies (used in charset and session lookups) | 154 # parse cookies (used in charset and session lookups) |
| 155 self.cookie = Cookie.SimpleCookie(self.env.get('HTTP_COOKIE', '')) | 155 self.cookie = Cookie.SimpleCookie(self.env.get('HTTP_COOKIE', '')) |
| 156 | |
| 157 def setTranslator(self, translator=None): | |
| 158 """Replace the translation engine | |
| 159 | |
| 160 'translator' | |
| 161 is i18n module or one of gettext translation classes. | |
| 162 It must have attributes 'gettext' and 'ngettext', | |
| 163 serving as translation functions. | |
| 164 | |
| 165 If omitted, use templating.translationService. | |
| 166 """ | |
| 167 if translator is None: | |
| 168 translator = templating.translationService | |
| 169 self.translator = translator | |
| 170 self._ = self.gettext = translator.gettext | |
| 171 self.ngettext = translator.ngettext | |
| 156 | 172 |
| 157 def main(self): | 173 def main(self): |
| 158 ''' Wrap the real main in a try/finally so we always close off the db. | 174 ''' Wrap the real main in a try/finally so we always close off the db. |
| 159 ''' | 175 ''' |
| 160 try: | 176 try: |
| 255 self.write_html(self.renderContext()) | 271 self.write_html(self.renderContext()) |
| 256 except NotFound: | 272 except NotFound: |
| 257 # pass through | 273 # pass through |
| 258 raise | 274 raise |
| 259 except FormError, e: | 275 except FormError, e: |
| 260 self.error_message.append(_('Form Error: ') + str(e)) | 276 self.error_message.append(self._('Form Error: ') + str(e)) |
| 261 self.write_html(self.renderContext()) | 277 self.write_html(self.renderContext()) |
| 262 except: | 278 except: |
| 263 # everything else | 279 # everything else |
| 264 self.write_html(cgitb.html()) | 280 self.write_html(cgitb.html()) |
| 265 | 281 |
| 305 if charset: | 321 if charset: |
| 306 # make sure the charset is recognized | 322 # make sure the charset is recognized |
| 307 try: | 323 try: |
| 308 codecs.lookup(charset) | 324 codecs.lookup(charset) |
| 309 except LookupError: | 325 except LookupError: |
| 310 self.error_message.append(_('Unrecognized charset: %r') | 326 self.error_message.append(self._('Unrecognized charset: %r') |
| 311 % charset) | 327 % charset) |
| 312 else: | 328 else: |
| 313 self.charset = charset.lower() | 329 self.charset = charset.lower() |
| 314 | 330 |
| 315 # if client charset is different from the storage charset, | 331 # if client charset is different from the storage charset, |
