diff --git a/CHANGES b/CHANGES index 507b4e1d8..965b391f2 100644 --- a/CHANGES +++ b/CHANGES @@ -61,6 +61,29 @@ Version 5.27.0 * Added transaction-based culprits for Celery, Django, and Flask. * Fixed an issue where ``ignore_exceptions`` wasn't respected. +* Raven transports that have dependencies outside Python stdlib are no longer + imported by default, and must now be explicitly imported by the application. + The transports no longer imported by default are: + - raven.transport.eventlet.EventletHTTPTransport + - raven.transport.gevent.GeventedHTTPTransport + - raven.transport.requests.RequestsHTTPTransport + - raven.transport.threaded_requests.ThreadedRequestsHTTPTransport + - raven.transport.twisted.TwistedHTTPTransport + - raven.transport.tornado.TornadoHTTPTransport + + If you really need to have those transports available, you need to explicitly + import them and create a raven.Client() object passing a transport parameter. + Example: + + ```python + from raven.transport.threaded_requests import ThreadedRequestsHTTPTransport + from raven import Client + + client = Client(dsn="threaded+requests+http://some_username:some_password@localhost:8143/1", + transport=ThreadedRequestsHTTPTransport) + + ``` + Version 5.26.0 -------------- diff --git a/conftest.py b/conftest.py index 1e330abc1..58d8c8347 100644 --- a/conftest.py +++ b/conftest.py @@ -4,6 +4,15 @@ import pytest import sys +from raven.transport.eventlet import EventletHTTPTransport +from raven.transport.gevent import GeventedHTTPTransport +from raven.transport.requests import RequestsHTTPTransport +from raven.transport.twisted import TwistedHTTPTransport +from raven.transport.tornado import TornadoHTTPTransport +from raven.transport.threaded_requests import ThreadedRequestsHTTPTransport +from raven.base import Client + + collect_ignore = [] if sys.version_info[0] > 2: if sys.version_info[1] < 3: diff --git a/raven/transport/__init__.py b/raven/transport/__init__.py index 3549c7b6a..0ab31e7fd 100644 --- a/raven/transport/__init__.py +++ b/raven/transport/__init__.py @@ -10,12 +10,4 @@ from __future__ import absolute_import from raven.transport.base import * # NOQA -from raven.transport.eventlet import * # NOQA -from raven.transport.exceptions import * # NOQA -from raven.transport.gevent import * # NOQA -from raven.transport.http import * # NOQA -from raven.transport.requests import * # NOQA from raven.transport.registry import * # NOQA -from raven.transport.twisted import * # NOQA -from raven.transport.threaded import * # NOQA -from raven.transport.tornado import * # NOQA diff --git a/raven/transport/registry.py b/raven/transport/registry.py index 9f5d3c576..d3dc888a9 100644 --- a/raven/transport/registry.py +++ b/raven/transport/registry.py @@ -7,16 +7,9 @@ """ from __future__ import absolute_import -# TODO(dcramer): we really should need to import all of these by default -from raven.transport.eventlet import EventletHTTPTransport from raven.transport.exceptions import DuplicateScheme from raven.transport.http import HTTPTransport -from raven.transport.gevent import GeventedHTTPTransport -from raven.transport.requests import RequestsHTTPTransport from raven.transport.threaded import ThreadedHTTPTransport -from raven.transport.threaded_requests import ThreadedRequestsHTTPTransport -from raven.transport.twisted import TwistedHTTPTransport -from raven.transport.tornado import TornadoHTTPTransport from raven.utils import urlparse @@ -66,10 +59,4 @@ def get_transport_cls(self, scheme): default_transports = [ HTTPTransport, ThreadedHTTPTransport, - GeventedHTTPTransport, - TwistedHTTPTransport, - RequestsHTTPTransport, - ThreadedRequestsHTTPTransport, - TornadoHTTPTransport, - EventletHTTPTransport, ] diff --git a/raven/transport/threaded_requests.py b/raven/transport/threaded_requests.py index cdc05a34d..93f46f735 100644 --- a/raven/transport/threaded_requests.py +++ b/raven/transport/threaded_requests.py @@ -8,7 +8,7 @@ from __future__ import absolute_import from raven.transport.base import AsyncTransport -from raven.transport import RequestsHTTPTransport +from raven.transport.requests import RequestsHTTPTransport from raven.transport.threaded import AsyncWorker diff --git a/tests/base/tests.py b/tests/base/tests.py index 5644db03d..21f94b5c5 100644 --- a/tests/base/tests.py +++ b/tests/base/tests.py @@ -11,7 +11,7 @@ from raven.utils.compat import PY2 from raven.base import Client, ClientState from raven.exceptions import RateLimited -from raven.transport import AsyncTransport +from raven.transport.base import AsyncTransport from raven.transport.http import HTTPTransport from raven.utils.stacks import iter_stack_frames from raven.utils.testutils import TestCase diff --git a/tests/contrib/django/tests.py b/tests/contrib/django/tests.py index 0adf7c6d1..04bb978c3 100644 --- a/tests/contrib/django/tests.py +++ b/tests/contrib/django/tests.py @@ -34,7 +34,7 @@ from raven.contrib.django.middleware.wsgi import Sentry from raven.contrib.django.templatetags.raven import sentry_public_dsn from raven.contrib.django.views import is_valid_origin -from raven.transport import HTTPTransport +from raven.transport.http import HTTPTransport from raven.utils.serializer import transform from .models import MyTestModel diff --git a/tests/transport/gevent/tests.py b/tests/transport/gevent/tests.py index b31efe660..cb1c356e4 100644 --- a/tests/transport/gevent/tests.py +++ b/tests/transport/gevent/tests.py @@ -22,7 +22,8 @@ def setUp(self): gevent.monkey.patch_time() self.addCleanup(reload, time) self.client = Client( - dsn="gevent+http://some_username:some_password@localhost:8143/1", + dsn="http://some_username:some_password@localhost:8143/1", + transport=GeventedHTTPTransport, ) @mock.patch.object(GeventedHTTPTransport, '_done') diff --git a/tests/transport/requests/test_threaded_requests.py b/tests/transport/requests/test_threaded_requests.py index 2147962ba..c54ea6cfa 100644 --- a/tests/transport/requests/test_threaded_requests.py +++ b/tests/transport/requests/test_threaded_requests.py @@ -9,7 +9,7 @@ class DummyThreadedScheme(ThreadedRequestsHTTPTransport): def __init__(self, *args, **kwargs): - super(ThreadedRequestsHTTPTransport, self).__init__(*args, **kwargs) + super(DummyThreadedScheme, self).__init__(*args, **kwargs) self.events = [] self.send_delay = 0 @@ -24,9 +24,10 @@ def send_sync(self, url, data, headers, success_cb, failure_cb): class ThreadedTransportTest(TestCase): def setUp(self): self.url = "threaded+requests+http://some_username:some_password@localhost:8143/1" - self.client = Client(dsn=self.url) + self.client = Client(dsn=self.url, + transport=ThreadedRequestsHTTPTransport) - @mock.patch('raven.transport.requests.post') + @mock.patch('requests.post') def test_does_send(self, send): self.client.captureMessage(message='foo') diff --git a/tests/transport/requests/tests.py b/tests/transport/requests/tests.py index 97bc48314..871282224 100644 --- a/tests/transport/requests/tests.py +++ b/tests/transport/requests/tests.py @@ -4,15 +4,17 @@ from raven.utils.testutils import TestCase from raven.base import Client +from raven.transport.requests import RequestsHTTPTransport class RequestsTransportTest(TestCase): def setUp(self): self.client = Client( dsn="requests+http://some_username:some_password@localhost:8143/1", + transport=RequestsHTTPTransport, ) - @mock.patch('raven.transport.requests.post') + @mock.patch('requests.post') def test_does_send(self, post): self.client.captureMessage(message='foo') self.assertEqual(post.call_count, 1) diff --git a/tests/transport/threaded/tests.py b/tests/transport/threaded/tests.py index e07e0b073..3ea5d43c0 100644 --- a/tests/transport/threaded/tests.py +++ b/tests/transport/threaded/tests.py @@ -12,7 +12,7 @@ class DummyThreadedScheme(ThreadedHTTPTransport): def __init__(self, *args, **kwargs): - super(ThreadedHTTPTransport, self).__init__(*args, **kwargs) + super(DummyThreadedScheme, self).__init__(*args, **kwargs) self.events = [] self.send_delay = 0 diff --git a/tests/transport/tornado/tests.py b/tests/transport/tornado/tests.py index 351b4d4a4..7fe4273c8 100644 --- a/tests/transport/tornado/tests.py +++ b/tests/transport/tornado/tests.py @@ -4,6 +4,7 @@ from raven.base import Client from tornado import gen, testing, httpclient +from raven.transport.tornado import TornadoHTTPTransport class TornadoTransportTests(testing.AsyncTestCase): @@ -23,7 +24,8 @@ def test_send(self, fake_client): fake = fake_client.return_value raven_client = Client( dsn="tornado+{0}?timeout={1}&verify_ssl={2}&ca_certs={3}". - format(url, timeout, verify_ssl, ca_certs)) + format(url, timeout, verify_ssl, ca_certs), + transport=TornadoHTTPTransport) raven_client.captureMessage(message="test") @@ -43,7 +45,8 @@ def test_send(self, fake_client): @testing.gen_test def test__sending_with_error_calls_error_callback(self): - c = Client(dsn='tornado+http://uver:pass@localhost:46754/1') + c = Client(dsn='http://uver:pass@localhost:46754/1', + transport=TornadoHTTPTransport) with mock.patch.object(Client, '_failed_send') as mock_failed: c.captureMessage(message='test') @@ -53,7 +56,8 @@ def test__sending_with_error_calls_error_callback(self): @testing.gen_test def test__sending_successfully_calls_success_callback(self): - c = Client(dsn='tornado+http://uver:pass@localhost:46754/1') + c = Client(dsn='tornado+http://uver:pass@localhost:46754/1', + transport=TornadoHTTPTransport) with mock.patch.object(Client, '_successful_send') as mock_successful: with mock.patch.object(httpclient.AsyncHTTPClient, 'fetch') as mock_fetch: mock_fetch.return_value = gen.maybe_future(True)