Hello community,
here is the log from the commit of package python-rollbar for
openSUSE:Leap:15.2 checked in at 2020-04-18 18:41:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/python-rollbar (Old)
and /work/SRC/openSUSE:Leap:15.2/.python-rollbar.new.2738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-rollbar"
Sat Apr 18 18:41:11 2020 rev:13 rq:795319 version:0.15.0
Changes:
--------
--- /work/SRC/openSUSE:Leap:15.2/python-rollbar/python-rollbar.changes
2020-03-02 13:22:19.474275154 +0100
+++
/work/SRC/openSUSE:Leap:15.2/.python-rollbar.new.2738/python-rollbar.changes
2020-04-18 18:41:11.805974664 +0200
@@ -1,0 +2,8 @@
+Wed Apr 15 16:06:40 UTC 2020 - Marketa Calabkova <[email protected]>
+
+- update to 0.15.0
+ * Prevent recursive re-raising
+ * Correctly apply logger formatting
+ * Fix deprecation warnings
+
+-------------------------------------------------------------------
Old:
----
v0.14.7.tar.gz
New:
----
v0.15.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-rollbar.spec ++++++
--- /var/tmp/diff_new_pack.D4yP3d/_old 2020-04-18 18:41:12.241975585 +0200
+++ /var/tmp/diff_new_pack.D4yP3d/_new 2020-04-18 18:41:12.245975594 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-rollbar
#
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,24 +17,27 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
+%bcond_without python2
Name: python-rollbar
-Version: 0.14.7
+Version: 0.15.0
Release: 0
Summary: Python notifier for reporting exceptions, errors, and log
messages to Rollbar
License: MIT
Group: Development/Languages/Python
-Url: https://github.com/rollbar/pyrollbar
+URL: https://github.com/rollbar/pyrollbar
Source: https://github.com/rollbar/pyrollbar/archive/v%{version}.tar.gz
BuildRequires: %{python_module WebOb}
BuildRequires: %{python_module blinker}
-BuildRequires: %{python_module mock}
BuildRequires: %{python_module requests >= 0.12.1}
BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module six >= 1.9.0}
BuildRequires: %{python_module unittest2}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
+%if %{with python2}
BuildRequires: python2-enum34
+BuildRequires: python2-mock
+%endif
Requires: python-requests >= 0.12.1
Requires: python-setuptools
Requires: python-six >= 1.9.0
++++++ v0.14.7.tar.gz -> v0.15.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyrollbar-0.14.7/.gitignore
new/pyrollbar-0.15.0/.gitignore
--- old/pyrollbar-0.14.7/.gitignore 2019-03-01 22:55:46.000000000 +0100
+++ new/pyrollbar-0.15.0/.gitignore 2020-04-04 02:08:37.000000000 +0200
@@ -10,3 +10,4 @@
Pipfile
Pipfile.lock
.pytest_cache/
+.python-version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyrollbar-0.14.7/.travis.yml
new/pyrollbar-0.15.0/.travis.yml
--- old/pyrollbar-0.14.7/.travis.yml 2019-03-01 22:55:46.000000000 +0100
+++ new/pyrollbar-0.15.0/.travis.yml 2020-04-04 02:08:37.000000000 +0200
@@ -9,31 +9,45 @@
- python: "2.7"
env: FLASK_VERSION=0.11.1
- python: "2.7"
- env: FLASK_VERSION=0.12.2
+ env: FLASK_VERSION=0.12.4
+ - python: "2.7"
+ env: FLASK_VERSION=1.0.2
- python: "3.3"
+ dist: trusty
env: FLASK_VERSION=0.10.1
- python: "3.3"
+ dist: trusty
env: FLASK_VERSION=0.11.1
- python: "3.3"
- env: FLASK_VERSION=0.12.2
+ dist: trusty
+ env: FLASK_VERSION=0.12.4
+ - python: "3.3"
+ dist: trusty
+ env: FLASK_VERSION=1.0.2
- python: "3.4"
env: FLASK_VERSION=0.10.1
- python: "3.4"
env: FLASK_VERSION=0.11.1
- python: "3.4"
- env: FLASK_VERSION=0.12.2
+ env: FLASK_VERSION=0.12.4
+ - python: "3.4"
+ env: FLASK_VERSION=1.0.2
- python: "3.5"
env: FLASK_VERSION=0.10.1
- python: "3.5"
env: FLASK_VERSION=0.11.1
- - python: "3.4"
- env: FLASK_VERSION=0.12.2
+ - python: "3.5"
+ env: FLASK_VERSION=0.12.4
+ - python: "3.5"
+ env: FLASK_VERSION=1.0.2
- python: "3.6"
env: FLASK_VERSION=0.10.1
- python: "3.6"
env: FLASK_VERSION=0.11.1
- python: "3.6"
- env: FLASK_VERSION=0.12.2
+ env: FLASK_VERSION=0.12.4
+ - python: "3.6"
+ env: FLASK_VERSION=1.0.2
- python: "2.7"
env: TWISTED_VERSION=15.5.0
@@ -57,46 +71,70 @@
- python: "2.7"
env: DJANGO_VERSION=1.7.11
- python: "2.7"
- env: DJANGO_VERSION=1.8.18
+ env: DJANGO_VERSION=1.8.19
- python: "2.7"
env: DJANGO_VERSION=1.9.13
- python: "2.7"
- env: DJANGO_VERSION=1.10.7
+ env: DJANGO_VERSION=1.10.8
- python: "2.7"
- env: DJANGO_VERSION=1.11.1
+ env: DJANGO_VERSION=1.11.20
- python: "3.3"
+ dist: trusty
env: DJANGO_VERSION=1.6.11
- python: "3.3"
- env: DJANGO_VERSION=1.8.18
+ dist: trusty
+ env: DJANGO_VERSION=1.8.19
- python: "3.4"
env: DJANGO_VERSION=1.7.11
- python: "3.4"
- env: DJANGO_VERSION=1.8.18
+ env: DJANGO_VERSION=1.8.19
- python: "3.4"
env: DJANGO_VERSION=1.9.13
- python: "3.4"
- env: DJANGO_VERSION=1.10.7
+ env: DJANGO_VERSION=1.10.8
- python: "3.4"
- env: DJANGO_VERSION=1.11.1
+ env: DJANGO_VERSION=1.11.20
+ - python: "3.4"
+ env: DJANGO_VERSION=2.0.13
- python: "3.5"
- env: DJANGO_VERSION=1.8.18
+ env: DJANGO_VERSION=1.8.19
- python: "3.5"
env: DJANGO_VERSION=1.9.13
- python: "3.5"
- env: DJANGO_VERSION=1.10.7
+ env: DJANGO_VERSION=1.10.8
+ - python: "3.5"
+ env: DJANGO_VERSION=1.11.20
+ - python: "3.5"
+ env: DJANGO_VERSION=2.0.13
- python: "3.5"
- env: DJANGO_VERSION=1.11.1
+ env: DJANGO_VERSION=2.1.7
- python: "3.6"
- env: DJANGO_VERSION=1.11.1
+ env: DJANGO_VERSION=1.11.20
+ - python: "3.6"
+ env: DJANGO_VERSION=2.0.13
+ - python: "3.6"
+ env: DJANGO_VERSION=2.1.7
+
+ - python: "3.7"
+ env: DJANGO_VERSION=1.11.20
+ dist: xenial
+ - python: "3.7"
+ env: DJANGO_VERSION=2.0.13
+ dist: xenial
+ - python: "3.7"
+ env: DJANGO_VERSION=2.1.7
+ dist: xenial
- python: "3.6"
env: PYRAMID_VERSION=1.9.2
install:
+ - pip install setuptools==39.2.0 --force-reinstall
+ - if [ $TRAVIS_PYTHON_VERSION == 3.3 ]; then pip install Werkzeug==0.14.1
--force-reinstall; fi
- if [ -v FLASK_VERSION ]; then pip install Flask==$FLASK_VERSION; fi
- if [ -v TWISTED_VERSION ]; then pip install Twisted==$TWISTED_VERSION
treq; fi
- if [ -v DJANGO_VERSION ]; then pip install Django==$DJANGO_VERSION; fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyrollbar-0.14.7/rollbar/__init__.py
new/pyrollbar-0.15.0/rollbar/__init__.py
--- old/pyrollbar-0.14.7/rollbar/__init__.py 2019-03-01 22:55:46.000000000
+0100
+++ new/pyrollbar-0.15.0/rollbar/__init__.py 2020-04-04 02:08:37.000000000
+0200
@@ -25,7 +25,7 @@
from rollbar.lib import events, filters, dict_merge, parse_qs, text,
transport, urljoin, iteritems, defaultJSONEncode
-__version__ = '0.14.7'
+__version__ = '0.15.0'
__log_name__ = 'rollbar'
log = logging.getLogger(__log_name__)
@@ -265,6 +265,9 @@
'http_proxy_user': None,
'http_proxy_password': None,
'include_request_body': False,
+ 'request_pool_connections': None,
+ 'request_pool_maxsize': None,
+ 'request_max_retries': None,
}
_CURRENT_LAMBDA_CONTEXT = None
@@ -319,6 +322,7 @@
SETTINGS['access_token'] = access_token
SETTINGS['environment'] = environment
+ _configure_transport(**SETTINGS)
if SETTINGS.get('allow_logging_basic_config'):
logging.basicConfig()
@@ -370,6 +374,20 @@
_initialized = True
+def _configure_transport(**kw):
+ configuration = _requests_configuration(**kw)
+ transport.configure_pool(**configuration)
+
+
+def _requests_configuration(**kw):
+ keys = {
+ 'request_pool_connections': 'pool_connections',
+ 'request_pool_maxsize': 'pool_maxsize',
+ 'request_max_retries': 'max_retries',
+ }
+ return {keys[k]: kw.get(k, None) for k in keys}
+
+
def lambda_function(f):
"""
Decorator for making error handling on AWS Lambda easier
@@ -696,11 +714,16 @@
def _walk_trace_chain(cls, exc, trace):
trace_chain = [_trace_data(cls, exc, trace)]
+ seen_exceptions = {exc}
+
while True:
exc = getattr(exc, '__cause__', None) or getattr(exc, '__context__',
None)
if not exc:
break
trace_chain.append(_trace_data(type(exc), exc, getattr(exc,
'__traceback__', None)))
+ if exc in seen_exceptions:
+ break
+ seen_exceptions.add(exc)
return trace_chain
@@ -826,11 +849,7 @@
"""
if hasattr(request, 'rollbar_person'):
rollbar_person_prop = request.rollbar_person
- try:
- person = rollbar_person_prop()
- except TypeError:
- person = rollbar_person_prop
-
+ person = rollbar_person_prop() if callable(rollbar_person_prop) else
rollbar_person_prop
if person and isinstance(person, dict):
return person
else:
@@ -838,11 +857,7 @@
if hasattr(request, 'user'):
user_prop = request.user
- try:
- user = user_prop()
- except TypeError:
- user = user_prop
-
+ user = user_prop() if callable(user_prop) else user_prop
if not user:
return None
elif isinstance(user, dict):
@@ -866,11 +881,7 @@
if hasattr(request, 'user_id'):
user_id_prop = request.user_id
- try:
- user_id = user_id_prop()
- except TypeError:
- user_id = user_id_prop
-
+ user_id = user_id_prop() if callable(user_id_prop) else user_id_prop
if not user_id:
return None
return {'id': text(user_id)}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyrollbar-0.14.7/rollbar/contrib/django/middleware.py
new/pyrollbar-0.15.0/rollbar/contrib/django/middleware.py
--- old/pyrollbar-0.14.7/rollbar/contrib/django/middleware.py 2019-03-01
22:55:46.000000000 +0100
+++ new/pyrollbar-0.15.0/rollbar/contrib/django/middleware.py 2020-04-04
02:08:37.000000000 +0200
@@ -1,4 +1,4 @@
-"""
+r"""
django-rollbar middleware
There are two options for installing the Rollbar middleware. Both options
@@ -36,7 +36,7 @@
ROLLBAR = {
'access_token': 'YOUR_TOKEN',
'ignorable_404_urls': (
- re.compile('/index\.php'),
+ re.compile(r'/index\.php'),
re.compile('/foobar'),
),
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyrollbar-0.14.7/rollbar/lib/transport.py
new/pyrollbar-0.15.0/rollbar/lib/transport.py
--- old/pyrollbar-0.14.7/rollbar/lib/transport.py 2019-03-01
22:55:46.000000000 +0100
+++ new/pyrollbar-0.15.0/rollbar/lib/transport.py 2020-04-04
02:08:37.000000000 +0200
@@ -28,6 +28,17 @@
}
+def configure_pool(**kw):
+ keys = ['pool_connections', 'pool_maxsize', 'max_retries']
+ args = {k: kw[k] for k in keys if kw.get(k, None) is not None}
+ if len(args) == 0:
+ return
+ https_adapter = requests.adapters.HTTPAdapter(**args)
+ http_adapter = requests.adapters.HTTPAdapter(**args)
+ _session().mount('https://', https_adapter)
+ _session().mount('http://', http_adapter)
+
+
def post(*args, **kw):
proxies = _get_proxy_cfg(kw)
return _session().post(*args, proxies=proxies, **kw)
@@ -38,4 +49,4 @@
return _session().get(*args, proxies=proxies, **kw)
-__all__ = ['post', 'get']
+__all__ = ['post', 'get', 'configure_pool']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyrollbar-0.14.7/rollbar/logger.py
new/pyrollbar-0.15.0/rollbar/logger.py
--- old/pyrollbar-0.14.7/rollbar/logger.py 2019-03-01 22:55:46.000000000
+0100
+++ new/pyrollbar-0.15.0/rollbar/logger.py 2020-04-04 02:08:37.000000000
+0200
@@ -139,7 +139,7 @@
extra_data=extra_data,
payload_data=payload_data)
else:
- uuid = rollbar.report_message(record.msg,
+ uuid = rollbar.report_message(record.getMessage(),
level=level,
request=request,
extra_data=extra_data,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyrollbar-0.14.7/rollbar/test/flask_tests/test_flask.py
new/pyrollbar-0.15.0/rollbar/test/flask_tests/test_flask.py
--- old/pyrollbar-0.14.7/rollbar/test/flask_tests/test_flask.py 2019-03-01
22:55:46.000000000 +0100
+++ new/pyrollbar-0.15.0/rollbar/test/flask_tests/test_flask.py 2020-04-04
02:08:37.000000000 +0200
@@ -6,7 +6,11 @@
import sys
import os
-import mock
+try:
+ from unittest import mock
+except ImportError:
+ import mock
+
import rollbar
from rollbar.test import BaseTest
@@ -98,7 +102,15 @@
self.assertIn('request', data)
self.assertEqual(data['request']['url'],
'http://localhost/cause_error?foo=bar')
- self.assertDictEqual(data['request']['GET'], {'foo': ['bar']})
+
+ # The behavior of implicitly converting werkzeug.ImmutableMultiDict
+ # using dict() changes starting in Python 3.6.
+ # See _build_werkzeug_request_data()
+ if sys.version_info >= (3, 6):
+ self.assertDictEqual(data['request']['GET'], {'foo': 'bar'})
+ else:
+ self.assertDictEqual(data['request']['GET'], {'foo': ['bar']})
+
self.assertEqual(data['request']['user_ip'], '1.2.3.4')
self.assertEqual(data['request']['method'], 'GET')
self.assertEqual(data['request']['headers']['User-Agent'], 'Flask
Test')
@@ -153,7 +165,15 @@
self.assertIn('request', data)
self.assertEqual(data['request']['url'],
'http://localhost/cause_error?foo=bar')
- self.assertDictEqual(data['request']['GET'], {'foo': ['bar']})
+
+ # The behavior of implicitly converting werkzeug.ImmutableMultiDict
+ # using dict() changes starting in Python 3.6.
+ # See _build_werkzeug_request_data()
+ if sys.version_info >= (3, 6):
+ self.assertDictEqual(data['request']['GET'], {'foo': 'bar'})
+ else:
+ self.assertDictEqual(data['request']['GET'], {'foo': ['bar']})
+
self.assertEqual(data['request']['user_ip'], '1.2.3.4')
self.assertEqual(data['request']['method'], 'GET')
self.assertEqual(data['request']['headers']['User-Agent'], 'Flask
Test')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyrollbar-0.14.7/rollbar/test/test_loghandler.py
new/pyrollbar-0.15.0/rollbar/test/test_loghandler.py
--- old/pyrollbar-0.14.7/rollbar/test/test_loghandler.py 2019-03-01
22:55:46.000000000 +0100
+++ new/pyrollbar-0.15.0/rollbar/test/test_loghandler.py 2020-04-04
02:08:37.000000000 +0200
@@ -4,9 +4,13 @@
import copy
import json
import logging
-import mock
import sys
+try:
+ from unittest import mock
+except ImportError:
+ import mock
+
import rollbar
from rollbar.logger import RollbarHandler
@@ -38,13 +42,13 @@
return logger
@mock.patch('rollbar.send_payload')
- def test_message_stays_unformatted(self, send_payload):
+ def test_message_gets_formatted(self, send_payload):
logger = self._create_logger()
logger.warning("Hello %d %s", 1, 'world')
payload = send_payload.call_args[0][0]
- self.assertEqual(payload['data']['body']['message']['body'], "Hello %d
%s")
+ self.assertEqual(payload['data']['body']['message']['body'], "Hello 1
world")
self.assertEqual(payload['data']['body']['message']['args'], (1,
'world'))
self.assertEqual(payload['data']['body']['message']['record']['name'],
__name__)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyrollbar-0.14.7/rollbar/test/test_pyramid.py
new/pyrollbar-0.15.0/rollbar/test/test_pyramid.py
--- old/pyrollbar-0.14.7/rollbar/test/test_pyramid.py 2019-03-01
22:55:46.000000000 +0100
+++ new/pyrollbar-0.15.0/rollbar/test/test_pyramid.py 2020-04-04
02:08:37.000000000 +0200
@@ -1,4 +1,7 @@
-import mock
+try:
+ from unittest import mock
+except ImportError:
+ import mock
from rollbar.test import BaseTest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyrollbar-0.14.7/rollbar/test/test_rollbar.py
new/pyrollbar-0.15.0/rollbar/test/test_rollbar.py
--- old/pyrollbar-0.14.7/rollbar/test/test_rollbar.py 2019-03-01
22:55:46.000000000 +0100
+++ new/pyrollbar-0.15.0/rollbar/test/test_rollbar.py 2020-04-04
02:08:37.000000000 +0200
@@ -1,13 +1,18 @@
import base64
import copy
import json
-import mock
import socket
+import threading
import uuid
import sys
try:
+ from unittest import mock
+except ImportError:
+ import mock
+
+try:
from StringIO import StringIO
except ImportError:
from io import StringIO
@@ -281,6 +286,67 @@
self.assertEqual(payload['data']['body']['trace_chain'][1]['frames'][-1]['locals']['bar_local'],
'bar')
@mock.patch('rollbar.send_payload')
+ def test_report_exception_with_same_exception_as_cause(self, send_payload):
+ cause_exc = CauseException('bar')
+
+ def _raise_cause():
+ bar_local = 'bar'
+ raise cause_exc
+
+ def _raise_ex():
+ try:
+ _raise_cause()
+ except CauseException as cause:
+ # python2 won't automatically assign this traceback...
+ exc_info = sys.exc_info()
+ setattr(cause, '__traceback__', exc_info[2])
+
+ try:
+ foo_local = 'foo'
+ # in python3 this would normally be expressed as
+ # raise cause from cause
+ setattr(cause, '__cause__', cause) # PEP-3134
+ raise cause
+ except:
+ rollbar.report_exc_info()
+
+ ex_raiser = threading.Thread(target=_raise_ex)
+ ex_raiser.daemon = True
+ ex_raiser.start()
+ # 0.5 seconds ought be enough for any modern computer to get into the
+ # cyclical parts of the code, but not so long as to collect a lot of
+ # objects in memory
+ ex_raiser.join(timeout=0.5)
+
+ if ex_raiser.is_alive():
+ # This breaks the circular reference, allowing thread to exit and
+ # to be joined
+ cause_exc.__cause__ = None
+ ex_raiser.join()
+ self.fail('Cyclic reference in rollbar._walk_trace_chain()')
+
+ self.assertEqual(send_payload.called, True)
+
+ payload = send_payload.call_args[0][0]
+
+ self.assertEqual(payload['access_token'], _test_access_token)
+ self.assertIn('body', payload['data'])
+ self.assertNotIn('trace', payload['data']['body'])
+ self.assertIn('trace_chain', payload['data']['body'])
+ self.assertEqual(2, len(payload['data']['body']['trace_chain']))
+
+ self.assertIn('exception', payload['data']['body']['trace_chain'][0])
+
self.assertEqual(payload['data']['body']['trace_chain'][0]['exception']['message'],
'bar')
+
self.assertEqual(payload['data']['body']['trace_chain'][0]['exception']['class'],
'CauseException')
+ frames = payload['data']['body']['trace_chain'][0]['frames']
+
self.assertEqual(payload['data']['body']['trace_chain'][0]['frames'][0]['locals']['foo_local'],
'foo')
+
+ self.assertIn('exception', payload['data']['body']['trace_chain'][1])
+
self.assertEqual(payload['data']['body']['trace_chain'][1]['exception']['message'],
'bar')
+
self.assertEqual(payload['data']['body']['trace_chain'][1]['exception']['class'],
'CauseException')
+
self.assertEqual(payload['data']['body']['trace_chain'][1]['frames'][-1]['locals']['bar_local'],
'bar')
+
+ @mock.patch('rollbar.send_payload')
def test_report_exception_with_context(self, send_payload):
def _raise_context():
bar_local = 'bar'
@@ -620,7 +686,7 @@
varargs = payload['data']['body']['trace']['frames'][-1]['varargspec']
self.assertEqual(1,
len(payload['data']['body']['trace']['frames'][-1]['locals'][varargs]))
-
self.assertRegex(payload['data']['body']['trace']['frames'][-1]['locals'][varargs][0],
'\*+')
+
self.assertRegex(payload['data']['body']['trace']['frames'][-1]['locals'][varargs][0],
r'\*+')
@mock.patch('rollbar.send_payload')
def test_args_lambda_with_star_args_and_args(self, send_payload):
@@ -647,8 +713,8 @@
self.assertEqual('arg1-value',
payload['data']['body']['trace']['frames'][-1]['locals']['arg1'])
self.assertEqual(2,
len(payload['data']['body']['trace']['frames'][-1]['locals'][varargs]))
-
self.assertRegex(payload['data']['body']['trace']['frames'][-1]['locals'][varargs][0],
'\*+')
-
self.assertRegex(payload['data']['body']['trace']['frames'][-1]['locals'][varargs][1],
'\*+')
+
self.assertRegex(payload['data']['body']['trace']['frames'][-1]['locals'][varargs][0],
r'\*+')
+
self.assertRegex(payload['data']['body']['trace']['frames'][-1]['locals'][varargs][1],
r'\*+')
@mock.patch('rollbar.send_payload')
def test_args_lambda_with_kwargs(self, send_payload):
@@ -811,7 +877,7 @@
self.assertEqual(2,
len(payload['data']['body']['trace']['frames'][-1]['argspec']))
self.assertEqual('password',
payload['data']['body']['trace']['frames'][-1]['argspec'][0])
-
self.assertRegex(payload['data']['body']['trace']['frames'][-1]['locals']['password'],
'\*+')
+
self.assertRegex(payload['data']['body']['trace']['frames'][-1]['locals']['password'],
r'\*+')
self.assertEqual('clear',
payload['data']['body']['trace']['frames'][-1]['argspec'][1])
self.assertEqual('text',
payload['data']['body']['trace']['frames'][-1]['locals']['clear'])
@@ -865,7 +931,7 @@
self.assertEqual(2,
len(payload['data']['body']['trace']['frames'][-1]['locals'][keywords]))
self.assertIn('password',
payload['data']['body']['trace']['frames'][-1]['locals'][keywords])
-
self.assertRegex(payload['data']['body']['trace']['frames'][-1]['locals'][keywords]['password'],
'\*+')
+
self.assertRegex(payload['data']['body']['trace']['frames'][-1]['locals'][keywords]['password'],
r'\*+')
self.assertIn('clear',
payload['data']['body']['trace']['frames'][-1]['locals'][keywords])
self.assertEqual('text',
payload['data']['body']['trace']['frames'][-1]['locals'][keywords]['clear'])
@@ -896,8 +962,8 @@
payload = send_payload.call_args[0][0]
-
self.assertRegex(payload['data']['body']['trace']['frames'][-1]['locals']['password'],
'\*+')
-
self.assertRegex(payload['data']['body']['trace']['frames'][-1]['locals']['Password'],
'\*+')
+
self.assertRegex(payload['data']['body']['trace']['frames'][-1]['locals']['password'],
r'\*+')
+
self.assertRegex(payload['data']['body']['trace']['frames'][-1]['locals']['Password'],
r'\*+')
self.assertIn('_invalid',
payload['data']['body']['trace']['frames'][-1]['locals'])
binary_type_name = 'str' if python_major_version() < 3 else 'bytes'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyrollbar-0.14.7/rollbar/test/twisted_tests/test_twisted.py
new/pyrollbar-0.15.0/rollbar/test/twisted_tests/test_twisted.py
--- old/pyrollbar-0.14.7/rollbar/test/twisted_tests/test_twisted.py
2019-03-01 22:55:46.000000000 +0100
+++ new/pyrollbar-0.15.0/rollbar/test/twisted_tests/test_twisted.py
2020-04-04 02:08:37.000000000 +0200
@@ -5,7 +5,11 @@
import json
import sys
-import mock
+try:
+ from unittest import mock
+except ImportError:
+ import mock
+
import rollbar
# access token for https://rollbar.com/rollbar/pyrollbar
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyrollbar-0.14.7/setup.py
new/pyrollbar-0.15.0/setup.py
--- old/pyrollbar-0.14.7/setup.py 2019-03-01 22:55:46.000000000 +0100
+++ new/pyrollbar-0.15.0/setup.py 2020-04-04 02:08:37.000000000 +0200
@@ -18,7 +18,6 @@
VERSION = re.search(r"^__version__ = ['\"]([^'\"]+)['\"]", INIT_DATA,
re.MULTILINE).group(1)
tests_require = [
- 'mock',
'webob',
'blinker',
'unittest2'
@@ -26,6 +25,7 @@
version = sys.version_info
if version[0] == 2 or (version[0] == 3 and version[1] < 4):
+ tests_require.append('mock<=3.0.5') # mock > 3.0.5 requires python >= 3.5
tests_require.append('enum34')
setup(
@@ -55,6 +55,8 @@
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
+ "Programming Language :: Python :: 3.7",
+ "Programming Language :: Python :: 3.8",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Development Status :: 5 - Production/Stable",