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':