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,

Roundup Issue Tracker: http://roundup-tracker.org/