144 self.content = BytesIO() |
144 self.content = BytesIO() |
145 # prepare output header |
145 # prepare output header |
146 #: Header used for the final response |
146 #: Header used for the final response |
147 self.headers_out = Headers() |
147 self.headers_out = Headers() |
148 #: HTTP status use by the final response |
148 #: HTTP status use by the final response |
149 self.status_out = 200 |
149 self.status_out = 200 |
150 # set up language based on request headers or site default (we don't |
150 # set up language based on site default (we don't have a user yet, and might not get one) |
151 # have a user yet, and might not get one) |
151 self.set_language(vreg.property_value('ui.language')) |
152 self.set_user_language(None) |
|
153 #: dictionary that may be used to store request data that has to be |
152 #: dictionary that may be used to store request data that has to be |
154 #: shared among various components used to publish the request (views, |
153 #: shared among various components used to publish the request (views, |
155 #: controller, application...) |
154 #: controller, application...) |
156 self.data = {} |
155 self.data = {} |
157 self._search_state = None |
156 self._search_state = None |
927 for lang in self.header_accept_language(): |
926 for lang in self.header_accept_language(): |
928 if lang in self.translations: |
927 if lang in self.translations: |
929 return lang |
928 return lang |
930 return None |
929 return None |
931 |
930 |
932 def set_user_language(self, user): |
|
933 vreg = self.vreg |
|
934 if user is not None: |
|
935 try: |
|
936 lang = vreg.typed_value('ui.language', user.properties['ui.language']) |
|
937 self.set_language(lang) |
|
938 return |
|
939 except KeyError: |
|
940 pass |
|
941 # site's default language |
|
942 self.set_default_language(vreg) |
|
943 |
|
944 |
931 |
945 def _cnx_func(name): |
932 def _cnx_func(name): |
946 def proxy(req, *args, **kwargs): |
933 def proxy(req, *args, **kwargs): |
947 return getattr(req.cnx, name)(*args, **kwargs) |
934 return getattr(req.cnx, name)(*args, **kwargs) |
948 return proxy |
935 return proxy |
991 |
978 |
992 def set_cnx(self, cnx): |
979 def set_cnx(self, cnx): |
993 self.cnx = cnx |
980 self.cnx = cnx |
994 self.session = cnx.session |
981 self.session = cnx.session |
995 self._set_user(cnx.user) |
982 self._set_user(cnx.user) |
996 self.set_user_language(cnx.user) |
983 # set language according to the one defined on the connection which consider user's |
|
984 # preference |
|
985 self.set_language(cnx.lang) |
997 |
986 |
998 def execute(self, *args, **kwargs): |
987 def execute(self, *args, **kwargs): |
999 rset = self.cnx.execute(*args, **kwargs) |
988 rset = self.cnx.execute(*args, **kwargs) |
1000 rset.req = self |
989 rset.req = self |
1001 return rset |
990 return rset |
1002 |
|
1003 def set_default_language(self, vreg): |
|
1004 try: |
|
1005 lang = vreg.property_value('ui.language') |
|
1006 except Exception: # property may not be registered |
|
1007 lang = 'en' |
|
1008 try: |
|
1009 self.set_language(lang) |
|
1010 except KeyError: |
|
1011 # this occurs usually during test execution |
|
1012 self._ = self.__ = text_type |
|
1013 self.pgettext = lambda x, y: text_type(y) |
|
1014 |
991 |
1015 entity_metas = _cnx_func('entity_metas') # XXX deprecated |
992 entity_metas = _cnx_func('entity_metas') # XXX deprecated |
1016 entity_type = _cnx_func('entity_type') |
993 entity_type = _cnx_func('entity_type') |
1017 source_defs = _cnx_func('source_defs') |
994 source_defs = _cnx_func('source_defs') |
1018 get_shared_data = _cnx_func('get_shared_data') |
995 get_shared_data = _cnx_func('get_shared_data') |