0001-persist-cookies-on-a-connector-instance-28643.patch
passerelle/base/models.py | ||
---|---|---|
152 | 152 | |
153 | 153 |
@property |
154 | 154 |
def requests(self): |
155 |
return passerelle.utils.Request(resource=self, logger=self.logger) |
|
155 |
if getattr(self, '_requests', None) is None: |
|
156 |
self._requests = passerelle.utils.Request(resource=self, logger=self.logger) |
|
157 |
return self._requests |
|
156 | 158 | |
157 | 159 |
@property |
158 | 160 |
def logging_parameters(self): |
passerelle/utils/__init__.py | ||
---|---|---|
215 | 215 |
if 'timeout' not in kwargs: |
216 | 216 |
kwargs['timeout'] = settings.REQUESTS_TIMEOUT |
217 | 217 | |
218 |
if self.resource and hasattr(self.resource, 'cookiejar'): |
|
219 |
# use cookies that will last the whole endpoint duration |
|
220 |
self.cookies = self.resource.cookiejar |
|
221 | ||
222 | 218 |
response = super(Request, self).request(method, url, **kwargs) |
223 | 219 | |
224 | 220 |
if method == 'GET' and cache_duration and (response.status_code // 100 == 2): |
passerelle/views.py | ||
---|---|---|
22 | 22 |
from django.utils.encoding import force_text |
23 | 23 |
from django.forms.models import modelform_factory |
24 | 24 |
from django.forms.widgets import ClearableFileInput |
25 |
import requests |
|
26 | 25 | |
27 | 26 |
from dateutil import parser as date_parser |
28 | 27 |
from jsonschema import validate, ValidationError |
... | ... | |
305 | 304 |
def dispatch(self, request, *args, **kwargs): |
306 | 305 |
self.init_stuff(request, *args, **kwargs) |
307 | 306 |
connector = self.get_object() |
308 |
connector.cookiejar = requests.cookies.cookiejar_from_dict({}) |
|
309 | 307 |
self.endpoint = None |
310 | 308 |
endpoints = [] |
311 | 309 |
for name, method in inspect.getmembers(connector): |
tests/test_requests.py | ||
---|---|---|
6 | 6 |
from httmock import urlmatch, HTTMock, response |
7 | 7 | |
8 | 8 |
from django.test import override_settings |
9 |
import requests |
|
10 | 9 | |
11 | 10 |
from passerelle.utils import Request, CaseInsensitiveDict |
12 | 11 |
from passerelle.utils.http_authenticators import HawkAuth |
... | ... | |
328 | 327 |
assert mocked_get.call_args[1]['timeout'] == 42 |
329 | 328 |
Request(logger=logger).get('http://example.net/whatever', timeout=None) |
330 | 329 |
assert mocked_get.call_args[1]['timeout'] is None |
331 | ||
332 | ||
333 |
def test_requests_cookies(httpbin): |
|
334 |
resource = MockResource() |
|
335 |
resource.cookiejar = requests.cookies.cookiejar_from_dict({}) |
|
336 |
logger = logging.getLogger('requests') |
|
337 |
request = Request(resource=resource, logger=logger) |
|
338 | ||
339 |
request.get(httpbin.url + '/cookies/set?foo=bar') |
|
340 | ||
341 |
# cookies are sent back |
|
342 |
response = request.get(httpbin.url + '/get') |
|
343 |
assert response.request.headers['Cookie'] == 'foo=bar' |
|
344 | ||
345 |
# cookies sent back even with a new Request obj |
|
346 |
request = Request(resource=resource, logger=logger) |
|
347 |
response = request.get(httpbin.url + '/get') |
|
348 |
assert response.request.headers['Cookie'] == 'foo=bar' |
|
349 |
- |