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",


Reply via email to