Skip to content

Commit

Permalink
Merge pull request #62 from rollbar/fix-issue-60
Browse files Browse the repository at this point in the history
Use scrub mechanism to clean up odd int/long/floats
  • Loading branch information
coryvirok committed May 19, 2015
2 parents 5b793dc + 80704ed commit 2a02f63
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 0 deletions.
8 changes: 8 additions & 0 deletions rollbar/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import inspect
import json
import logging
import math
import numbers
import os
import socket
import sys
Expand Down Expand Up @@ -871,6 +873,12 @@ def _scrub(obj, k=None):
return dict((_k, _scrub(v, _k)) for _k, v in obj.items())
elif isinstance(obj, list):
return [_scrub(x, k) for x in obj]
elif isinstance(obj, float) and math.isnan(obj):
return 'NaN'
elif isinstance(obj, float) and math.isinf(obj):
return 'Inf'
elif isinstance(obj, (numbers.Integral, float)) and str(obj + 0) != str(obj):
return str(obj)
else:
return obj

Expand Down
19 changes: 19 additions & 0 deletions rollbar/test/test_rollbar.py
Original file line number Diff line number Diff line change
Expand Up @@ -684,6 +684,25 @@ def _raise():

self.assertEqual('*********', payload['data']['body']['trace']['frames'][-1]['locals']['password'])

@mock.patch('rollbar.send_payload')
def test_scrub_nans(self, send_payload):
def _raise():
infinity = float('Inf')
not_a_number = float('NaN')
raise Exception()

try:
_raise()
except:
rollbar.report_exc_info()

self.assertEqual(send_payload.called, True)

payload = send_payload.call_args[0][0]

self.assertEqual('Inf', payload['data']['body']['trace']['frames'][-1]['locals']['infinity'])
self.assertEqual('NaN', payload['data']['body']['trace']['frames'][-1]['locals']['not_a_number'])

@mock.patch('rollbar.send_payload')
def test_cannot_scrub_local_ref(self, send_payload):
"""
Expand Down

0 comments on commit 2a02f63

Please sign in to comment.