web/request.py
changeset 5444 f7fdb5dd82f6
parent 5426 0d4853a6e5ee
child 5467 57372dbfd114
equal deleted inserted replaced
5443:f299ee54d7e0 5444:f7fdb5dd82f6
    97         # tabindex generator
    97         # tabindex generator
    98         self.tabindexgen = count(1)
    98         self.tabindexgen = count(1)
    99         self.next_tabindex = self.tabindexgen.next
    99         self.next_tabindex = self.tabindexgen.next
   100         # page id, set by htmlheader template
   100         # page id, set by htmlheader template
   101         self.pageid = None
   101         self.pageid = None
   102         self.datadir_url = self._datadir_url()
   102         self.datadir_url = vreg.config.datadir_url
   103         self._set_pageid()
   103         self._set_pageid()
   104         # prepare output header
   104         # prepare output header
   105         self.headers_out = Headers()
   105         self.headers_out = Headers()
   106 
   106 
   107     def _set_pageid(self):
   107     def _set_pageid(self):
   587 
   587 
   588     def url(self, includeparams=True):
   588     def url(self, includeparams=True):
   589         """return currently accessed url"""
   589         """return currently accessed url"""
   590         return self.base_url() + self.relative_path(includeparams)
   590         return self.base_url() + self.relative_path(includeparams)
   591 
   591 
   592     def _datadir_url(self):
       
   593         """return url of the instance's data directory"""
       
   594         return self.base_url() + 'data%s/' % self.vreg.config.instance_md5_version()
       
   595 
       
   596     def selected(self, url):
   592     def selected(self, url):
   597         """return True if the url is equivalent to currently accessed url"""
   593         """return True if the url is equivalent to currently accessed url"""
   598         reqpath = self.relative_path().lower()
   594         reqpath = self.relative_path().lower()
   599         baselen = len(self.base_url())
   595         baselen = len(self.base_url())
   600         return (reqpath == url[baselen:].lower())
   596         return (reqpath == url[baselen:].lower())
   615         controller = self.relative_path(False).split('/', 1)[0]
   611         controller = self.relative_path(False).split('/', 1)[0]
   616         registered_controllers = self.vreg['controllers'].keys()
   612         registered_controllers = self.vreg['controllers'].keys()
   617         if controller in registered_controllers:
   613         if controller in registered_controllers:
   618             return controller
   614             return controller
   619         return 'view'
   615         return 'view'
   620 
       
   621     def external_resource(self, rid, default=_MARKER):
       
   622         """return a path to an external resource, using its identifier
       
   623 
       
   624         raise KeyError  if the resource is not defined
       
   625         """
       
   626         try:
       
   627             value = self.vreg.config.ext_resources[rid]
       
   628         except KeyError:
       
   629             if default is _MARKER:
       
   630                 raise
       
   631             return default
       
   632         if value is None:
       
   633             return None
       
   634         baseurl = self.datadir_url[:-1] # remove trailing /
       
   635         if isinstance(value, list):
       
   636             return [v.replace('DATADIR', baseurl) for v in value]
       
   637         return value.replace('DATADIR', baseurl)
       
   638     external_resource = cached(external_resource, keyarg=1)
       
   639 
   616 
   640     def validate_cache(self):
   617     def validate_cache(self):
   641         """raise a `DirectResponse` exception if a cached page along the way
   618         """raise a `DirectResponse` exception if a cached page along the way
   642         exists and is still usable.
   619         exists and is still usable.
   643 
   620 
   709                 return user.decode('UTF8'), passwd
   686                 return user.decode('UTF8'), passwd
   710             except Exception, ex:
   687             except Exception, ex:
   711                 self.debug('bad authorization %s (%s: %s)',
   688                 self.debug('bad authorization %s (%s: %s)',
   712                            auth, ex.__class__.__name__, ex)
   689                            auth, ex.__class__.__name__, ex)
   713         return None, None
   690         return None, None
   714 
       
   715     @deprecated("[3.4] use parse_accept_header('Accept-Language')")
       
   716     def header_accept_language(self):
       
   717         """returns an ordered list of preferred languages"""
       
   718         return [value.split('-')[0] for value in
       
   719                 self.parse_accept_header('Accept-Language')]
       
   720 
   691 
   721     def parse_accept_header(self, header):
   692     def parse_accept_header(self, header):
   722         """returns an ordered list of preferred languages"""
   693         """returns an ordered list of preferred languages"""
   723         accepteds = self.get_header(header, '')
   694         accepteds = self.get_header(header, '')
   724         values = []
   695         values = []
   821         if self.xhtml_browser():
   792         if self.xhtml_browser():
   822             return (u'<?xml version="1.0"?>\n' + STRICT_DOCTYPE + # XXX encoding ?
   793             return (u'<?xml version="1.0"?>\n' + STRICT_DOCTYPE + # XXX encoding ?
   823                     u'<div xmlns="http://www.w3.org/1999/xhtml" xmlns:cubicweb="http://www.logilab.org/2008/cubicweb">')
   794                     u'<div xmlns="http://www.w3.org/1999/xhtml" xmlns:cubicweb="http://www.logilab.org/2008/cubicweb">')
   824         return u'<div>'
   795         return u'<div>'
   825 
   796 
       
   797     @deprecated('[3.9] use req.vreg.config.uiprops[rid]')
       
   798     def external_resource(self, rid, default=_MARKER):
       
   799         """return a path to an external resource, using its identifier
       
   800 
       
   801         raise `KeyError` if the resource is not defined
       
   802         """
       
   803         try:
       
   804             return self.vreg.config.uiprops[rid]
       
   805         except KeyError:
       
   806             if default is _MARKER:
       
   807                 raise
       
   808             return default
       
   809 
       
   810     @deprecated("[3.4] use parse_accept_header('Accept-Language')")
       
   811     def header_accept_language(self):
       
   812         """returns an ordered list of preferred languages"""
       
   813         return [value.split('-')[0] for value in
       
   814                 self.parse_accept_header('Accept-Language')]
       
   815 
       
   816 
   826 from cubicweb import set_log_methods
   817 from cubicweb import set_log_methods
   827 set_log_methods(CubicWebRequestBase, LOGGER)
   818 set_log_methods(CubicWebRequestBase, LOGGER)