cubicweb/web/request.py
branch3.24
changeset 11825 52acf0dbf4cd
parent 11799 1bdfe9d4ab83
child 11826 e2c940c8c485
equal deleted inserted replaced
11824:d7ecf6dab085 11825:52acf0dbf4cd
   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')