Skip to content
This repository was archived by the owner on Oct 23, 2023. It is now read-only.

By default don't import 3rd-party Python modules, only stdlib ones. … #857

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
23 changes: 23 additions & 0 deletions CHANGES
Original file line number Diff line number Diff line change
Expand Up @@ -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
--------------

Expand Down
9 changes: 9 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
8 changes: 0 additions & 8 deletions raven/transport/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
13 changes: 0 additions & 13 deletions raven/transport/registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down Expand Up @@ -66,10 +59,4 @@ def get_transport_cls(self, scheme):
default_transports = [
HTTPTransport,
ThreadedHTTPTransport,
GeventedHTTPTransport,
TwistedHTTPTransport,
RequestsHTTPTransport,
ThreadedRequestsHTTPTransport,
TornadoHTTPTransport,
EventletHTTPTransport,
]
2 changes: 1 addition & 1 deletion raven/transport/threaded_requests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down
2 changes: 1 addition & 1 deletion tests/base/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion tests/contrib/django/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion tests/transport/gevent/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down
7 changes: 4 additions & 3 deletions tests/transport/requests/test_threaded_requests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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')

Expand Down
4 changes: 3 additions & 1 deletion tests/transport/requests/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion tests/transport/threaded/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
10 changes: 7 additions & 3 deletions tests/transport/tornado/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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")

Expand All @@ -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')
Expand All @@ -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)
Expand Down