Projet

Général

Profil

0001-persist-cookies-on-a-connector-instance-28643.patch

Emmanuel Cazenave, 13 décembre 2018 18:27

Télécharger (3,85 ko)

Voir les différences:

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