diff --git a/tests/conftest.py b/tests/conftest.py deleted file mode 100644 index 7a18037..0000000 --- a/tests/conftest.py +++ /dev/null @@ -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) diff --git a/tests/storage/test_http.py b/tests/storage/test_http.py index 3737a00..814a366 100644 --- a/tests/storage/test_http.py +++ b/tests/storage/test_http.py @@ -44,14 +44,16 @@ class TestHttpStorage(object): '\n'.join([b'BEGIN:VCALENDAR'] + items + [b'END:VCALENDAR']) ] * 2 - def get(*a, **kw): + def get(method, url, *a, **kw): + assert method == 'GET' + assert url == collection_url r = Response() r.status_code = 200 assert responses r._content = responses.pop() return r - monkeypatch.setattr('requests.get', get) + monkeypatch.setattr('requests.request', get) s = HttpStorage(url=collection_url) diff --git a/vdirsyncer/storage/dav.py b/vdirsyncer/storage/dav.py index 9367044..1378684 100644 --- a/vdirsyncer/storage/dav.py +++ b/vdirsyncer/storage/dav.py @@ -9,8 +9,9 @@ from .base import Item from .http import HttpStorageBase -import vdirsyncer.exceptions as exceptions -import vdirsyncer.log as log +from .. import exceptions +from .. import log +from ..utils import request import requests import datetime import urlparse @@ -93,8 +94,8 @@ class DavStorage(HttpStorageBase): if self._session is None: self._session = requests.session() url = self.parsed_url.scheme + '://' + self.parsed_url.netloc + path - return self._session.request(method, url, data=data, headers=headers, - **self._settings) + return request(method, url, data=data, headers=headers, + session=self._session, **self._settings) @staticmethod def _check_response(response): diff --git a/vdirsyncer/storage/http.py b/vdirsyncer/storage/http.py index af30a3e..bc6e86f 100644 --- a/vdirsyncer/storage/http.py +++ b/vdirsyncer/storage/http.py @@ -12,7 +12,7 @@ import requests import urlparse import hashlib 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): @@ -113,7 +113,7 @@ class HttpStorage(HttpStorageBase): self._items = {} def list(self): - r = requests.get(self.url, **self._settings) + r = request('GET', self.url, **self._settings) r.raise_for_status() self._items.clear() for i, item in enumerate(split_collection(r.text)): diff --git a/vdirsyncer/utils.py b/vdirsyncer/utils.py index 67cdfd1..4aafd4a 100644 --- a/vdirsyncer/utils.py +++ b/vdirsyncer/utils.py @@ -23,6 +23,9 @@ except ImportError: keyring = None +import requests + + password_key_prefix = 'vdirsyncer:' @@ -151,3 +154,25 @@ def get_password(username, resource): username, 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