Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-bobo for openSUSE:Factory 
checked in at 2024-04-14 11:55:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-bobo (Old)
 and      /work/SRC/openSUSE:Factory/.python-bobo.new.26366 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-bobo"

Sun Apr 14 11:55:02 2024 rev:6 rq:1167540 version:2.4.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-bobo/python-bobo.changes  2021-11-11 
21:39:17.605014303 +0100
+++ /work/SRC/openSUSE:Factory/.python-bobo.new.26366/python-bobo.changes       
2024-04-14 12:24:49.742019428 +0200
@@ -1,0 +2,5 @@
+Tue Apr  9 14:23:21 UTC 2024 - Markéta Machová <[email protected]>
+
+- Add patch drop-py27.patch to get rid of six
+
+-------------------------------------------------------------------

New:
----
  drop-py27.patch

BETA DEBUG BEGIN:
  New:
- Add patch drop-py27.patch to get rid of six
BETA DEBUG END:

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

Other differences:
------------------
++++++ python-bobo.spec ++++++
--- /var/tmp/diff_new_pack.wSDKkw/_old  2024-04-14 12:24:50.146034140 +0200
+++ /var/tmp/diff_new_pack.wSDKkw/_new  2024-04-14 12:24:50.146034140 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-bobo
 #
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -16,7 +16,6 @@
 #
 
 
-%{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-bobo
 Version:        2.4.0
 Release:        0
@@ -24,13 +23,14 @@
 License:        ZPL-2.1
 URL:            http://bobo.readthedocs.io/
 Source:         
https://files.pythonhosted.org/packages/source/b/bobo/bobo-%{version}.tar.gz
+#PATCH-FIX-UPSTREAM part of https://github.com/zopefoundation/bobo/pull/23 
Drop support for Python 2.7 up to 3.6.
+Patch:          drop-py27.patch
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 Requires:       python-WebOb
-Requires:       python-six
 Requires(post): update-alternatives
-Requires(postun):update-alternatives
+Requires(postun): update-alternatives
 BuildArch:      noarch
 %python_subpackages
 
@@ -46,7 +46,7 @@
 Bobo builds on other frameworks, most notably WSGI and WebOb.
 
 %prep
-%setup -q -n bobo-%{version}
+%autosetup -p1 -n bobo-%{version}
 
 %build
 %python_build
@@ -65,5 +65,7 @@
 %files %{python_files}
 %doc CHANGES.rst README.rst
 %python_alternative %{_bindir}/bobo
-%{python_sitelib}/*
+%{python_sitelib}/bobo*.py
+%{python_sitelib}/bobo-%{version}*info
+%pycache_only %{python_sitelib}/__pycache__/bobo*.pyc
 

++++++ drop-py27.patch ++++++
>From 5a2f2ebbbb858b663ba7b283a250fb357d5e2afb Mon Sep 17 00:00:00 2001
From: Michael Howitz <[email protected]>
Date: Fri, 10 Feb 2023 10:10:12 +0100
Subject: [PATCH] Config with zope product template 2c7189fc (#23)

* Drop support for Python 2.7 up to 3.6.

* Remove not needed files.

* Bumped version for breaking release.

* Remove no necessary version pins.
---
 buildout.cfg                                  |  8 --
 setup.cfg                                     | 22 ++++-
 setup.py                                      | 18 ++---
 src/bobo.py                                   | 69 ++++++++--------
 src/boboserver.py                             | 42 +++++-----
 tox.ini                                       | 80 ++++++++++++-------
 15 files changed, 239 insertions(+), 160 deletions(-)

Index: bobo-2.4.0/src/bobo.py
===================================================================
--- bobo-2.4.0.orig/src/bobo.py
+++ bobo-2.4.0/src/bobo.py
@@ -32,15 +32,15 @@ __all__ = (
     'subroute',
     )
 
-__metaclass__ = type
 
 import inspect
 import logging
 import re
 import sys
+import urllib
+
 import webob
-import six
-from six.moves import filter, urllib
+
 
 log = logging.getLogger(__name__)
 
@@ -50,7 +50,6 @@ _default_content_type = 'text/html; char
 
 _json_content_type = re.compile('application/json;?').match
 
-getargspec = inspect.getargspec if six.PY2 else inspect.getfullargspec
 
 class Application:
     """Create a WSGI application.
@@ -175,7 +174,7 @@ class Application:
         self.config = config
 
         bobo_configure = config.get('bobo_configure', '')
-        if isinstance(bobo_configure, six.string_types):
+        if isinstance(bobo_configure, str):
             bobo_configure = (
                 _get_global(name)
                 for name in filter(None, _uncomment(bobo_configure).split())
@@ -185,7 +184,7 @@ class Application:
 
         bobo_errors = config.get('bobo_errors')
         if bobo_errors is not None:
-            if isinstance(bobo_errors, six.string_types):
+            if isinstance(bobo_errors, str):
                 bobo_errors = _uncomment(bobo_errors)
                 if ':' in bobo_errors:
                     bobo_errors = _get_global(bobo_errors)
@@ -198,7 +197,7 @@ class Application:
             _maybe_copy(bobo_errors, 'exception', self)
 
         bobo_resources = config.get('bobo_resources', '')
-        if isinstance(bobo_resources, six.string_types):
+        if isinstance(bobo_resources, str):
             bobo_resources = _uncomment(bobo_resources, True)
             if bobo_resources:
                 self.handlers = _route_config(bobo_resources)
@@ -208,7 +207,7 @@ class Application:
             self.handlers = [r.bobo_response for r in bobo_resources]
 
         handle_exceptions = config.get('bobo_handle_exceptions', True)
-        if isinstance(handle_exceptions, six.string_types):
+        if isinstance(handle_exceptions, str):
             handle_exceptions = handle_exceptions.lower() == 'true'
         self.reraise_exceptions = not handle_exceptions
 
@@ -285,9 +284,9 @@ class Application:
             return response
 
         body = data.body
-        if isinstance(body, six.text_type):
+        if isinstance(body, str):
             response.text = body
-        elif isinstance(body, six.binary_type):
+        elif isinstance(body, bytes):
             response.body = body
         elif _json_content_type(content_type):
             import json
@@ -328,7 +327,7 @@ def _err_response(status, method, title,
         response.unicode_body = _html_template % (title, message)
     return response
 
-_html_template = u"""<html>
+_html_template = """<html>
 <head><title>%s</title></head>
 <body>%s</body>
 </html>
@@ -344,10 +343,7 @@ def redirect(url, status=302, body=None,
     in the ``url`` argument.
     """
     if body is None:
-        body = u'See %s' % url
-
-    # if isinstance(url, six.text_type):
-    #     url = url.encode('utf-8')
+        body = 'See %s' % url
 
     response = webob.Response(status=status, headerlist=[('Location', url)])
     response.content_type = content_type
@@ -378,7 +374,7 @@ def _scan_module(module_name):
         return
 
     resources = []
-    for resource in six.itervalues(module.__dict__):
+    for resource in module.__dict__.values():
         bobo_response = getattr(resource, 'bobo_response', None)
         if bobo_response is None:
             continue
@@ -457,7 +453,7 @@ def resources(resources):
     """
     handlers = _MultiResource()
     for resource in resources:
-        if isinstance(resource, six.string_types):
+        if isinstance(resource, str):
             if ':' in resource:
                 resource = _get_global(resource)
             else:
@@ -475,13 +471,13 @@ def reroute(route, resource):
     The resource can be a string, in which case it should be a global
     name, of the form ``module:expression``.
     """
-    if isinstance(resource, six.string_types):
+    if isinstance(resource, str):
         resource = _get_global(resource)
 
     try:
         bobo_reroute = resource.bobo_reroute
     except AttributeError:
-        if isinstance(resource, six.class_types):
+        if isinstance(resource, type):
             return Subroute(route, resource)
         raise TypeError("Expected a reroutable")
     return bobo_reroute(route)
@@ -498,7 +494,7 @@ def preroute(route, resource):
     bobo_response function, then a resource is computed that tries
     each of the resources found in the module in order.
     """
-    if isinstance(resource, six.string_types):
+    if isinstance(resource, str):
         if ':' in resource:
             resource = _get_global(resource)
         else:
@@ -583,7 +579,7 @@ def early():
     """
     return order() + _early_base
 
-class _cached_property(object):
+class _cached_property:
     def __init__(self, func):
         self.func = func
     def __get__(self, inst, class_):
@@ -610,7 +606,7 @@ class _Handler:
             if ext:
                 route += '.'+ext.group(1)
         self.bobo_route = route
-        if isinstance(method, six.string_types):
+        if isinstance(method, str):
             method = (method, )
         self.bobo_methods = method
 
@@ -675,11 +671,11 @@ class _Handler:
 
     @property
     def func_code(self):
-        return six.get_function_code(self.bobo_original)
+        return self.bobo_original.__code__
 
     @property
     def func_defaults(self):
-        return six.get_function_defaults(self.bobo_original)
+        return self.bobo_original.__defaults__
 
     @property
     def __name__(self):
@@ -703,7 +699,7 @@ class _UnboundHandler:
         return _BoundHandler(self.im_func, inst, self.im_class)
 
     def __repr__(self):
-        return "<unbound resource %s.%s>" % (
+        return "<unbound resource {}.{}>".format(
             self.im_class.__name__,
             self.im_func.__name__,
             )
@@ -727,7 +723,7 @@ class _BoundHandler:
         self.im_class = class_
 
     def __repr__(self):
-        return "<bound resource %s.%s of %r>" % (
+        return "<bound resource {}.{} of {!r}>".format(
             self.im_class.__name__,
             self.im_func.__name__,
             self.im_self,
@@ -741,12 +737,12 @@ class _BoundHandler:
 
 def _handler(route, func=None, **kw):
     if func is None:
-        if route is None or isinstance(route, six.string_types):
+        if route is None or isinstance(route, str):
             return lambda f: _handler(route, f, **kw)
         func = route
         route = None
     elif route is not None:
-        assert isinstance(route, six.string_types)
+        assert isinstance(route, str)
         if route and not route.startswith('/'):
             raise ValueError("Non-empty routes must start with '/'.", route)
 
@@ -1192,7 +1188,7 @@ def _compile_route(route, partial=False)
             if m is None:
                 return m
             path = path[len(m.group(0)):]
-            return (dict(item for item in six.iteritems(m.groupdict())
+            return (dict(item for item in m.groupdict().items()
                          if item[1] is not None),
                     path,
                     )
@@ -1204,7 +1200,7 @@ def _compile_route(route, partial=False)
             m = match(path)
             if m is None:
                 return m
-            return dict(item for item in six.iteritems(m.groupdict())
+            return dict(item for item in m.groupdict().items()
                         if item[1] is not None)
 
         return route_data
@@ -1229,7 +1225,7 @@ def _make_bobo_handle(func, original, ch
 
 _no_jget = {}.get
 def _make_caller(obj, paramsattr):
-    spec = getargspec(obj)
+    spec = inspect.getfullargspec(obj)
     nargs = nrequired = len(spec.args)
     if spec.defaults:
         nrequired -= len(spec.defaults)
@@ -1301,7 +1297,7 @@ def _subroute(route, ob, scan):
         scan_class(ob)
         return _subroute_class(route, ob)
 
-    if isinstance(ob, six.class_types):
+    if isinstance(ob, type):
         return _subroute_class(route, ob)
     return Subroute(route, ob)
 
@@ -1369,7 +1365,7 @@ def subroute(route=None, scan=False, ord
 
     if route is None:
         return lambda ob: _subroute('/'+ob.__name__, ob, scan)
-    if isinstance(route, six.string_types):
+    if isinstance(route, str):
         return lambda ob: _subroute(route, ob, scan)
     return _subroute('/'+route.__name__, route, scan)
 
@@ -1434,7 +1430,7 @@ def scan_class(class_):
 
     resources = {}
     for c in reversed(inspect.getmro(class_)):
-        for name, resource in six.iteritems(c.__dict__):
+        for name, resource in c.__dict__.items():
             br = getattr(resource, 'bobo_response', None)
             if br is None:
                 continue
@@ -1445,7 +1441,7 @@ def scan_class(class_):
     handlers = []
     for (order, (name, resource)) in sorted(
         (order, (name, resource))
-        for (name, (order, resource)) in six.iteritems(resources)
+        for (name, (order, resource)) in resources.items()
         ):
         route = getattr(resource, 'bobo_route', None)
         if route is not None:
Index: bobo-2.4.0/src/boboserver.py
===================================================================
--- bobo-2.4.0.orig/src/boboserver.py
+++ bobo-2.4.0/src/boboserver.py
@@ -13,9 +13,6 @@
 ##############################################################################
 """Create WSGI-based web applications.
 """
-from __future__ import print_function
-import six
-from six.moves import map
 
 __all__ = (
     'Debug',
@@ -24,20 +21,22 @@ __all__ = (
     'static',
     )
 
-__metaclass__ = type
 
-import bobo
+import mimetypes
 import optparse
 import os
-import mimetypes
-import pdb
+import pdb  # noqa: T100 import for pdb found
 import re
 import sys
 import traceback
 import types
-import webob
 import wsgiref.simple_server
 
+import webob
+
+import bobo
+
+
 mimetypes.init()
 
 def run_server(app, port):
@@ -60,14 +59,14 @@ class Directory:
         for name in sorted(os.listdir(self.path)):
             if os.path.isdir(os.path.join(self.path, name)):
                 name += '/'
-            links.append('<a href="%s">%s</a>' % (name, name))
+            links.append('<a href="{}">{}</a>'.format(name, name))
         return """<html>
-        <head><title>%s</title></head>
+        <head><title>{}</title></head>
         <body>
-          %s
+          {}
         </body>
         </html>
-        """ % (self.path[len(self.root):], '<br>\n          '.join(links))
+        """.format(self.path[len(self.root):], '<br>\n          '.join(links))
 
     @bobo.subroute('/:name')
     def traverse(self, request, name):
@@ -93,7 +92,7 @@ class File:
             response.content_type = content_type
         try:
             response.body = open(self.path, 'rb').read()
-        except IOError:
+        except OSError:
             raise bobo.NotFound
 
         return response
@@ -133,11 +132,11 @@ class Reload:
             mtimes[name] = (filename, os.stat(filename).st_mtime)
 
     def __call__(self, environ, start_response):
-        for name, (path, mtime) in sorted(six.iteritems(self.mtimes)):
+        for name, (path, mtime) in sorted(self.mtimes.items()):
             if os.stat(path).st_mtime != mtime:
                 print('Reloading %s' % name)
-                six.exec_(compile(open(path).read(), path, 'exec'),
-                          sys.modules[name].__dict__)
+                exec(compile(open(path).read(), path, 'exec'),
+                     sys.modules[name].__dict__)
                 self.app.__init__(self.app.config)
                 self.mtimes[name] = path, os.stat(path).st_mtime
 
@@ -187,9 +186,7 @@ def server(args=None, Application=bobo.A
         import logging; logging.basicConfig()
         args = sys.argv[1:]
 
-    usage = "%prog [options] name=value ..."
-    if sys.version_info >= (2, 5):
-        usage = 'Usage: ' + usage
+    usage = "Usage: %prog [options] name=value ..."
     parser = optparse.OptionParser(usage)
     parser.add_option(
         '--port', '-p', type='int', dest='port', default=8080,
@@ -223,8 +220,7 @@ def server(args=None, Application=bobo.A
     for path in options.file or ():
         module = types.ModuleType(mname)
         module.__file__ = path
-        six.exec_(compile(open(module.__file__).read(),
-                          module.__file__, 'exec'),
+        exec(compile(open(module.__file__).read(), module.__file__, 'exec'),
                   module.__dict__)
         sys.modules[module.__name__] = module
         resources.append(module.__name__)
@@ -232,7 +228,7 @@ def server(args=None, Application=bobo.A
 
     for s in options.static or ():
         route, path = s.split('=', 1)
-        resources.append("boboserver:static(%r,%r)" % (route, path))
+        resources.append("boboserver:static({!r},{!r})".format(route, path))
 
     if not resources:
         error("No resources were specified.")
@@ -255,5 +251,5 @@ def server(args=None, Application=bobo.A
     if options.debug:
         app = Debug(app)
 
-    print("Serving %s on port %s..." % (resources, options.port))
+    print("Serving {} on port {}...".format(resources, options.port))
     run_server(app, options.port)
Index: bobo-2.4.0/setup.py
===================================================================
--- bobo-2.4.0.orig/setup.py
+++ bobo-2.4.0/setup.py
@@ -46,7 +46,7 @@ setup(
     long_description=read('README.rst') + '\n\n' + read('CHANGES.rst'),
     py_modules = ['bobo', 'boboserver'],
     package_dir = {'':'src'},
-    install_requires = ["WebOb", "six"],
+    install_requires = ["WebOb"],
     entry_points = entry_points,
     tests_require = [
         'bobodoctestumentation >=%s, <%s.999' % (version, version)],
Index: bobo-2.4.0/src/bobo.egg-info/requires.txt
===================================================================
--- bobo-2.4.0.orig/src/bobo.egg-info/requires.txt
+++ bobo-2.4.0/src/bobo.egg-info/requires.txt
@@ -1,2 +1 @@
 WebOb
-six

Reply via email to