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): |