git: 93b856170efc - main - www/py-WebError: Fix build with setuptools 58.0.0+

From: Po-Chuan Hsieh <sunpoet_at_FreeBSD.org>
Date: Fri, 25 Mar 2022 13:51:12 UTC
The branch main has been updated by sunpoet:

URL: https://cgit.FreeBSD.org/ports/commit/?id=93b856170efcd2c6f24d58b5f095be57c9186f5c

commit 93b856170efcd2c6f24d58b5f095be57c9186f5c
Author:     Po-Chuan Hsieh <sunpoet@FreeBSD.org>
AuthorDate: 2022-03-25 13:35:06 +0000
Commit:     Po-Chuan Hsieh <sunpoet@FreeBSD.org>
CommitDate: 2022-03-25 13:38:24 +0000

    www/py-WebError: Fix build with setuptools 58.0.0+
    
    With hat:       python
---
 www/py-WebError/files/patch-2to3 | 319 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 319 insertions(+)

diff --git a/www/py-WebError/files/patch-2to3 b/www/py-WebError/files/patch-2to3
new file mode 100644
index 000000000000..0ac9ce46f1d6
--- /dev/null
+++ b/www/py-WebError/files/patch-2to3
@@ -0,0 +1,319 @@
+--- weberror/evalcontext.py.orig	2016-04-10 01:43:23 UTC
++++ weberror/evalcontext.py
+@@ -1,4 +1,4 @@
+-from cStringIO import StringIO
++from io import StringIO
+ import traceback
+ import threading
+ import pdb
+@@ -32,7 +32,7 @@ class EvalContext(object):
+             sys.stdout = out
+             try:
+                 code = compile(s, '<web>', "single", 0, 1)
+-                exec code in self.namespace, self.globs
++                exec(code, self.namespace, self.globs)
+                 debugger.set_continue()
+             except KeyboardInterrupt:
+                 raise
+--- weberror/evalexception.py.orig	2016-04-10 01:43:23 UTC
++++ weberror/evalexception.py
+@@ -22,18 +22,18 @@ to see the full debuggable traceback.  Also, this URL 
+ ``wsgi.errors``, so you can open it up in another browser window.
+ 
+ """
+-import httplib
++import http.client
+ import sys
+ import os
+ import cgi
+ import traceback
+-from cStringIO import StringIO
++from io import StringIO
+ import pprint
+ import itertools
+ import time
+ import re
+ import types
+-import urllib
++import urllib.request, urllib.parse, urllib.error
+ 
+ from pkg_resources import resource_filename
+ 
+@@ -43,7 +43,7 @@ from paste import request
+ from paste import urlparser
+ from paste.util import import_string
+ 
+-import evalcontext
++from . import evalcontext
+ from weberror import errormiddleware, formatter, collector
+ from weberror.util import security
+ from tempita import HTMLTemplate
+@@ -124,7 +124,7 @@ def wsgiapp():
+                 form['environ'] = environ
+                 try:
+                     res = func(*args, **form.mixed())
+-                except ValueError, ve:
++                except ValueError as ve:
+                     status = '500 Server Error'
+                     res = '<html>There was an error: %s</html>' % \
+                         html_quote(ve)
+@@ -150,7 +150,7 @@ def get_debug_info(func):
+         debugcount = req.params['debugcount']
+         try:
+             debugcount = int(debugcount)
+-        except ValueError, e:
++        except ValueError as e:
+             return exc.HTTPBadRequest(
+                 "Invalid value for debugcount (%r): %s"
+                 % (debugcount, e))
+@@ -197,7 +197,7 @@ def get_debug_count(req):
+     elif 'weberror.evalexception.debug_count' in environ:
+         return environ['weberror.evalexception.debug_count']
+     else:
+-        next = debug_counter.next()
++        next = next(debug_counter)
+         environ['weberror.evalexception.debug_count'] = next
+         environ['paste.evalexception.debug_count'] = next
+         return next
+@@ -279,7 +279,7 @@ class EvalException(object):
+             libraries=self.libraries)[0]
+         host = req.GET['host']
+         headers = req.headers
+-        conn = httplib.HTTPConnection(host)
++        conn = http.client.HTTPConnection(host)
+         headers = {'Content-Length':len(long_xml_er), 
+                    'Content-Type':'application/xml'}
+         conn.request("POST", req.GET['path'], long_xml_er, headers=headers)
+@@ -311,7 +311,7 @@ class EvalException(object):
+         """
+         res = Response(content_type='text/x-json')
+         data = [];
+-        items = self.debug_infos.values()
++        items = list(self.debug_infos.values())
+         items.sort(lambda a, b: cmp(a.created, b.created))
+         data = [item.json() for item in items]
+         res.body = repr(data)
+@@ -525,7 +525,7 @@ class DebugInfo(object):
+             if id(frame) == tbid:
+                 return frame
+         else:
+-            raise ValueError, (
++            raise ValueError(
+                 "No frame by id %s found from %r" % (tbid, self.frames))
+ 
+     def wsgi_application(self, environ, start_response):
+@@ -601,7 +601,7 @@ class EvalHTMLFormatter(formatter.HTMLFormatter):
+ 
+ def make_table(items):
+     if hasattr(items, 'items'):
+-        items = items.items()
++        items = list(items.items())
+         items.sort()
+     return table_template.substitute(
+         html_quote=html_quote,
+@@ -641,7 +641,7 @@ def pprint_format(value, safe=False):
+     out = StringIO()
+     try:
+         pprint.pprint(value, out)
+-    except Exception, e:
++    except Exception as e:
+         if safe:
+             out.write('Error: %s' % e)
+         else:
+@@ -781,12 +781,12 @@ def make_eval_exception(app, global_conf, xmlhttp_key=
+         xmlhttp_key = global_conf.get('xmlhttp_key', '_')
+     if reporters is None:
+         reporters = global_conf.get('error_reporters')
+-    if reporters and isinstance(reporters, basestring):
++    if reporters and isinstance(reporters, str):
+         reporter_strings = reporters.split()
+         reporters = []
+         for reporter_string in reporter_strings:
+             reporter = import_string.eval_import(reporter_string)
+-            if isinstance(reporter, (type, types.ClassType)):
++            if isinstance(reporter, type):
+                 reporter = reporter()
+             reporters.append(reporter)
+     return EvalException(app, xmlhttp_key=xmlhttp_key, reporters=reporters)
+--- weberror/formatter.py.orig	2016-04-10 01:43:23 UTC
++++ weberror/formatter.py
+@@ -63,7 +63,7 @@ class AbstractFormatter(object):
+     def format_collected_data(self, exc_data):
+         general_data = {}
+         if self.show_extra_data:
+-            for name, value_list in exc_data.extra_data.items():
++            for name, value_list in list(exc_data.extra_data.items()):
+                 if isinstance(name, tuple):
+                     importance, title = name
+                 else:
+@@ -116,17 +116,17 @@ class AbstractFormatter(object):
+             if res:
+                 lines.append(res)
+         etype = exc_data.exception_type
+-        if not isinstance(etype, basestring):
++        if not isinstance(etype, str):
+             etype = etype.__name__
+         exc_info = self.format_exception_info(
+             etype,
+             exc_data.exception_value)
+         data_by_importance = {'important': [], 'normal': [],
+                               'supplemental': [], 'extra': []}
+-        for (importance, name), value in general_data.items():
++        for (importance, name), value in list(general_data.items()):
+             data_by_importance[importance].append(
+                 (name, value))
+-        for value in data_by_importance.values():
++        for value in list(data_by_importance.values()):
+             value.sort()
+         return self.format_combine(data_by_importance, lines, exc_info)
+ 
+@@ -269,12 +269,12 @@ class TextFormatter(AbstractFormatter):
+                 return '%s: %s' % (title, s)
+         elif isinstance(value, dict):
+             lines = ['\n', title, '-'*len(title)]
+-            items = value.items()
++            items = list(value.items())
+             items.sort()
+             for n, v in items:
+                 try:
+                     v = repr(v)
+-                except Exception, e:
++                except Exception as e:
+                     v = 'Cannot display: %s' % e
+                 v = truncate(v)
+                 lines.append('  %s: %s' % (n, v))
+@@ -346,7 +346,7 @@ class HTMLFormatter(TextFormatter):
+         elif (isinstance(value, (list, tuple))
+               and self.long_item_list(value)):
+             return '%s: <tt>[<br>\n&nbsp; &nbsp; %s]</tt>' % (
+-                title, ',<br>&nbsp; &nbsp; '.join(map(self.quote, map(repr, value))))
++                title, ',<br>&nbsp; &nbsp; '.join(map(self.quote, list(map(repr, value)))))
+         else:
+             return '%s: <tt>%s</tt>' % (title, self.quote(repr(value)))
+ 
+@@ -370,7 +370,7 @@ class HTMLFormatter(TextFormatter):
+ 
+     def zebra_table(self, title, rows, table_class="variables"):
+         if isinstance(rows, dict):
+-            rows = rows.items()
++            rows = list(rows.items())
+             rows.sort()
+         table = ['<table class="%s">' % table_class,
+                  '<tr class="header"><th colspan="2">%s</th></tr>'
+@@ -379,7 +379,7 @@ class HTMLFormatter(TextFormatter):
+         for name, value in rows:
+             try:
+                 value = repr(value)
+-            except Exception, e:
++            except Exception as e:
+                 value = 'Cannot print: %s' % e
+             odd = not odd
+             table.append(
+@@ -423,7 +423,7 @@ def get_libraries(libs=None):
+         return {}
+     
+ def create_text_node(doc, elem, text):
+-    if not isinstance(text, basestring):
++    if not isinstance(text, str):
+         try:
+             text = escaping.removeIllegalChars(repr(text))
+         except:
+@@ -449,7 +449,7 @@ class XMLFormatter(AbstractFormatter):
+         libs = get_libraries(self.extra_kwargs.get('libraries'))
+         if libs:
+             libraries = newdoc.createElement('libraries')
+-            for k, v in libs.iteritems():
++            for k, v in libs.items():
+                 lib = newdoc.createElement('library')
+                 lib.attributes['version'] = v
+                 lib.attributes['name'] = k
+@@ -493,7 +493,7 @@ class XMLFormatter(AbstractFormatter):
+             #     variables.appendChild(variable)
+         
+         etype = exc_data.exception_type
+-        if not isinstance(etype, basestring):
++        if not isinstance(etype, str):
+             etype = etype.__name__
+         
+         top_element.appendChild(self.format_exception_info(
+@@ -677,6 +677,6 @@ def make_pre_wrappable(html, wrap_limit=60,
+     return '\n'.join(lines)
+ 
+ def convert_to_str(s):
+-    if isinstance(s, unicode):
++    if isinstance(s, str):
+         return s.encode('utf8')
+     return s
+--- weberror/pdbcapture.py.orig	2016-04-10 01:43:23 UTC
++++ weberror/pdbcapture.py
+@@ -50,7 +50,7 @@ class PdbCapture(object):
+                 return self.media_app(environ, start_response)
+             resp = self.internal_request(req)
+             return resp(environ, start_response)
+-        id = self.counter.next()
++        id = next(self.counter)
+         state = dict(id=id,
+                      event=threading.Event(),
+                      base_url=req.application_url,
+@@ -66,7 +66,7 @@ class PdbCapture(object):
+             resp = state['response']
+             return resp(environ, start_response)
+         if 'exc_info' in state:
+-            raise state['exc_info'][0], state['exc_info'][1], state['exc_info'][2]
++            raise state['exc_info'][0](state['exc_info'][1]).with_traceback(state['exc_info'][2])
+         self.states[id] = state
+         tmpl = self.get_template('pdbcapture_response.html')
+         body = tmpl.substitute(req=req, state=state, id=id)
+--- weberror/util/security.py.orig	2016-04-10 01:43:23 UTC
++++ weberror/util/security.py
+@@ -21,7 +21,7 @@ else:
+         expected_len = len(expected)
+         result = actual_len ^ expected_len
+         if expected_len > 0:
+-            for i in xrange(actual_len):
++            for i in range(actual_len):
+                 result |= ord(actual[i]) ^ ord(expected[i % expected_len])
+         return result == 0
+ 
+@@ -43,7 +43,7 @@ def valid_csrf_token(secret, token):
+     try:
+         expiry_ts, hashed = token.split(',')
+         expiry_dt = datetime.utcfromtimestamp(int(expiry_ts))
+-    except ValueError, e:
++    except ValueError as e:
+         return False
+ 
+     if expiry_dt < datetime.utcnow():
+--- weberror/util/serial_number_generator.py.orig	2016-04-10 01:43:23 UTC
++++ weberror/util/serial_number_generator.py
+@@ -19,7 +19,7 @@ base = len(good_characters)
+ 
+ def lazy_result(return_type, dummy_initial=None):
+     """Decorator to allow for on-demand evaluation (limited scope of use!)"""
+-    if not issubclass(return_type, basestring):
++    if not issubclass(return_type, str):
+         raise NotImplementedError
+ 
+     class _lazy_class(return_type):
+@@ -54,7 +54,7 @@ def make_identifier(number):
+     """
+     Encodes a number as an identifier.
+     """
+-    if not isinstance(number, (int, long)):
++    if not isinstance(number, int):
+         raise ValueError(
+             "You can only make identifiers out of integers (not %r)"
+             % number)
+@@ -90,10 +90,10 @@ def hash_identifier(s, length, pad=True, hasher=md5, p
+         # Accept sha/md5 modules as well as callables
+         hasher = hasher.new
+     if length > 26 and hasher is md5:
+-        raise ValueError, (
++        raise ValueError(
+             "md5 cannot create hashes longer than 26 characters in "
+             "length (you gave %s)" % length)
+-    if isinstance(s, unicode):
++    if isinstance(s, str):
+         s = s.encode('utf-8')
+     h = hasher(str(s))
+     bin_hash = h.digest()