From 304faee8b1a986deceb7d64084c4df5df45a51e8 Mon Sep 17 00:00:00 2001 From: David Cramer Date: Mon, 6 Jul 2015 18:25:50 -0700 Subject: [PATCH] Remove aiohttp --- CHANGES | 1 + docs/integrations/index.rst | 1 - docs/transports/index.rst | 11 ++--- raven/transport/__init__.py | 4 -- raven/transport/aiohttp.py | 80 ------------------------------------- raven/transport/registry.py | 7 ---- setup.py | 8 +--- 7 files changed, 8 insertions(+), 104 deletions(-) delete mode 100644 raven/transport/aiohttp.py diff --git a/CHANGES b/CHANGES index 088dc2a9..eb452b8f 100644 --- a/CHANGES +++ b/CHANGES @@ -5,6 +5,7 @@ Version 5.4.0 * ``raven.conf.load`` has been removed. * Upstream-related configuration (such as url, project_id, and keys) is now contained in ``RemoteConfig`` attached to ``Client.remote`` +* The ``aiohttp`` transport has been moved to ``raven-aiohttp`` package. Version 5.3.1 ------------- diff --git a/docs/integrations/index.rst b/docs/integrations/index.rst index af35dbb7..bfdefe7a 100644 --- a/docs/integrations/index.rst +++ b/docs/integrations/index.rst @@ -7,7 +7,6 @@ Integrations .. toctree:: :maxdepth: 2 - aiohttp asyncio bottle celery diff --git a/docs/transports/index.rst b/docs/transports/index.rst index e568478c..98c68d21 100644 --- a/docs/transports/index.rst +++ b/docs/transports/index.rst @@ -41,11 +41,6 @@ Builtin Transports A synchronous blocking transport. -.. data:: sentry.transport.aiohttp.AioHttpTransport - - Should only be used within a :pep:`3156` compatible event loops - (*asyncio* itself and others). - .. data:: sentry.transport.eventlet.EventletHTTPTransport Should only be used within an Eventlet IO loop. @@ -65,3 +60,9 @@ Builtin Transports .. data:: sentry.transport.twisted.TwistedHTTPTransport Should only be used within a Twisted event loop. + + +Other Transports +---------------- + +- `aiohttp `_ diff --git a/raven/transport/__init__.py b/raven/transport/__init__.py index d5358530..3549c7b6 100644 --- a/raven/transport/__init__.py +++ b/raven/transport/__init__.py @@ -8,7 +8,6 @@ raven.transport # TODO: deprecate this namespace and force non-default (sync + threaded) to # manually import/register transports somehow from __future__ import absolute_import -import sys from raven.transport.base import * # NOQA from raven.transport.eventlet import * # NOQA @@ -20,6 +19,3 @@ from raven.transport.registry import * # NOQA from raven.transport.twisted import * # NOQA from raven.transport.threaded import * # NOQA from raven.transport.tornado import * # NOQA - -if sys.version_info >= (3, 3): - from raven.transport.aiohttp import * # NOQA diff --git a/raven/transport/aiohttp.py b/raven/transport/aiohttp.py deleted file mode 100644 index b14404ad..00000000 --- a/raven/transport/aiohttp.py +++ /dev/null @@ -1,80 +0,0 @@ -""" -raven.transport.aiohttp -~~~~~~~~~~~~~~~~~~~~~~~~ - -:copyright: (c) 2010-2014 by the Sentry Team, see AUTHORS for more details. -:license: BSD, see LICENSE for more details. -""" -# Skip flake8, python2 version doesn't recognize `yield from` statement -# flake8: noqa -from __future__ import absolute_import - -from raven.exceptions import APIError, RateLimited -from raven.transport.base import AsyncTransport -from raven.transport.http import HTTPTransport -from raven.conf import defaults - -import socket - -try: - import aiohttp - import asyncio - has_aiohttp = True -except: - has_aiohttp = False - - -class AioHttpTransport(AsyncTransport, HTTPTransport): - - scheme = ['aiohttp+http', 'aiohttp+https'] - - def __init__(self, parsed_url, *, verify_ssl=True, resolve=True, - timeout=defaults.TIMEOUT, - keepalive=True, family=socket.AF_INET, loop=None): - if not has_aiohttp: - raise ImportError('AioHttpTransport requires asyncio and aiohttp.') - - if loop is None: - loop = asyncio.get_event_loop() - self._loop = loop - - super().__init__(parsed_url, timeout, verify_ssl) - - if keepalive: - self._connector = aiohttp.TCPConnector(verify_ssl=verify_ssl, - resolve=resolve, - family=family, - loop=loop) - else: - self._connector = None - - def async_send(self, data, headers, success_cb, failure_cb): - @asyncio.coroutine - def f(): - try: - resp = yield from asyncio.wait_for( - aiohttp.request('POST', - self._url, data=data, - headers=headers, - connector=self._connector, - loop=self._loop), - self.timeout, - loop=self._loop) - yield from resp.release() - code = resp.status - if code != 200: - msg = resp.headers.get('x-sentry-error') - if code == 429: - try: - retry_after = int(resp.headers.get('retry-after')) - except (ValueError, TypeError): - retry_after = 0 - failure_cb(RateLimited(msg, retry_after)) - else: - failure_cb(APIError(msg, code)) - else: - success_cb() - except Exception as exc: - failure_cb(exc) - - asyncio.async(f(), loop=self._loop) diff --git a/raven/transport/registry.py b/raven/transport/registry.py index 6c5f3bf5..30a90c31 100644 --- a/raven/transport/registry.py +++ b/raven/transport/registry.py @@ -6,7 +6,6 @@ raven.transport.registry :license: BSD, see LICENSE for more details. """ from __future__ import absolute_import -import sys # TODO(dcramer): we really should need to import all of these by default from raven.transport.eventlet import EventletHTTPTransport @@ -20,9 +19,6 @@ from raven.transport.twisted import TwistedHTTPTransport from raven.transport.tornado import TornadoHTTPTransport from raven.utils import urlparse -if sys.version_info >= (3, 3): - from raven.transport.aiohttp import AioHttpTransport - class TransportRegistry(object): def __init__(self, transports=None): @@ -85,6 +81,3 @@ default_transports = [ TornadoHTTPTransport, EventletHTTPTransport, ] - -if sys.version_info >= (3, 3): - default_transports += [AioHttpTransport] diff --git a/setup.py b/setup.py index 93c0fc6f..b6aaaaa9 100755 --- a/setup.py +++ b/setup.py @@ -52,12 +52,6 @@ if sys.version_info[0] == 3: unittest2_requires = [] webpy_tests_requires = [] -if sys.version_info >= (3, 3): - aiohttp_requires = ['aiohttp'] -else: - aiohttp_requires = [] - - tests_require = [ 'bottle', 'celery>=2.5', @@ -77,7 +71,7 @@ tests_require = [ 'webob', 'webtest', 'anyjson', -] + (aiohttp_requires + flask_requires + flask_tests_requires + +] + (flask_requires + flask_tests_requires + unittest2_requires + webpy_tests_requires)