From 2568be2d1b583b657d0180ba71b878b931a5638b Mon Sep 17 00:00:00 2001 From: Peter Brook Date: Fri, 17 Jan 2014 17:25:33 -0800 Subject: [PATCH 1/4] Remove project field from message payload --- raven/base.py | 1 - 1 file changed, 1 deletion(-) diff --git a/raven/base.py b/raven/base.py index 900dfab8f..a4f82a1b1 100644 --- a/raven/base.py +++ b/raven/base.py @@ -364,7 +364,6 @@ def build_msg(self, event_type, data=None, date=None, data['extra'][k] = self.transform(v) # It's important date is added **after** we serialize - data.setdefault('project', self.project) data.setdefault('timestamp', date or datetime.utcnow()) data.setdefault('time_spent', time_spent) data.setdefault('event_id', event_id) From 81e1e230abc9331ff0ee0154cfcf8aa147771cd0 Mon Sep 17 00:00:00 2001 From: Peter Brook Date: Fri, 17 Jan 2014 17:26:27 -0800 Subject: [PATCH 2/4] allow DSNs without password entries --- raven/transport/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raven/transport/base.py b/raven/transport/base.py index b11dc0199..dcca32d43 100644 --- a/raven/transport/base.py +++ b/raven/transport/base.py @@ -53,7 +53,7 @@ def compute_scope(self, url, scope): path = '' project = path_bits[-1] - if not all([netloc, project, url.username, url.password]): + if not all([netloc, project, url.username]): raise ValueError('Invalid Sentry DSN: %r' % url.geturl()) server = '%s://%s%s/api/%s/store/' % ( From cf693fdf78c7b3bf380a1b787bf1dd34f1245dcb Mon Sep 17 00:00:00 2001 From: Peter Brook Date: Fri, 17 Jan 2014 17:27:22 -0800 Subject: [PATCH 3/4] Allow custom headers to be specified so that clients can specify custom Origin: headers --- raven/base.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/raven/base.py b/raven/base.py index a4f82a1b1..27ee8c94d 100644 --- a/raven/base.py +++ b/raven/base.py @@ -179,6 +179,7 @@ def __init__(self, dsn=None, **options): context = {'sys.argv': sys.argv[:]} self.extra = context self.tags = o.get('tags') or {} + self.headers = o.get('headers') or {} self.module_cache = ModuleProxyCache() @@ -586,6 +587,7 @@ def send_encoded(self, message, auth_header=None, **kwargs): 'X-Sentry-Auth': auth_header, 'Content-Type': 'application/octet-stream', } + headers.update(self.headers) self.send_remote(url=url, data=message, headers=headers) From a0301d5407327ca301e75daad37ebd60f51f6e47 Mon Sep 17 00:00:00 2001 From: Peter Brook Date: Fri, 17 Jan 2014 17:50:22 -0800 Subject: [PATCH 4/4] gracefully handle the edge case where a class has an invalid __repr__ function. This is error reporting code after all, a crash here isn't very helpful --- raven/utils/serializer/manager.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/raven/utils/serializer/manager.py b/raven/utils/serializer/manager.py index b5fa6c880..600eeacdb 100644 --- a/raven/utils/serializer/manager.py +++ b/raven/utils/serializer/manager.py @@ -73,7 +73,12 @@ def transform(self, value, **kwargs): # if all else fails, lets use the repr of the object try: - return repr(value) + try: + return repr(value) + except TypeError as e: + typ = type(value) + logger.error("Type {0} has an invalid __repr__ method".format(typ),exc_info=True) + return six.text_type(typ) except Exception as e: logger.exception(e) # It's common case that a model's __unicode__ definition may try to query the database