From 0b4465a3004d46f91f242d03c2aee00f19ab43b4 Mon Sep 17 00:00:00 2001 From: Emmanuel Cazenave Date: Thu, 13 Dec 2018 18:26:58 +0100 Subject: [PATCH] persist cookies on a connector instance (#28643) --- passerelle/base/models.py | 4 +++- passerelle/utils/__init__.py | 4 ---- passerelle/views.py | 2 -- tests/test_requests.py | 19 ------------------- 4 files changed, 3 insertions(+), 26 deletions(-) diff --git a/passerelle/base/models.py b/passerelle/base/models.py index 4a15951..ea0c725 100644 --- a/passerelle/base/models.py +++ b/passerelle/base/models.py @@ -152,7 +152,9 @@ class BaseResource(models.Model): @property def requests(self): - return passerelle.utils.Request(resource=self, logger=self.logger) + if getattr(self, '_requests', None) is None: + self._requests = passerelle.utils.Request(resource=self, logger=self.logger) + return self._requests @property def logging_parameters(self): diff --git a/passerelle/utils/__init__.py b/passerelle/utils/__init__.py index 7b3b97e..1a8a244 100644 --- a/passerelle/utils/__init__.py +++ b/passerelle/utils/__init__.py @@ -215,10 +215,6 @@ class Request(RequestSession): if 'timeout' not in kwargs: kwargs['timeout'] = settings.REQUESTS_TIMEOUT - if self.resource and hasattr(self.resource, 'cookiejar'): - # use cookies that will last the whole endpoint duration - self.cookies = self.resource.cookiejar - response = super(Request, self).request(method, url, **kwargs) if method == 'GET' and cache_duration and (response.status_code // 100 == 2): diff --git a/passerelle/views.py b/passerelle/views.py index cf44922..800d53a 100644 --- a/passerelle/views.py +++ b/passerelle/views.py @@ -22,7 +22,6 @@ from django.utils.translation import ugettext_lazy as _ from django.utils.encoding import force_text from django.forms.models import modelform_factory from django.forms.widgets import ClearableFileInput -import requests from dateutil import parser as date_parser from jsonschema import validate, ValidationError @@ -305,7 +304,6 @@ class GenericEndpointView(GenericConnectorMixin, SingleObjectMixin, View): def dispatch(self, request, *args, **kwargs): self.init_stuff(request, *args, **kwargs) connector = self.get_object() - connector.cookiejar = requests.cookies.cookiejar_from_dict({}) self.endpoint = None endpoints = [] for name, method in inspect.getmembers(connector): diff --git a/tests/test_requests.py b/tests/test_requests.py index 76d099f..60bba9c 100644 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -6,7 +6,6 @@ import mock from httmock import urlmatch, HTTMock, response from django.test import override_settings -import requests from passerelle.utils import Request, CaseInsensitiveDict from passerelle.utils.http_authenticators import HawkAuth @@ -328,21 +327,3 @@ def test_timeout(mocked_get, caplog, endpoint_response): assert mocked_get.call_args[1]['timeout'] == 42 Request(logger=logger).get('http://example.net/whatever', timeout=None) assert mocked_get.call_args[1]['timeout'] is None - - -def test_requests_cookies(httpbin): - resource = MockResource() - resource.cookiejar = requests.cookies.cookiejar_from_dict({}) - logger = logging.getLogger('requests') - request = Request(resource=resource, logger=logger) - - request.get(httpbin.url + '/cookies/set?foo=bar') - - # cookies are sent back - response = request.get(httpbin.url + '/get') - assert response.request.headers['Cookie'] == 'foo=bar' - - # cookies sent back even with a new Request obj - request = Request(resource=resource, logger=logger) - response = request.get(httpbin.url + '/get') - assert response.request.headers['Cookie'] == 'foo=bar' -- 2.19.2