Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-pecan for openSUSE:Factory 
checked in at 2021-05-12 19:31:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pecan (Old)
 and      /work/SRC/openSUSE:Factory/.python-pecan.new.2988 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pecan"

Wed May 12 19:31:08 2021 rev:26 rq:890868 version:1.4.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pecan/python-pecan.changes        
2020-03-27 00:23:37.140205792 +0100
+++ /work/SRC/openSUSE:Factory/.python-pecan.new.2988/python-pecan.changes      
2021-05-12 19:31:12.423294057 +0200
@@ -1,0 +2,14 @@
+Wed May  5 08:23:44 UTC 2021 - Antonio Larrosa <alarr...@suse.com>
+
+- version update to 1.4.0
+  * pecan now requires webob >= 1.8
+  * fixed a bug when parsing certain Accept headers
+    (https://github.com/Pylons/webob/issues/403)
+  * removed official support for Python 3.5
+- Rebase patch:
+  * pecan-no-kajiki.patch
+- Add patches to support SQLAlchemy 1.4.x (gh#pecan/pecan#125)
+  * 0001-Support-SQLAlchemy-1.4.x.patch
+  * 0002-Fix-typo-from-bad-copy-paste.patch
+
+-------------------------------------------------------------------

Old:
----
  pecan-1.3.3.tar.gz

New:
----
  0001-Support-SQLAlchemy-1.4.x.patch
  0002-Fix-typo-from-bad-copy-paste.patch
  pecan-1.4.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-pecan.spec ++++++
--- /var/tmp/diff_new_pack.kO2bhX/_old  2021-05-12 19:31:13.051291266 +0200
+++ /var/tmp/diff_new_pack.kO2bhX/_new  2021-05-12 19:31:13.055291249 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-pecan
 #
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,20 +17,22 @@
 
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
-%bcond_without python2
+%define skip_python2 1
 Name:           python-pecan
-Version:        1.3.3
+Version:        1.4.0
 Release:        0
 Summary:        A WSGI object-dispatching web framework
 License:        BSD-3-Clause
 URL:            https://github.com/pecan/pecan
 Source:         
https://files.pythonhosted.org/packages/source/p/pecan/pecan-%{version}.tar.gz
 Patch0:         pecan-no-kajiki.patch
+Patch1:         0001-Support-SQLAlchemy-1.4.x.patch
+Patch2:         0002-Fix-typo-from-bad-copy-paste.patch
 BuildRequires:  %{python_module Genshi >= 0.7}
 BuildRequires:  %{python_module Jinja2}
 BuildRequires:  %{python_module Mako >= 0.4.0}
 BuildRequires:  %{python_module SQLAlchemy}
-BuildRequires:  %{python_module WebOb >= 1.2}
+BuildRequires:  %{python_module WebOb >= 1.8}
 BuildRequires:  %{python_module WebTest >= 1.3.1}
 BuildRequires:  %{python_module gunicorn}
 BuildRequires:  %{python_module logutils}
@@ -38,25 +40,20 @@
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  %{python_module six}
 BuildRequires:  %{python_module virtualenv}
+BuildRequires:  uwsgi
 # we need sqlite module
 BuildRequires:  %{pythons}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 Requires:       python-Mako >= 0.4.0
-Requires:       python-WebOb >= 1.2
+Requires:       python-WebOb >= 1.8
 Requires:       python-WebTest >= 1.3.1
 Requires:       python-logutils >= 0.3
 Requires:       python-setuptools
 Requires:       python-six
 Requires(post): update-alternatives
-Requires(postun): update-alternatives
+Requires(postun):update-alternatives
 BuildArch:      noarch
-%if %{with python2}
-BuildRequires:  python-singledispatch
-%endif
-%ifpython2
-Requires:       python-singledispatch
-%endif
 %if 0%{?suse_version}
 Suggests:       python-Genshi
 Suggests:       python-Jinja2
@@ -70,6 +67,10 @@
 %prep
 %setup -q -n pecan-%{version}
 %patch0 -p1
+%patch1 -p1
+%patch2 -p1
+sed -ie "/^uwsgi$/d" test-requirements.txt
+sed -ie "/^pep8$/d" test-requirements.txt
 
 %build
 %python_build

++++++ 0001-Support-SQLAlchemy-1.4.x.patch ++++++
>From a89d425c183ea6fa3d1ad86c2f7bc8b0acf63323 Mon Sep 17 00:00:00 2001
From: Antonio Larrosa <antonio.larr...@gmail.com>
Date: Wed, 5 May 2021 13:45:02 +0200
Subject: [PATCH 1/2] Support SQLAlchemy 1.4.x

SQLAlchemy 1.4 is returning new types, LegacyCursorResult and LegacyRow,
which are not JSON serializable and this makes tests fail with:

```
======================================================================
ERROR: test_result_proxy 
(pecan.tests.test_jsonify.TestJsonifySQLAlchemyGenericEncoder)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/abuild/rpmbuild/BUILD/pecan-1.3.3/pecan/tests/test_jsonify.py", 
line 220, in test_result_proxy
    result = encode(self.result_proxy)
  File "/home/abuild/rpmbuild/BUILD/pecan-1.3.3/pecan/jsonify.py", line 133, in 
encode
    return _instance.encode(obj)
  File "/usr/lib64/python3.6/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib64/python3.6/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "/home/abuild/rpmbuild/BUILD/pecan-1.3.3/pecan/jsonify.py", line 127, in 
default
    return jsonify(obj)
  File "/usr/lib64/python3.6/functools.py", line 807, in wrapper
    return dispatch(args[0].__class__)(*args, **kw)
  File "/home/abuild/rpmbuild/BUILD/pecan-1.3.3/pecan/jsonify.py", line 122, in 
jsonify
    return _default.default(obj)
  File "/home/abuild/rpmbuild/BUILD/pecan-1.3.3/pecan/jsonify.py", line 108, in 
default
    return JSONEncoder.default(self, obj)
  File "/usr/lib64/python3.6/json/encoder.py", line 180, in default
    o.__class__.__name__)
TypeError: Object of type 'LegacyCursorResult' is not JSON serializable

======================================================================
ERROR: test_row_proxy 
(pecan.tests.test_jsonify.TestJsonifySQLAlchemyGenericEncoder)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/abuild/rpmbuild/BUILD/pecan-1.3.3/pecan/tests/test_jsonify.py", 
line 227, in test_row_proxy
    result = encode(self.row_proxy)
  File "/home/abuild/rpmbuild/BUILD/pecan-1.3.3/pecan/jsonify.py", line 133, in 
encode
    return _instance.encode(obj)
  File "/usr/lib64/python3.6/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib64/python3.6/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "/home/abuild/rpmbuild/BUILD/pecan-1.3.3/pecan/jsonify.py", line 127, in 
default
    return jsonify(obj)
  File "/usr/lib64/python3.6/functools.py", line 807, in wrapper
    return dispatch(args[0].__class__)(*args, **kw)
  File "/home/abuild/rpmbuild/BUILD/pecan-1.3.3/pecan/jsonify.py", line 122, in 
jsonify
    return _default.default(obj)
  File "/home/abuild/rpmbuild/BUILD/pecan-1.3.3/pecan/jsonify.py", line 108, in 
default
    return JSONEncoder.default(self, obj)
  File "/usr/lib64/python3.6/json/encoder.py", line 180, in default
    o.__class__.__name__)
TypeError: Object of type 'LegacyRow' is not JSON serializable
```

The SQLALchemy migration guide at [1] says:
```
For mapping-like behaviors from a Row object, including support for
these methods as well as a key-oriented __contains__ operator, the API
going forward will be to first access a special attribute Row._mapping,
which will then provide a complete mapping interface to the row, rather
than a tuple interface.
```

This commit fixes this by handling these new returned classes as a
special case and using _mapping to convert them to dicts.

[1] 
https://docs.sqlalchemy.org/en/14/changelog/migration_14.html#rowproxy-is-no-longer-a-proxy-is-now-called-row-and-behaves-like-an-enhanced-named-tuple
---
 pecan/jsonify.py | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/pecan/jsonify.py b/pecan/jsonify.py
index 5b74877..5da9638 100644
--- a/pecan/jsonify.py
+++ b/pecan/jsonify.py
@@ -33,6 +33,19 @@ except ImportError:  # pragma no cover
             pass
 
 
+try:
+    from sqlalchemy.engine.cursor import LegacyCursorResult, LegacyRow
+except ImportError:  # pragma no cover
+    # dummy classes since we don't have SQLAlchemy installed
+    # or we're using SQLAlchemy < 1.4
+
+    class ResultProxy(object):  # noqa
+        pass
+
+    class RowProxy(object):  # noqa
+        pass
+
+
 #
 # encoders
 #
@@ -100,6 +113,11 @@ class GenericJSON(JSONEncoder):
             if props['count'] < 0:
                 props['count'] = len(props['rows'])
             return props
+        elif isinstance(obj, LegacyCursorResult):
+            rows = [dict(row._mapping) for row in obj.fetchall()]
+            return {'count': len(rows), 'rows': rows}
+        elif isinstance(obj, LegacyRow):
+            return dict(obj._mapping)
         elif isinstance(obj, RowProxy):
             return dict(obj)
         elif isinstance(obj, webob_dicts):
-- 
2.31.1

++++++ 0002-Fix-typo-from-bad-copy-paste.patch ++++++
>From 942d92e7eb83e2eccb5d172b226b8e5fdc2d0368 Mon Sep 17 00:00:00 2001
From: Antonio Larrosa <antonio.larr...@gmail.com>
Date: Wed, 5 May 2021 13:57:57 +0200
Subject: [PATCH 2/2] Fix typo from bad copy&paste

I copied the structure of the code from a few lines above and forgot
to change the name of the classes
---
 pecan/jsonify.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pecan/jsonify.py b/pecan/jsonify.py
index 5da9638..c5cbc15 100644
--- a/pecan/jsonify.py
+++ b/pecan/jsonify.py
@@ -39,10 +39,10 @@ except ImportError:  # pragma no cover
     # dummy classes since we don't have SQLAlchemy installed
     # or we're using SQLAlchemy < 1.4
 
-    class ResultProxy(object):  # noqa
+    class LegacyCursorResult(object):  # noqa
         pass
 
-    class RowProxy(object):  # noqa
+    class LegacyRow(object):  # noqa
         pass
 
 
-- 
2.31.1

++++++ pecan-1.3.3.tar.gz -> pecan-1.4.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pecan-1.3.3/MANIFEST.in new/pecan-1.4.0/MANIFEST.in
--- old/pecan-1.3.3/MANIFEST.in 2019-04-02 15:39:33.000000000 +0200
+++ new/pecan-1.4.0/MANIFEST.in 2020-07-30 18:00:23.000000000 +0200
@@ -3,5 +3,5 @@
 recursive-include pecan/scaffolds/rest-api *
 include pecan/scaffolds/rest-api/*
 include pecan/middleware/resources/*
-include LICENSE README.rst requirements.txt
+include LICENSE README.rst requirements.txt test-requirements.txt
 recursive-include pecan/tests *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pecan-1.3.3/PKG-INFO new/pecan-1.4.0/PKG-INFO
--- old/pecan-1.3.3/PKG-INFO    2019-04-02 20:38:00.000000000 +0200
+++ new/pecan-1.4.0/PKG-INFO    2020-07-30 18:29:36.881268700 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: pecan
-Version: 1.3.3
+Version: 1.4.0
 Summary: A WSGI object-dispatching web framework, designed to be lean and 
fast, with few dependencies.
 Home-page: http://github.com/pecan/pecan
 Author: Jonathan LaCour
@@ -19,12 +19,8 @@
 Classifier: Operating System :: Microsoft :: Windows
 Classifier: Operating System :: POSIX
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
 Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
-Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Internet :: WWW/HTTP :: WSGI
 Classifier: Topic :: Software Development :: Libraries :: Application 
Frameworks
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pecan-1.3.3/pecan/configuration.py 
new/pecan-1.4.0/pecan/configuration.py
--- old/pecan-1.3.3/pecan/configuration.py      2019-04-02 15:39:33.000000000 
+0200
+++ new/pecan-1.4.0/pecan/configuration.py      2020-07-30 18:00:23.000000000 
+0200
@@ -69,7 +69,10 @@
 
         for k, v in iterator:
             if not IDENTIFIER.match(k):
-                raise ValueError('\'%s\' is not a valid indentifier' % k)
+                msg = ("'%s' is not a valid Python identifier,"
+                       "consider using the '__force_dict__' key if requiring "
+                       "a native dictionary")
+                raise ValueError(msg % k)
 
             cur_val = self.__values__.get(k)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pecan-1.3.3/pecan/core.py 
new/pecan-1.4.0/pecan/core.py
--- old/pecan-1.3.3/pecan/core.py       2019-04-02 15:39:33.000000000 +0200
+++ new/pecan-1.4.0/pecan/core.py       2020-07-30 18:00:23.000000000 +0200
@@ -489,11 +489,21 @@
                     'text/html'
                 )
             else:
-                best_default = acceptparse.MIMEAccept(
-                    accept
-                ).best_match(
-                    content_types.keys()
+                best_default = None
+                accept_header = acceptparse.create_accept_header(accept)
+                offers = accept_header.acceptable_offers(
+                    list(content_types.keys())
                 )
+                if offers:
+                    # If content type matches exactly use matched type
+                    best_default = offers[0][0]
+                else:
+                    # If content type doesn't match exactly see if something
+                    # matches when not using parameters
+                    for k in content_types.keys():
+                        if accept.startswith(k):
+                            best_default = k
+                            break
 
                 if best_default is None:
                     msg = "Controller '%s' defined does not support " + \
@@ -685,9 +695,11 @@
             # if this is an HTTP Exception, set it as the response
             if isinstance(e, exc.HTTPException):
                 # if the client asked for JSON, do our best to provide it
-                best_match = acceptparse.MIMEAccept(
-                    getattr(req.accept, 'header_value', '*/*') or '*/*'
-                ).best_match(('text/plain', 'text/html', 'application/json'))
+                accept_header = acceptparse.create_accept_header(
+                    getattr(req.accept, 'header_value', '*/*') or '*/*')
+                offers = accept_header.acceptable_offers(
+                    ('text/plain', 'text/html', 'application/json'))
+                best_match = offers[0][0] if offers else None
                 state.response = e
                 if best_match == 'application/json':
                     json_body = dumps({
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pecan-1.3.3/pecan/tests/test_base.py 
new/pecan-1.4.0/pecan/tests/test_base.py
--- old/pecan-1.3.3/pecan/tests/test_base.py    2019-04-02 15:39:33.000000000 
+0200
+++ new/pecan-1.4.0/pecan/tests/test_base.py    2020-07-30 18:00:23.000000000 
+0200
@@ -5,10 +5,10 @@
 import json
 import traceback
 import warnings
+from unittest import mock
 
 import webob
 from webob.exc import HTTPNotFound
-import mock
 from webtest import TestApp
 import six
 from six import b as b_
@@ -1548,6 +1548,13 @@
         })
         assert r.status_int == 200
         assert r.content_type == 'application/json'
+
+    def test_discarded_accept_parameters(self):
+        r = self.app_.get('/', headers={
+            'Accept': 'application/json;discard=me'
+        })
+        assert r.status_int == 200
+        assert r.content_type == 'application/json'
 
     def test_file_extension_has_higher_precedence(self):
         r = self.app_.get('/index.html', headers={
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pecan-1.3.3/pecan/tests/test_conf.py 
new/pecan-1.4.0/pecan/tests/test_conf.py
--- old/pecan-1.3.3/pecan/tests/test_conf.py    2019-04-02 15:39:33.000000000 
+0200
+++ new/pecan-1.4.0/pecan/tests/test_conf.py    2020-07-30 18:00:23.000000000 
+0200
@@ -21,6 +21,16 @@
         bad_dict = {'bad name': 'value'}
         self.assertRaises(ValueError, configuration.Config, bad_dict)
 
+    def test_update_config_fail_message(self):
+        """When failing, the __force_dict__ key is suggested"""
+        from pecan import configuration
+        bad_dict = {'bad name': 'value'}
+
+        try:
+            configuration.Config(bad_dict)
+        except ValueError as error:
+            assert "consider using the '__force_dict__'" in str(error)
+
     def test_update_set_config(self):
         """Update an empty configuration with the default values"""
         from pecan import configuration
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pecan-1.3.3/pecan/tests/test_no_thread_locals.py 
new/pecan-1.4.0/pecan/tests/test_no_thread_locals.py
--- old/pecan-1.3.3/pecan/tests/test_no_thread_locals.py        2019-04-02 
15:39:33.000000000 +0200
+++ new/pecan-1.4.0/pecan/tests/test_no_thread_locals.py        2020-07-30 
18:00:23.000000000 +0200
@@ -1,12 +1,12 @@
 import time
 from json import dumps, loads
 import warnings
+from unittest import mock
 
 from webtest import TestApp
 from six import b as b_
 from six import u as u_
 import webob
-import mock
 
 from pecan import Pecan, expose, abort, Request, Response
 from pecan.rest import RestController
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pecan-1.3.3/pecan.egg-info/PKG-INFO 
new/pecan-1.4.0/pecan.egg-info/PKG-INFO
--- old/pecan-1.3.3/pecan.egg-info/PKG-INFO     2019-04-02 20:38:00.000000000 
+0200
+++ new/pecan-1.4.0/pecan.egg-info/PKG-INFO     2020-07-30 18:29:36.000000000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: pecan
-Version: 1.3.3
+Version: 1.4.0
 Summary: A WSGI object-dispatching web framework, designed to be lean and 
fast, with few dependencies.
 Home-page: http://github.com/pecan/pecan
 Author: Jonathan LaCour
@@ -19,12 +19,8 @@
 Classifier: Operating System :: Microsoft :: Windows
 Classifier: Operating System :: POSIX
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
 Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
-Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Internet :: WWW/HTTP :: WSGI
 Classifier: Topic :: Software Development :: Libraries :: Application 
Frameworks
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pecan-1.3.3/pecan.egg-info/SOURCES.txt 
new/pecan-1.4.0/pecan.egg-info/SOURCES.txt
--- old/pecan-1.3.3/pecan.egg-info/SOURCES.txt  2019-04-02 20:38:00.000000000 
+0200
+++ new/pecan-1.4.0/pecan.egg-info/SOURCES.txt  2020-07-30 18:29:36.000000000 
+0200
@@ -4,6 +4,7 @@
 requirements.txt
 setup.cfg
 setup.py
+test-requirements.txt
 bin/pecan
 pecan/__init__.py
 pecan/configuration.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pecan-1.3.3/pecan.egg-info/requires.txt 
new/pecan-1.4.0/pecan.egg-info/requires.txt
--- old/pecan-1.3.3/pecan.egg-info/requires.txt 2019-04-02 20:38:00.000000000 
+0200
+++ new/pecan-1.4.0/pecan.egg-info/requires.txt 2020-07-30 18:29:36.000000000 
+0200
@@ -1,6 +1,5 @@
-WebOb>=1.2dev
+WebOb>=1.8
 Mako>=0.4.0
 WebTest>=1.3.1
 six
 logutils>=0.3
-singledispatch
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pecan-1.3.3/requirements.txt 
new/pecan-1.4.0/requirements.txt
--- old/pecan-1.3.3/requirements.txt    2019-04-02 15:39:33.000000000 +0200
+++ new/pecan-1.4.0/requirements.txt    2020-07-30 18:00:23.000000000 +0200
@@ -1,4 +1,4 @@
-WebOb>=1.2dev
+WebOb>=1.8
 Mako>=0.4.0
 WebTest>=1.3.1
 six
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pecan-1.3.3/setup.cfg new/pecan-1.4.0/setup.cfg
--- old/pecan-1.3.3/setup.cfg   2019-04-02 20:38:00.000000000 +0200
+++ new/pecan-1.4.0/setup.cfg   2020-07-30 18:29:36.881268700 +0200
@@ -5,7 +5,7 @@
 cover-package = pecan
 cover-erase = 1
 
-[pytest]
+[tool:pytest]
 norecursedirs = +package+ config_fixtures docs .git *.egg .tox
 
 [egg_info]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pecan-1.3.3/setup.py new/pecan-1.4.0/setup.py
--- old/pecan-1.3.3/setup.py    2019-04-02 15:42:14.000000000 +0200
+++ new/pecan-1.4.0/setup.py    2020-07-30 18:01:05.000000000 +0200
@@ -3,7 +3,7 @@
 
 from setuptools import setup, find_packages
 
-version = '1.3.3'
+version = '1.4.0'
 
 #
 # determine requirements
@@ -14,6 +14,12 @@
         if (line and not line.startswith('-'))
     ]
 
+with open('test-requirements.txt') as reqs:
+    test_requirements = [
+        line for line in reqs.read().split('\n')
+        if (line and not line.startswith('-'))
+    ]
+
 try:
     from functools import singledispatch  # noqa
 except:
@@ -28,13 +34,7 @@
         requirements.append('ordereddict')
 
 
-tests_require = requirements + [
-    'virtualenv',
-    'Jinja2',
-    'gunicorn',
-    'mock',
-    'sqlalchemy'
-]
+tests_require = requirements + test_requirements
 
 if sys.version_info < (3, 0):
     # These don't support Python3 yet - don't run their tests
@@ -66,13 +66,9 @@
         'Operating System :: Microsoft :: Windows',
         'Operating System :: POSIX',
         'Programming Language :: Python',
-        'Programming Language :: Python :: 2',
-        'Programming Language :: Python :: 2.7',
         'Programming Language :: Python :: 3',
-        'Programming Language :: Python :: 3.4',
         'Programming Language :: Python :: 3.5',
         'Programming Language :: Python :: 3.6',
-        'Programming Language :: Python :: Implementation :: PyPy',
         'Topic :: Internet :: WWW/HTTP :: WSGI',
         'Topic :: Software Development :: Libraries :: Application Frameworks'
     ],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pecan-1.3.3/test-requirements.txt 
new/pecan-1.4.0/test-requirements.txt
--- old/pecan-1.3.3/test-requirements.txt       1970-01-01 01:00:00.000000000 
+0100
+++ new/pecan-1.4.0/test-requirements.txt       2020-07-30 18:00:23.000000000 
+0200
@@ -0,0 +1,6 @@
+gunicorn
+Jinja2<3  # >= 3 not compatible py35
+pep8
+sqlalchemy
+uwsgi
+virtualenv

++++++ pecan-no-kajiki.patch ++++++
--- /var/tmp/diff_new_pack.kO2bhX/_old  2021-05-12 19:31:13.175290716 +0200
+++ /var/tmp/diff_new_pack.kO2bhX/_new  2021-05-12 19:31:13.175290716 +0200
@@ -2,11 +2,10 @@
 ===================================================================
 --- pecan-1.3.2.orig/setup.py
 +++ pecan-1.3.2/setup.py
-@@ -35,16 +35,8 @@ tests_require = requirements + [
-     'mock',
-     'sqlalchemy'
- ]
--
+@@ -35,15 +35,8 @@ tests_require = requirements + [
+ 
+ tests_require = requirements + test_requirements
+ 
 -if sys.version_info < (3, 0):
 -    # These don't support Python3 yet - don't run their tests
 -    if platform.python_implementation() != 'PyPy':

Reply via email to