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 2025-07-31 17:45:10 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pecan (Old) and /work/SRC/openSUSE:Factory/.python-pecan.new.1944 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pecan" Thu Jul 31 17:45:10 2025 rev:36 rq:1296594 version:1.7.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pecan/python-pecan.changes 2025-04-08 17:51:40.567614708 +0200 +++ /work/SRC/openSUSE:Factory/.python-pecan.new.1944/python-pecan.changes 2025-07-31 17:45:35.794647883 +0200 @@ -1,0 +2,8 @@ +Sun Jul 27 12:36:08 UTC 2025 - John Paul Adrian Glaubitz <[email protected]> + +- Update to 1.7.0 + * added official support for Python 3.8 through 3.13 (#165) + * extensions pecan imports via `pecan.ext` has been removed (#157) +- Update BuildRequires and Requires from setup.py + +------------------------------------------------------------------- Old: ---- pecan-1.6.0.tar.gz New: ---- pecan-1.7.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pecan.spec ++++++ --- /var/tmp/diff_new_pack.ouOkOd/_old 2025-07-31 17:45:36.594681134 +0200 +++ /var/tmp/diff_new_pack.ouOkOd/_new 2025-07-31 17:45:36.598681300 +0200 @@ -24,7 +24,7 @@ %{?sle15_python_module_pythons} Name: python-pecan -Version: 1.6.0 +Version: 1.7.0 Release: 0 Summary: A WSGI object-dispatching web framework License: BSD-3-Clause @@ -37,7 +37,6 @@ BuildRequires: %{python_module WebOb >= 1.8} BuildRequires: %{python_module WebTest >= 1.3.1} BuildRequires: %{python_module gunicorn} -BuildRequires: %{python_module logutils} BuildRequires: %{python_module pip} BuildRequires: %{python_module setuptools} BuildRequires: %{python_module virtualenv} @@ -51,7 +50,6 @@ Requires: python-WebOb >= 1.8 # Still needed by pecan.testing Requires: python-WebTest >= 1.3.1 -Requires: python-logutils >= 0.3 Requires: python-setuptools %if %{with libalternatives} Requires: alts ++++++ pecan-1.6.0.tar.gz -> pecan-1.7.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pecan-1.6.0/PKG-INFO new/pecan-1.7.0/PKG-INFO --- old/pecan-1.6.0/PKG-INFO 2025-03-17 21:57:59.112224300 +0100 +++ new/pecan-1.7.0/PKG-INFO 2025-07-07 18:03:54.867873400 +0200 @@ -1,6 +1,6 @@ -Metadata-Version: 2.2 +Metadata-Version: 2.4 Name: pecan -Version: 1.6.0 +Version: 1.7.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 @@ -17,13 +17,17 @@ Classifier: Operating System :: Microsoft :: Windows Classifier: Operating System :: POSIX Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 Classifier: Topic :: Internet :: WWW/HTTP :: WSGI Classifier: Topic :: Software Development :: Libraries :: Application Frameworks +Requires-Python: >=3.8 License-File: LICENSE License-File: AUTHORS Requires-Dist: WebOb>=1.8 @@ -35,5 +39,7 @@ Dynamic: home-page Dynamic: keywords Dynamic: license +Dynamic: license-file Dynamic: requires-dist +Dynamic: requires-python Dynamic: summary diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pecan-1.6.0/pecan/ext/__init__.py new/pecan-1.7.0/pecan/ext/__init__.py --- old/pecan-1.6.0/pecan/ext/__init__.py 2025-03-17 21:27:14.000000000 +0100 +++ new/pecan-1.7.0/pecan/ext/__init__.py 2025-07-07 18:03:44.000000000 +0200 @@ -1,6 +0,0 @@ -def install(): - from pecan.extensions import PecanExtensionImporter - PecanExtensionImporter().install() - -install() -del install diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pecan-1.6.0/pecan/extensions.py new/pecan-1.7.0/pecan/extensions.py --- old/pecan-1.6.0/pecan/extensions.py 2025-03-17 21:27:14.000000000 +0100 +++ new/pecan-1.7.0/pecan/extensions.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,83 +0,0 @@ -import sys -import pkg_resources -import inspect -import logging - -log = logging.getLogger(__name__) - - -class PecanExtensionMissing(ImportError): - pass - - -class PecanExtensionImporter(object): - """ - Short circuits imports for extensions. - - This is used in combination with ``pecan.ext`` so that when a user does - ``from pecan.ext import foo``, it will attempt to map ``foo`` to a - registered setuptools entry point in some other (Pecan extension) project. - - Conversely, an extension developer may define an entry point in his - ``setup.py``, e.g., - - setup( - ... - entry_points=''' - [pecan.extension] - celery = pecancelery.lib.core - ''' - ) - - This is mostly for convenience and consistency. In this way, Pecan can - maintain an ecosystem of extensions that share a common namespace, - ``pecan.ext``, while still maintaining backwards compatibility for simple - package names (e.g., ``pecancelery``). - """ - - extension_module = 'pecan.ext' - prefix = extension_module + '.' - - def install(self): - if self not in sys.meta_path: - sys.meta_path.append(self) - - def __eq__(self, b): - return self.__class__.__module__ == b.__class__.__module__ and \ - self.__class__.__name__ == b.__class__.__name__ - - def __ne__(self, b): - return not self.__eq__(b) - - def find_module(self, fullname, path=None): - if fullname.startswith(self.prefix): - return self - - def load_module(self, fullname): - if fullname in sys.modules: - return self - extname = fullname.split(self.prefix)[1] - module = self.find_module_for_extension(extname) - realname = module.__name__ - try: - __import__(realname) - except ImportError: - raise sys.exc_info() - module = sys.modules[fullname] = sys.modules[realname] - if '.' not in extname: - setattr(sys.modules[self.extension_module], extname, module) - return module - - def find_module_for_extension(self, name): - for ep in pkg_resources.iter_entry_points('pecan.extension'): - if ep.name != name: - continue - log.debug('%s loading extension %s', self.__class__.__name__, ep) - module = ep.load() - if not inspect.ismodule(module): - log.debug('%s is not a module, skipping...' % module) - continue - return module - raise PecanExtensionMissing( - 'The `pecan.ext.%s` extension is not installed.' % name - ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pecan-1.6.0/pecan/middleware/static.py new/pecan-1.7.0/pecan/middleware/static.py --- old/pecan-1.6.0/pecan/middleware/static.py 2025-03-17 21:27:14.000000000 +0100 +++ new/pecan-1.7.0/pecan/middleware/static.py 2025-07-07 18:03:44.000000000 +0200 @@ -8,6 +8,7 @@ import os import mimetypes from datetime import datetime +from datetime import timezone from time import gmtime @@ -115,7 +116,10 @@ def _opener(self, filename): return lambda: ( open(filename, 'rb'), - datetime.utcfromtimestamp(os.path.getmtime(filename)), + datetime.fromtimestamp( + os.path.getmtime(filename), + tz=timezone.utc + ), int(os.path.getsize(filename)) ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pecan-1.6.0/pecan.egg-info/PKG-INFO new/pecan-1.7.0/pecan.egg-info/PKG-INFO --- old/pecan-1.6.0/pecan.egg-info/PKG-INFO 2025-03-17 21:57:59.000000000 +0100 +++ new/pecan-1.7.0/pecan.egg-info/PKG-INFO 2025-07-07 18:03:54.000000000 +0200 @@ -1,6 +1,6 @@ -Metadata-Version: 2.2 +Metadata-Version: 2.4 Name: pecan -Version: 1.6.0 +Version: 1.7.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 @@ -17,13 +17,17 @@ Classifier: Operating System :: Microsoft :: Windows Classifier: Operating System :: POSIX Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 Classifier: Topic :: Internet :: WWW/HTTP :: WSGI Classifier: Topic :: Software Development :: Libraries :: Application Frameworks +Requires-Python: >=3.8 License-File: LICENSE License-File: AUTHORS Requires-Dist: WebOb>=1.8 @@ -35,5 +39,7 @@ Dynamic: home-page Dynamic: keywords Dynamic: license +Dynamic: license-file Dynamic: requires-dist +Dynamic: requires-python Dynamic: summary diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pecan-1.6.0/pecan.egg-info/SOURCES.txt new/pecan-1.7.0/pecan.egg-info/SOURCES.txt --- old/pecan-1.6.0/pecan.egg-info/SOURCES.txt 2025-03-17 21:57:59.000000000 +0100 +++ new/pecan-1.7.0/pecan.egg-info/SOURCES.txt 2025-07-07 18:03:54.000000000 +0200 @@ -11,7 +11,6 @@ pecan/core.py pecan/decorators.py pecan/deploy.py -pecan/extensions.py pecan/hooks.py pecan/jsonify.py pecan/log.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pecan-1.6.0/setup.py new/pecan-1.7.0/setup.py --- old/pecan-1.6.0/setup.py 2025-03-17 21:45:00.000000000 +0100 +++ new/pecan-1.7.0/setup.py 2025-07-07 18:03:45.000000000 +0200 @@ -3,7 +3,7 @@ from setuptools import setup, find_packages -version = '1.6.0' +version = '1.7.0' # # determine requirements @@ -66,11 +66,14 @@ 'Operating System :: Microsoft :: Windows', 'Operating System :: POSIX', 'Programming Language :: Python', + 'Programming Language :: Python :: 3 :: Only', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', + 'Programming Language :: Python :: 3.12', + 'Programming Language :: Python :: 3.13', 'Topic :: Internet :: WWW/HTTP :: WSGI', 'Topic :: Software Development :: Libraries :: Application Frameworks' ], @@ -82,6 +85,7 @@ packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), include_package_data=True, zip_safe=False, + python_requires='>=3.8', install_requires=requirements, tests_require=tests_require, test_suite='pecan',
