Skip to content

Commit

Permalink
Merge pull request getsentry#166 from jaap3/py25
Browse files Browse the repository at this point in the history
Python 2.5 compatibility
  • Loading branch information
dcramer committed Aug 22, 2012
2 parents ded0b54 + 59adc16 commit 05c58ad
Show file tree
Hide file tree
Showing 13 changed files with 50 additions and 28 deletions.
2 changes: 1 addition & 1 deletion raven/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import urllib2
import uuid
import warnings
from urlparse import urlparse

import raven
from raven.conf import defaults
Expand All @@ -27,6 +26,7 @@
from raven.utils.serializer import transform
from raven.utils.stacks import get_stack_info, iter_stack_frames, \
get_culprit
from raven.utils.urlparse import urlparse
from raven.transport.registry import TransportRegistry, default_transports

__all__ = ('Client',)
Expand Down
4 changes: 2 additions & 2 deletions raven/conf/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"""

import logging
import urlparse
from raven.utils.urlparse import urlparse


__all__ = ('load', 'setup_logging')
Expand Down Expand Up @@ -36,7 +36,7 @@ def load(dsn, scope=None, transport_registry=None):
from raven.transport import TransportRegistry, default_transports
transport_registry = TransportRegistry(default_transports)

url = urlparse.urlparse(dsn)
url = urlparse(dsn)

if not transport_registry.supported_scheme(url.scheme):
raise ValueError('Unsupported Sentry DSN scheme: %r' % url.scheme)
Expand Down
6 changes: 4 additions & 2 deletions raven/contrib/django/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
__all__ = ('PromiseSerializer',)


@register
class PromiseSerializer(Serializer):
types = (Promise,)

Expand All @@ -28,7 +27,6 @@ def serialize(self, value):
return self.recurse(value)


@register
class QuerySetSerializer(Serializer):
types = (QuerySet,)

Expand All @@ -37,3 +35,7 @@ def serialize(self, value):
if value.model:
return u'<%s: model=%s>' % (qs_name, value.model.__name__)
return u'<%s: (Unbound)>' % (qs_name,)


register(PromiseSerializer)
register(QuerySetSerializer)
2 changes: 2 additions & 0 deletions raven/transport/registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
TornadoHTTPTransport, UDPTransport
from raven.transport.exceptions import DuplicateScheme
from raven.transport.threaded import ThreadedHTTPTransport
from raven.utils import urlparse


class TransportRegistry(object):
Expand All @@ -28,6 +29,7 @@ def register_scheme(self, scheme, cls):
if scheme in self._schemes:
raise DuplicateScheme()

urlparse.register_scheme(scheme)
# TODO (vng): verify the interface of the new class
self._schemes[scheme] = cls

Expand Down
22 changes: 12 additions & 10 deletions raven/utils/serializer/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ def recurse(self, value):
return self.manager.transform(value)


@register
class IterableSerializer(Serializer):
types = (tuple, list, set, frozenset)

Expand All @@ -60,39 +59,34 @@ class value_type(list):
return value_type(self.recurse(o) for o in value)


@register
class UUIDSerializer(Serializer):
types = (UUID,)

def serialize(self, value):
return repr(value)


@register
class DictSerializer(Serializer):
types = (dict,)

def serialize(self, value):
return dict((to_string(k), self.recurse(v)) for k, v in value.iteritems())


@register
class UnicodeSerializer(Serializer):
types = (unicode,)

def serialize(self, value):
return to_unicode(value)


@register
class StringSerializer(Serializer):
types = (str,)

def serialize(self, value):
return to_string(value)


@register
class TypeSerializer(Serializer):
types = (ClassType, TypeType,)

Expand All @@ -103,33 +97,41 @@ def serialize(self, value):
return self.recurse(value.__sentry__())


@register
class BooleanSerializer(Serializer):
types = (bool,)

def serialize(self, value):
return bool(value)


@register
class FloatSerializer(Serializer):
types = (float,)

def serialize(self, value):
return float(value)


@register
class IntegerSerializer(Serializer):
types = (int,)

def serialize(self, value):
return int(value)


@register
class LongSerializer(Serializer):
types = (long,)

def serialize(self, value):
return long(value)


register(IterableSerializer)
register(UUIDSerializer)
register(DictSerializer)
register(UnicodeSerializer)
register(StringSerializer)
register(TypeSerializer)
register(BooleanSerializer)
register(FloatSerializer)
register(IntegerSerializer)
register(LongSerializer)
12 changes: 12 additions & 0 deletions raven/utils/urlparse.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from __future__ import absolute_import
import urlparse as _urlparse


def register_scheme(scheme):
for method in filter(lambda s: s.startswith('uses_'), dir(_urlparse)):
uses = getattr(_urlparse, method)
if scheme not in uses:
uses.append(scheme)


urlparse = _urlparse.urlparse
10 changes: 0 additions & 10 deletions runtests.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,8 @@

where_am_i = dirname(abspath(__file__))

sys.path.insert(0, where_am_i)

logging.getLogger('sentry').addHandler(logging.StreamHandler())

# adding eggs to path
files = listdir(where_am_i)

for file in files:
name, extension = splitext(file)
if extension == ".egg":
sys.path.insert(0, file)


from django.conf import settings

Expand Down
1 change: 1 addition & 0 deletions tests/config/tests.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from __future__ import with_statement
import logging
import mock
from raven.conf import load, setup_logging
Expand Down
1 change: 1 addition & 0 deletions tests/contrib/django/tests.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-

from __future__ import absolute_import
from __future__ import with_statement

import datetime
import django
Expand Down
8 changes: 7 additions & 1 deletion tests/contrib/zerorpc/tests.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
import sys
# XXX: zeropc does not work under Python < 2.6 or pypy
if (sys.version_info < (2, 6, 0) or '__pypy__' in sys.builtin_module_names):
from nose.plugins.skip import SkipTest
raise SkipTest

import gevent
import os
import random
Expand Down Expand Up @@ -45,7 +51,7 @@ def setUp(self):
def test_zerorpc_middleware(self):
try:
self._client.choice([])
except zerorpc.exceptions.RemoteError as ex:
except zerorpc.exceptions.RemoteError, ex:
self.assertEqual(ex.name, 'IndexError')
self.assertEqual(len(self._sentry.events), 1)
exc = self._sentry.events[0]['sentry.interfaces.Exception']
Expand Down
1 change: 1 addition & 0 deletions tests/handlers/logbook/tests.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from __future__ import with_statement
import logbook
from unittest2 import TestCase
from raven.base import Client
Expand Down
7 changes: 6 additions & 1 deletion tests/middleware/tests.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
from __future__ import with_statement
import logging
import sys
from unittest2 import TestCase
from raven.base import Client
from raven.middleware import Sentry

# XXX: webob does not work under Python < 2.6
if (sys.version_info < (2, 6, 0)):
from nose.plugins.skip import SkipTest
raise SkipTest
import webob


Expand Down
2 changes: 1 addition & 1 deletion tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# and then run "tox" from this directory.

[tox]
envlist = py26, py27, pypy
envlist = py25, py26, py27, pypy

[testenv]
commands = python setup.py test

0 comments on commit 05c58ad

Please sign in to comment.