Some rewrites to requests handling

Conflicts:
	tests/storage/test_http.py
	vdirsyncer/storage/dav.py
This commit is contained in:
Markus Unterwaditzer 2014-04-11 15:25:40 +02:00
parent 91c3114b78
commit 633a7de28c
5 changed files with 36 additions and 34 deletions

View file

@ -1,26 +0,0 @@
# -*- coding: utf-8 -*-
'''
tests.conftest
~~~~~~~~~~~~~~
:copyright: (c) 2014 Markus Unterwaditzer
:license: MIT, see LICENSE for more details.
'''
import pytest
@pytest.fixture(autouse=True)
def requests_mock(monkeypatch):
'''It is easier than setting up the logging module!'''
import requests.sessions
old_func = requests.sessions.Session.request
def mock_request(self, method, url, data=None, headers=None, **kw):
print(method)
print(url)
print(data)
print(headers)
r = old_func(self, method, url, data=data, headers=headers, **kw)
print(r.status_code)
print(r.text)
return r
monkeypatch.setattr('requests.sessions.Session.request', mock_request)

View file

@ -44,14 +44,16 @@ class TestHttpStorage(object):
'\n'.join([b'BEGIN:VCALENDAR'] + items + [b'END:VCALENDAR']) '\n'.join([b'BEGIN:VCALENDAR'] + items + [b'END:VCALENDAR'])
] * 2 ] * 2
def get(*a, **kw): def get(method, url, *a, **kw):
assert method == 'GET'
assert url == collection_url
r = Response() r = Response()
r.status_code = 200 r.status_code = 200
assert responses assert responses
r._content = responses.pop() r._content = responses.pop()
return r return r
monkeypatch.setattr('requests.get', get) monkeypatch.setattr('requests.request', get)
s = HttpStorage(url=collection_url) s = HttpStorage(url=collection_url)

View file

@ -9,8 +9,9 @@
from .base import Item from .base import Item
from .http import HttpStorageBase from .http import HttpStorageBase
import vdirsyncer.exceptions as exceptions from .. import exceptions
import vdirsyncer.log as log from .. import log
from ..utils import request
import requests import requests
import datetime import datetime
import urlparse import urlparse
@ -93,8 +94,8 @@ class DavStorage(HttpStorageBase):
if self._session is None: if self._session is None:
self._session = requests.session() self._session = requests.session()
url = self.parsed_url.scheme + '://' + self.parsed_url.netloc + path url = self.parsed_url.scheme + '://' + self.parsed_url.netloc + path
return self._session.request(method, url, data=data, headers=headers, return request(method, url, data=data, headers=headers,
**self._settings) session=self._session, **self._settings)
@staticmethod @staticmethod
def _check_response(response): def _check_response(response):

View file

@ -12,7 +12,7 @@ import requests
import urlparse import urlparse
import hashlib import hashlib
from .base import Storage, Item from .base import Storage, Item
from vdirsyncer.utils import expand_path, get_password from vdirsyncer.utils import expand_path, get_password, request
def split_collection(text): def split_collection(text):
@ -113,7 +113,7 @@ class HttpStorage(HttpStorageBase):
self._items = {} self._items = {}
def list(self): def list(self):
r = requests.get(self.url, **self._settings) r = request('GET', self.url, **self._settings)
r.raise_for_status() r.raise_for_status()
self._items.clear() self._items.clear()
for i, item in enumerate(split_collection(r.text)): for i, item in enumerate(split_collection(r.text)):

View file

@ -23,6 +23,9 @@ except ImportError:
keyring = None keyring = None
import requests
password_key_prefix = 'vdirsyncer:' password_key_prefix = 'vdirsyncer:'
@ -151,3 +154,25 @@ def get_password(username, resource):
username, password) username, password)
return password return password
def request(method, url, data=None, headers=None, auth=None, verify=None,
session=None):
'''wrapper method for requests, to ease logging and mocking'''
logger = vdirsyncer.log.get('utils')
if session is None:
func = requests.request
else:
func = session.request
logger.debug(u'{} {}'.format(method, url))
logger.debug(headers)
logger.debug(data)
logger.debug('Sending request...')
r = func(method, url, data=data, headers=headers, auth=auth, verify=verify)
logger.debug(r.status_code)
logger.debug(r.headers)
logger.debug(r.content)
return r