devtools/fake.py
branchstable
changeset 7224 e5833657c646
parent 6851 824d5b6eae7f
child 7232 506a0af77cee
equal deleted inserted replaced
7220:eb0f5f46138f 7224:e5833657c646
    23 from logilab.database import get_db_helper
    23 from logilab.database import get_db_helper
    24 
    24 
    25 from cubicweb.req import RequestSessionBase
    25 from cubicweb.req import RequestSessionBase
    26 from cubicweb.cwvreg import CubicWebVRegistry
    26 from cubicweb.cwvreg import CubicWebVRegistry
    27 from cubicweb.web.request import CubicWebRequestBase
    27 from cubicweb.web.request import CubicWebRequestBase
       
    28 from cubicweb.web.http_headers import Headers
       
    29 
    28 from cubicweb.devtools import BASE_URL, BaseApptestConfiguration
    30 from cubicweb.devtools import BASE_URL, BaseApptestConfiguration
    29 
    31 
    30 
    32 
    31 class FakeConfig(dict, BaseApptestConfiguration):
    33 class FakeConfig(dict, BaseApptestConfiguration):
    32     translations = {}
    34     translations = {}
    57             kwargs['vreg'] = CubicWebVRegistry(FakeConfig(), initlog=False)
    59             kwargs['vreg'] = CubicWebVRegistry(FakeConfig(), initlog=False)
    58         kwargs['https'] = False
    60         kwargs['https'] = False
    59         self._url = kwargs.pop('url', 'view?rql=Blop&vid=blop')
    61         self._url = kwargs.pop('url', 'view?rql=Blop&vid=blop')
    60         super(FakeRequest, self).__init__(*args, **kwargs)
    62         super(FakeRequest, self).__init__(*args, **kwargs)
    61         self._session_data = {}
    63         self._session_data = {}
    62         self._headers = {}
    64         self._headers_in = Headers()
    63 
    65 
       
    66     def set_cookie(self, cookie, key, maxage=300, expires=None):
       
    67         super(FakeRequest, self).set_cookie(cookie, key, maxage=300, expires=None)
       
    68         cookie = self.get_response_header('Set-Cookie')
       
    69         self._headers_in.setHeader('Cookie', cookie)
       
    70 
       
    71     ## Implement request abstract API
    64     def header_accept_language(self):
    72     def header_accept_language(self):
    65         """returns an ordered list of preferred languages"""
    73         """returns an ordered list of preferred languages"""
    66         return ('en',)
    74         return ('en',)
    67 
    75 
    68     def header_if_modified_since(self):
    76     def header_if_modified_since(self):
    79             url = self._url
    87             url = self._url
    80         if includeparams:
    88         if includeparams:
    81             return url
    89             return url
    82         return url.split('?', 1)[0]
    90         return url.split('?', 1)[0]
    83 
    91 
    84     def set_content_type(self, content_type, filename=None, encoding=None):
    92     def get_header(self, header, default=None, raw=True):
    85         """set output content type for this request. An optional filename
    93         """return the value associated with the given input header, raise
    86         may be given
    94         KeyError if the header is not set
    87         """
    95         """
    88         pass
    96         if raw:
    89 
    97             return self._headers_in.getRawHeaders(header, [default])[0]
    90     def set_header(self, header, value, raw=True):
    98         return self._headers_in.getHeader(header, default)
    91         """set an output HTTP header"""
    99 
    92         self._headers[header] = value
   100     ## extend request API to control headers in / out values
    93 
   101     def set_request_header(self, header, value, raw=False):
    94     def add_header(self, header, value):
   102         """set an input HTTP header"""
    95         """set an output HTTP header"""
   103         if isinstance(value, basestring):
    96         self._headers[header] = value # XXX
   104             value = [value]
    97 
   105         if raw:
    98     def remove_header(self, header):
   106             self._headers_in.setRawHeaders(header, value)
    99         """remove an output HTTP header"""
   107         else:
   100         self._headers.pop(header, None)
   108             self._headers_in.setHeader(header, value)
   101 
   109 
   102     def get_header(self, header, default=None):
   110     def get_response_header(self, header, default=None, raw=False):
   103         """return the value associated with the given input header,
   111         """return the value associated with the given input header,
   104         raise KeyError if the header is not set
   112         raise KeyError if the header is not set
   105         """
   113         """
   106         return self._headers.get(header, default)
   114         if raw:
   107 
   115             return self.headers_out.getRawHeaders(header, default)
   108     def set_cookie(self, cookie, key, maxage=300, expires=None):
   116         else:
   109         """set / update a cookie key
   117             return self.headers_out.getHeader(header, default)
   110 
       
   111         by default, cookie will be available for the next 5 minutes
       
   112         """
       
   113         morsel = cookie[key]
       
   114         if maxage is not None:
       
   115             morsel['Max-Age'] = maxage
       
   116         if expires:
       
   117             morsel['expires'] = expires.strftime('%a, %d %b %Y %H:%M:%S %z')
       
   118         # make sure cookie is set on the correct path
       
   119         morsel['path'] = self.base_url_path()
       
   120         self.add_header('Set-Cookie', morsel.OutputString())
       
   121         self.add_header('Cookie', morsel.OutputString())
       
   122 
       
   123     def remove_cookie(self, cookie, key):
       
   124         self.remove_header('Set-Cookie')
       
   125         self.remove_header('Cookie')
       
   126 
   118 
   127     def validate_cache(self):
   119     def validate_cache(self):
   128         pass
   120         pass
   129 
   121 
   130     def build_url_params(self, **kwargs):
   122     def build_url_params(self, **kwargs):