Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 25 Mar 2022 13:50:56 GMT
From:      Po-Chuan Hsieh <sunpoet@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: ab8512ad5d24 - main - security/py-python-openid: Fix build with setuptools 58.0.0+
Message-ID:  <202203251350.22PDou4P037614@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by sunpoet:

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

commit ab8512ad5d24959128a688b7e898bbf3710709c5
Author:     Po-Chuan Hsieh <sunpoet@FreeBSD.org>
AuthorDate: 2022-03-25 13:34:10 +0000
Commit:     Po-Chuan Hsieh <sunpoet@FreeBSD.org>
CommitDate: 2022-03-25 13:38:21 +0000

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

diff --git a/security/py-python-openid/files/patch-2to3 b/security/py-python-openid/files/patch-2to3
new file mode 100644
index 000000000000..559e937090c1
--- /dev/null
+++ b/security/py-python-openid/files/patch-2to3
@@ -0,0 +1,997 @@
+--- openid/consumer/consumer.py.orig	2010-06-18 17:08:20 UTC
++++ openid/consumer/consumer.py
+@@ -189,7 +189,7 @@ USING THIS LIBRARY
+ 
+ import cgi
+ import copy
+-from urlparse import urlparse, urldefrag
++from urllib.parse import urlparse, urldefrag
+ 
+ from openid import fetchers
+ 
+@@ -342,7 +342,7 @@ class Consumer(object):
+         disco = Discovery(self.session, user_url, self.session_key_prefix)
+         try:
+             service = disco.getNextService(self._discover)
+-        except fetchers.HTTPFetchingError, why:
++        except fetchers.HTTPFetchingError as why:
+             raise DiscoveryFailure(
+                 'Error fetching XRDS document: %s' % (why[0],), None)
+ 
+@@ -378,7 +378,7 @@ class Consumer(object):
+ 
+         try:
+             auth_req.setAnonymous(anonymous)
+-        except ValueError, why:
++        except ValueError as why:
+             raise ProtocolError(str(why))
+ 
+         return auth_req
+@@ -639,12 +639,12 @@ class GenericConsumer(object):
+     def _complete_id_res(self, message, endpoint, return_to):
+         try:
+             self._checkSetupNeeded(message)
+-        except SetupNeededError, why:
++        except SetupNeededError as why:
+             return SetupNeededResponse(endpoint, why.user_setup_url)
+         else:
+             try:
+                 return self._doIdRes(message, endpoint, return_to)
+-            except (ProtocolError, DiscoveryFailure), why:
++            except (ProtocolError, DiscoveryFailure) as why:
+                 return FailureResponse(endpoint, why[0])
+ 
+     def _completeInvalid(self, message, endpoint, _):
+@@ -661,7 +661,7 @@ class GenericConsumer(object):
+         # message.
+         try:
+             self._verifyReturnToArgs(message.toPostArgs())
+-        except ProtocolError, why:
++        except ProtocolError as why:
+             oidutil.log("Verifying return_to arguments: %s" % (why[0],))
+             return False
+ 
+@@ -768,7 +768,7 @@ class GenericConsumer(object):
+ 
+         try:
+             timestamp, salt = splitNonce(nonce)
+-        except ValueError, why:
++        except ValueError as why:
+             raise ProtocolError('Malformed nonce: %s' % (why[0],))
+ 
+         if (self.store is not None and
+@@ -867,7 +867,7 @@ class GenericConsumer(object):
+         # Make sure all non-OpenID arguments in the response are also
+         # in the signed return_to.
+         bare_args = message.getArgs(BARE_NS)
+-        for pair in bare_args.iteritems():
++        for pair in bare_args.items():
+             if pair not in parsed_args:
+                 raise ProtocolError("Parameter %s not in return_to URL" % (pair[0],))
+ 
+@@ -930,7 +930,7 @@ class GenericConsumer(object):
+             # case.
+             try:
+                 self._verifyDiscoverySingle(endpoint, to_match)
+-            except ProtocolError, e:
++            except ProtocolError as e:
+                 oidutil.log(
+                     "Error attempting to use stored discovery information: " +
+                     str(e))
+@@ -975,7 +975,7 @@ class GenericConsumer(object):
+                     self._verifyDiscoverySingle(endpoint, to_match)
+                 except TypeURIMismatch:
+                     self._verifyDiscoverySingle(endpoint, to_match_1_0)
+-            except ProtocolError, e:
++            except ProtocolError as e:
+                 oidutil.log("Error attempting to use stored discovery information: " +
+                             str(e))
+                 oidutil.log("Attempting discovery to verify endpoint")
+@@ -1068,7 +1068,7 @@ class GenericConsumer(object):
+                 try:
+                     self._verifyDiscoverySingle(
+                         endpoint, to_match_endpoint)
+-                except ProtocolError, why:
++                except ProtocolError as why:
+                     failure_messages.append(str(why))
+                 else:
+                     # It matches, so discover verification has
+@@ -1096,7 +1096,7 @@ class GenericConsumer(object):
+             return False
+         try:
+             response = self._makeKVPost(request, server_url)
+-        except (fetchers.HTTPFetchingError, ServerError), e:
++        except (fetchers.HTTPFetchingError, ServerError) as e:
+             oidutil.log('check_authentication failed: %s' % (e[0],))
+             return False
+         else:
+@@ -1178,7 +1178,7 @@ class GenericConsumer(object):
+         try:
+             assoc = self._requestAssociation(
+                 endpoint, assoc_type, session_type)
+-        except ServerError, why:
++        except ServerError as why:
+             supportedTypes = self._extractSupportedAssociationType(why,
+                                                                    endpoint,
+                                                                    assoc_type)
+@@ -1190,7 +1190,7 @@ class GenericConsumer(object):
+                 try:
+                     assoc = self._requestAssociation(
+                         endpoint, assoc_type, session_type)
+-                except ServerError, why:
++                except ServerError as why:
+                     # Do not keep trying, since it rejected the
+                     # association type that it told us to use.
+                     oidutil.log('Server %s refused its suggested association '
+@@ -1260,17 +1260,17 @@ class GenericConsumer(object):
+ 
+         try:
+             response = self._makeKVPost(args, endpoint.server_url)
+-        except fetchers.HTTPFetchingError, why:
++        except fetchers.HTTPFetchingError as why:
+             oidutil.log('openid.associate request failed: %s' % (why[0],))
+             return None
+ 
+         try:
+             assoc = self._extractAssociation(response, assoc_session)
+-        except KeyError, why:
++        except KeyError as why:
+             oidutil.log('Missing required parameter in response from %s: %s'
+                         % (endpoint.server_url, why[0]))
+             return None
+-        except ProtocolError, why:
++        except ProtocolError as why:
+             oidutil.log('Protocol error parsing response from %s: %s' % (
+                 endpoint.server_url, why[0]))
+             return None
+@@ -1393,7 +1393,7 @@ class GenericConsumer(object):
+             OPENID_NS, 'expires_in', no_default)
+         try:
+             expires_in = int(expires_in_str)
+-        except ValueError, why:
++        except ValueError as why:
+             raise ProtocolError('Invalid expires_in field: %s' % (why[0],))
+ 
+         # OpenID 1 has funny association session behaviour.
+@@ -1431,7 +1431,7 @@ class GenericConsumer(object):
+         # type.
+         try:
+             secret = assoc_session.extractSecret(assoc_response)
+-        except ValueError, why:
++        except ValueError as why:
+             fmt = 'Malformed response for %s session: %s'
+             raise ProtocolError(fmt % (assoc_session.session_type, why[0]))
+ 
+@@ -1777,7 +1777,7 @@ class SuccessResponse(Response):
+         """
+         msg_args = self.message.getArgs(ns_uri)
+ 
+-        for key in msg_args.iterkeys():
++        for key in msg_args.keys():
+             if not self.isSigned(ns_uri, key):
+                 oidutil.log("SuccessResponse.getSignedNS: (%s, %s) not signed."
+                             % (ns_uri, key))
+--- openid/consumer/discover.py.orig	2010-06-18 17:08:20 UTC
++++ openid/consumer/discover.py
+@@ -13,7 +13,7 @@ __all__ = [
+     'discover',
+     ]
+ 
+-import urlparse
++import urllib.parse
+ 
+ from openid import oidutil, fetchers, urinorm
+ 
+@@ -90,7 +90,7 @@ class OpenIDServiceEndpoint(object):
+         if self.claimed_id is None:
+             return None
+         else:
+-            return urlparse.urldefrag(self.claimed_id)[0]
++            return urllib.parse.urldefrag(self.claimed_id)[0]
+ 
+     def compatibilityMode(self):
+         return self.preferredNamespace() != OPENID_2_0_MESSAGE_NS
+@@ -304,10 +304,10 @@ def normalizeURL(url):
+     DiscoveryFailure"""
+     try:
+         normalized = urinorm.urinorm(url)
+-    except ValueError, why:
++    except ValueError as why:
+         raise DiscoveryFailure('Normalizing identifier: %s' % (why[0],), None)
+     else:
+-        return urlparse.urldefrag(normalized)[0]
++        return urllib.parse.urldefrag(normalized)[0]
+ 
+ def normalizeXRI(xri):
+     """Normalize an XRI, stripping its scheme if present"""
+@@ -324,7 +324,7 @@ def arrangeByType(service_list, preferred_types):
+         that element.
+ 
+         For Python 2.2 compatibility"""
+-        return zip(range(len(elts)), elts)
++        return list(zip(list(range(len(elts))), elts))
+ 
+     def bestMatchingService(service):
+         """Return the index of the first matching type, or something
+@@ -451,7 +451,7 @@ def discoverNoYadis(uri):
+     return claimed_id, openid_services
+ 
+ def discoverURI(uri):
+-    parsed = urlparse.urlparse(uri)
++    parsed = urllib.parse.urlparse(uri)
+     if parsed[0] and parsed[1]:
+         if parsed[0] not in ['http', 'https']:
+             raise DiscoveryFailure('URI scheme is not HTTP or HTTPS', None)
+--- openid/dh.py.orig	2010-06-18 17:08:20 UTC
++++ openid/dh.py
+@@ -5,11 +5,11 @@ def strxor(x, y):
+     if len(x) != len(y):
+         raise ValueError('Inputs to strxor must have the same length')
+ 
+-    xor = lambda (a, b): chr(ord(a) ^ ord(b))
+-    return "".join(map(xor, zip(x, y)))
++    xor = lambda a_b: chr(ord(a_b[0]) ^ ord(a_b[1]))
++    return "".join(map(xor, list(zip(x, y))))
+ 
+ class DiffieHellman(object):
+-    DEFAULT_MOD = 155172898181473697471232257763715539915724801966915404479707795314057629378541917580651227423698188993727816152646631438561595825688188889951272158842675419950341258706556549803580104870537681476726513255747040765857479291291572334510643245094715007229621094194349783925984760375594985848253359305585439638443L
++    DEFAULT_MOD = 155172898181473697471232257763715539915724801966915404479707795314057629378541917580651227423698188993727816152646631438561595825688188889951272158842675419950341258706556549803580104870537681476726513255747040765857479291291572334510643245094715007229621094194349783925984760375594985848253359305585439638443
+ 
+     DEFAULT_GEN = 2
+ 
+@@ -19,8 +19,8 @@ class DiffieHellman(object):
+     fromDefaults = classmethod(fromDefaults)
+ 
+     def __init__(self, modulus, generator):
+-        self.modulus = long(modulus)
+-        self.generator = long(generator)
++        self.modulus = int(modulus)
++        self.generator = int(generator)
+ 
+         self._setPrivate(cryptutil.randrange(1, modulus - 1))
+ 
+--- openid/extensions/ax.py.orig	2010-06-18 17:08:20 UTC
++++ openid/extensions/ax.py
+@@ -229,7 +229,7 @@ class FetchRequest(AXMessage):
+ 
+         ax_args = self._newArgs()
+ 
+-        for type_uri, attribute in self.requested_attributes.iteritems():
++        for type_uri, attribute in self.requested_attributes.items():
+             if attribute.alias is None:
+                 alias = aliases.add(type_uri)
+             else:
+@@ -275,7 +275,7 @@ class FetchRequest(AXMessage):
+         @rtype: [str]
+         """
+         required = []
+-        for type_uri, attribute in self.requested_attributes.iteritems():
++        for type_uri, attribute in self.requested_attributes.items():
+             if attribute.required:
+                 required.append(type_uri)
+ 
+@@ -304,7 +304,7 @@ class FetchRequest(AXMessage):
+         self = cls()
+         try:
+             self.parseExtensionArgs(ax_args)
+-        except NotAXMessage, err:
++        except NotAXMessage as err:
+             return None
+ 
+         if self.update_url:
+@@ -349,7 +349,7 @@ class FetchRequest(AXMessage):
+ 
+         aliases = NamespaceMap()
+ 
+-        for key, value in ax_args.iteritems():
++        for key, value in ax_args.items():
+             if key.startswith('type.'):
+                 alias = key[5:]
+                 type_uri = value
+@@ -392,7 +392,7 @@ class FetchRequest(AXMessage):
+         """Iterate over the AttrInfo objects that are
+         contained in this fetch_request.
+         """
+-        return self.requested_attributes.itervalues()
++        return iter(self.requested_attributes.values())
+ 
+     def __iter__(self):
+         """Iterate over the attribute type URIs in this fetch_request
+@@ -467,7 +467,7 @@ class AXKeyValueMessage(AXMessage):
+ 
+         ax_args = {}
+ 
+-        for type_uri, values in self.data.iteritems():
++        for type_uri, values in self.data.items():
+             alias = aliases.add(type_uri)
+ 
+             ax_args['type.' + alias] = type_uri
+@@ -499,20 +499,20 @@ class AXKeyValueMessage(AXMessage):
+ 
+         aliases = NamespaceMap()
+ 
+-        for key, value in ax_args.iteritems():
++        for key, value in ax_args.items():
+             if key.startswith('type.'):
+                 type_uri = value
+                 alias = key[5:]
+                 checkAlias(alias)
+                 aliases.addAlias(type_uri, alias)
+ 
+-        for type_uri, alias in aliases.iteritems():
++        for type_uri, alias in aliases.items():
+             try:
+                 count_s = ax_args['count.' + alias]
+             except KeyError:
+                 value = ax_args['value.' + alias]
+ 
+-                if value == u'':
++                if value == '':
+                     values = []
+                 else:
+                     values = [value]
+@@ -709,7 +709,7 @@ class FetchResponse(AXKeyValueMessage):
+ 
+         try:
+             self.parseExtensionArgs(ax_args)
+-        except NotAXMessage, err:
++        except NotAXMessage as err:
+             return None
+         else:
+             return self
+--- openid/extensions/sreg.py.orig	2010-06-18 17:08:20 UTC
++++ openid/extensions/sreg.py
+@@ -41,10 +41,10 @@ from openid.extension import Extension
+ from openid import oidutil
+ 
+ try:
+-    basestring #pylint:disable-msg=W0104
++    str #pylint:disable-msg=W0104
+ except NameError:
+     # For Python 2.2
+-    basestring = (str, unicode) #pylint:disable-msg=W0622
++    str = (str, str) #pylint:disable-msg=W0622
+ 
+ __all__ = [
+     'SRegRequest',
+@@ -94,7 +94,7 @@ ns_uri = ns_uri_1_1
+ 
+ try:
+     registerNamespaceAlias(ns_uri_1_1, 'sreg')
+-except NamespaceAliasRegistrationError, e:
++except NamespaceAliasRegistrationError as e:
+     oidutil.log('registerNamespaceAlias(%r, %r) failed: %s' % (ns_uri_1_1,
+                                                                'sreg', str(e),))
+ 
+@@ -156,7 +156,7 @@ def getSRegNS(message):
+         sreg_ns_uri = ns_uri_1_1
+         try:
+             message.namespaces.addAlias(ns_uri_1_1, 'sreg')
+-        except KeyError, why:
++        except KeyError as why:
+             # An alias for the string 'sreg' already exists, but it's
+             # defined for something other than simple registration
+             raise SRegNamespaceError(why[0])
+@@ -343,7 +343,7 @@ class SRegRequest(Extension):
+             registration field or strict is set and a field was
+             requested more than once
+         """
+-        if isinstance(field_names, basestring):
++        if isinstance(field_names, str):
+             raise TypeError('Fields should be passed as a list of '
+                             'strings (not %r)' % (type(field_names),))
+ 
+@@ -489,16 +489,16 @@ class SRegResponse(Extension):
+     def items(self):
+         """All of the data values in this simple registration response
+         """
+-        return self.data.items()
++        return list(self.data.items())
+ 
+     def iteritems(self):
+-        return self.data.iteritems()
++        return iter(self.data.items())
+ 
+     def keys(self):
+-        return self.data.keys()
++        return list(self.data.keys())
+ 
+     def iterkeys(self):
+-        return self.data.iterkeys()
++        return iter(self.data.keys())
+ 
+     def has_key(self, key):
+         return key in self
+@@ -514,5 +514,5 @@ class SRegResponse(Extension):
+         checkFieldName(field_name)
+         return self.data[field_name]
+ 
+-    def __nonzero__(self):
++    def __bool__(self):
+         return bool(self.data)
+--- openid/fetchers.py.orig	2010-06-18 17:08:20 UTC
++++ openid/fetchers.py
+@@ -7,9 +7,9 @@ __all__ = ['fetch', 'getDefaultFetcher', 'setDefaultFe
+            'HTTPFetcher', 'createHTTPFetcher', 'HTTPFetchingError',
+            'HTTPError']
+ 
+-import urllib2
++import urllib.request, urllib.error, urllib.parse
+ import time
+-import cStringIO
++import io
+ import sys
+ 
+ import openid
+@@ -186,7 +186,7 @@ class Urllib2Fetcher(HTTPFetcher):
+ 
+     # Parameterized for the benefit of testing frameworks, see
+     # http://trac.openidenabled.com/trac/ticket/85
+-    urlopen = staticmethod(urllib2.urlopen)
++    urlopen = staticmethod(urllib.request.urlopen)
+ 
+     def fetch(self, url, body=None, headers=None):
+         if not _allowedURL(url):
+@@ -199,14 +199,14 @@ class Urllib2Fetcher(HTTPFetcher):
+             'User-Agent',
+             "%s Python-urllib/%s" % (USER_AGENT, urllib2.__version__,))
+ 
+-        req = urllib2.Request(url, data=body, headers=headers)
++        req = urllib.request.Request(url, data=body, headers=headers)
+         try:
+             f = self.urlopen(req)
+             try:
+                 return self._makeResponse(f)
+             finally:
+                 f.close()
+-        except urllib2.HTTPError, why:
++        except urllib.error.HTTPError as why:
+             try:
+                 return self._makeResponse(why)
+             finally:
+@@ -216,7 +216,7 @@ class Urllib2Fetcher(HTTPFetcher):
+         resp = HTTPResponse()
+         resp.body = urllib2_response.read(MAX_RESPONSE_KB * 1024)
+         resp.final_url = urllib2_response.geturl()
+-        resp.headers = dict(urllib2_response.info().items())
++        resp.headers = dict(list(urllib2_response.info().items()))
+ 
+         if hasattr(urllib2_response, 'code'):
+             resp.status = urllib2_response.code
+@@ -294,7 +294,7 @@ class CurlHTTPFetcher(HTTPFetcher):
+ 
+         header_list = []
+         if headers is not None:
+-            for header_name, header_value in headers.iteritems():
++            for header_name, header_value in headers.items():
+                 header_list.append('%s: %s' % (header_name, header_value))
+ 
+         c = pycurl.Curl()
+@@ -313,14 +313,14 @@ class CurlHTTPFetcher(HTTPFetcher):
+                 if not self._checkURL(url):
+                     raise HTTPError("Fetching URL not allowed: %r" % (url,))
+ 
+-                data = cStringIO.StringIO()
++                data = io.StringIO()
+                 def write_data(chunk):
+                     if data.tell() > 1024*MAX_RESPONSE_KB:
+                         return 0
+                     else:
+                         return data.write(chunk)
+                     
+-                response_header_data = cStringIO.StringIO()
++                response_header_data = io.StringIO()
+                 c.setopt(pycurl.WRITEFUNCTION, write_data)
+                 c.setopt(pycurl.HEADERFUNCTION, response_header_data.write)
+                 c.setopt(pycurl.TIMEOUT, off)
+@@ -422,6 +422,6 @@ class HTTPLib2Fetcher(HTTPFetcher):
+         return HTTPResponse(
+             body=content,
+             final_url=final_url,
+-            headers=dict(httplib2_response.items()),
++            headers=dict(list(httplib2_response.items())),
+             status=httplib2_response.status,
+             )
+--- openid/message.py.orig	2010-06-18 17:08:20 UTC
++++ openid/message.py
+@@ -6,7 +6,7 @@ __all__ = ['Message', 'NamespaceMap', 'no_default', 'r
+ 
+ import copy
+ import warnings
+-import urllib
++import urllib.request, urllib.parse, urllib.error
+ 
+ from openid import oidutil
+ from openid import kvform
+@@ -100,13 +100,11 @@ def registerNamespaceAlias(namespace_uri, alias):
+     if registered_aliases.get(alias) == namespace_uri:
+         return
+ 
+-    if namespace_uri in registered_aliases.values():
+-        raise NamespaceAliasRegistrationError, \
+-              'Namespace uri %r already registered' % (namespace_uri,)
++    if namespace_uri in list(registered_aliases.values()):
++        raise NamespaceAliasRegistrationError('Namespace uri %r already registered' % (namespace_uri,))
+ 
+     if alias in registered_aliases:
+-        raise NamespaceAliasRegistrationError, \
+-              'Alias %r already registered' % (alias,)
++        raise NamespaceAliasRegistrationError('Alias %r already registered' % (alias,))
+ 
+     registered_aliases[alias] = namespace_uri
+ 
+@@ -148,7 +146,7 @@ class Message(object):
+ 
+         # Partition into "openid." args and bare args
+         openid_args = {}
+-        for key, value in args.items():
++        for key, value in list(args.items()):
+             if isinstance(value, list):
+                 raise TypeError("query dict must have one value for each key, "
+                                 "not lists of values.  Query is %r" % (args,))
+@@ -186,7 +184,7 @@ class Message(object):
+         ns_args = []
+ 
+         # Resolve namespaces
+-        for rest, value in openid_args.iteritems():
++        for rest, value in openid_args.items():
+             try:
+                 ns_alias, ns_key = rest.split('.', 1)
+             except ValueError:
+@@ -266,7 +264,7 @@ class Message(object):
+         args = {}
+ 
+         # Add namespace definitions to the output
+-        for ns_uri, alias in self.namespaces.iteritems():
++        for ns_uri, alias in self.namespaces.items():
+             if self.namespaces.isImplicit(ns_uri):
+                 continue
+             if alias == NULL_NAMESPACE:
+@@ -275,7 +273,7 @@ class Message(object):
+                 ns_key = 'openid.ns.' + alias
+             args[ns_key] = ns_uri
+ 
+-        for (ns_uri, ns_key), value in self.args.iteritems():
++        for (ns_uri, ns_key), value in self.args.items():
+             key = self.getKey(ns_uri, ns_key)
+             args[key] = value.encode('UTF-8')
+ 
+@@ -287,7 +285,7 @@ class Message(object):
+         # FIXME - undocumented exception
+         post_args = self.toPostArgs()
+         kvargs = {}
+-        for k, v in post_args.iteritems():
++        for k, v in post_args.items():
+             if not k.startswith('openid.'):
+                 raise ValueError(
+                     'This message can only be encoded as a POST, because it '
+@@ -327,7 +325,7 @@ class Message(object):
+         form = ElementTree.Element('form')
+ 
+         if form_tag_attrs:
+-            for name, attr in form_tag_attrs.iteritems():
++            for name, attr in form_tag_attrs.items():
+                 form.attrib[name] = attr
+ 
+         form.attrib['action'] = action_url
+@@ -335,7 +333,7 @@ class Message(object):
+         form.attrib['accept-charset'] = 'UTF-8'
+         form.attrib['enctype'] = 'application/x-www-form-urlencoded'
+ 
+-        for name, value in self.toPostArgs().iteritems():
++        for name, value in self.toPostArgs().items():
+             attrs = {'type': 'hidden',
+                      'name': name,
+                      'value': value}
+@@ -361,9 +359,9 @@ class Message(object):
+ 
+     def toURLEncoded(self):
+         """Generate an x-www-urlencoded string"""
+-        args = self.toPostArgs().items()
++        args = list(self.toPostArgs().items())
+         args.sort()
+-        return urllib.urlencode(args)
++        return urllib.parse.urlencode(args)
+ 
+     def _fixNS(self, namespace):
+         """Convert an input value into the internally used values of
+@@ -378,7 +376,7 @@ class Message(object):
+             else:
+                 namespace = self._openid_ns_uri
+ 
+-        if namespace != BARE_NS and type(namespace) not in [str, unicode]:
++        if namespace != BARE_NS and type(namespace) not in [str, str]:
+             raise TypeError(
+                 "Namespace must be BARE_NS, OPENID_NS or a string. got %r"
+                 % (namespace,))
+@@ -456,7 +454,7 @@ class Message(object):
+         return dict([
+             (ns_key, value)
+             for ((pair_ns, ns_key), value)
+-            in self.args.iteritems()
++            in self.args.items()
+             if pair_ns == namespace
+             ])
+ 
+@@ -467,7 +465,7 @@ class Message(object):
+         @type updates: {unicode:unicode}
+         """
+         namespace = self._fixNS(namespace)
+-        for k, v in updates.iteritems():
++        for k, v in updates.items():
+             self.setArg(namespace, k, v)
+ 
+     def setArg(self, namespace, key, value):
+@@ -551,7 +549,7 @@ class NamespaceMap(object):
+ 
+         @returns: iterator of (namespace_uri, alias)
+         """
+-        return self.namespace_to_alias.iteritems()
++        return iter(self.namespace_to_alias.items())
+ 
+     def addAlias(self, namespace_uri, desired_alias, implicit=False):
+         """Add an alias from this namespace URI to the desired alias
+@@ -563,7 +561,7 @@ class NamespaceMap(object):
+ 
+         # Check that desired_alias does not contain a period as per
+         # the spec.
+-        if type(desired_alias) in [str, unicode]:
++        if type(desired_alias) in [str, str]:
+             assert '.' not in desired_alias, \
+                    "%r must not contain a dot" % (desired_alias,)
+ 
+@@ -592,7 +590,7 @@ class NamespaceMap(object):
+             raise KeyError(fmt % (namespace_uri, desired_alias, alias))
+ 
+         assert (desired_alias == NULL_NAMESPACE or
+-                type(desired_alias) in [str, unicode]), repr(desired_alias)
++                type(desired_alias) in [str, str]), repr(desired_alias)
+         assert namespace_uri not in self.implicit_namespaces
+         self.alias_to_namespace[desired_alias] = namespace_uri
+         self.namespace_to_alias[namespace_uri] = desired_alias
+--- openid/oidutil.py.orig	2010-06-18 17:08:20 UTC
++++ openid/oidutil.py
+@@ -9,9 +9,9 @@ __all__ = ['log', 'appendArgs', 'toBase64', 'fromBase6
+ 
+ import binascii
+ import sys
+-import urlparse
++import urllib.parse
+ 
+-from urllib import urlencode
++from urllib.parse import urlencode
+ 
+ elementtree_modules = [
+     'lxml.etree',
+@@ -129,7 +129,7 @@ def appendArgs(url, args):
+     @rtype: str
+     """
+     if hasattr(args, 'items'):
+-        args = args.items()
++        args = list(args.items())
+         args.sort()
+     else:
+         args = list(args)
+@@ -164,7 +164,7 @@ def toBase64(s):
+ def fromBase64(s):
+     try:
+         return binascii.a2b_base64(s)
+-    except binascii.Error, why:
++    except binascii.Error as why:
+         # Convert to a common exception type
+         raise ValueError(why[0])
+ 
+--- openid/server/server.py.orig	2010-06-18 17:08:20 UTC
++++ openid/server/server.py
+@@ -438,7 +438,7 @@ class AssociateRequest(OpenIDRequest):
+ 
+         try:
+             session = session_class.fromMessage(message)
+-        except ValueError, why:
++        except ValueError as why:
+             raise ProtocolError(message, 'Error parsing %s session: %s' %
+                                 (session_class.session_type, why[0]))
+ 
+@@ -1177,7 +1177,7 @@ class Signatory(object):
+ 
+         try:
+             valid = assoc.checkMessageSignature(message)
+-        except ValueError, ex:
++        except ValueError as ex:
+             oidutil.log("Error in verifying %s with %s: %s" % (message,
+                                                                assoc,
+                                                                ex))
+@@ -1225,7 +1225,7 @@ class Signatory(object):
+ 
+         try:
+             signed_response.fields = assoc.signMessage(signed_response.fields)
+-        except kvform.KVFormError, err:
++        except kvform.KVFormError as err:
+             raise EncodingError(response, explanation=str(err))
+         return signed_response
+ 
+@@ -1425,7 +1425,7 @@ class Decoder(object):
+ 
+         try:
+             message = Message.fromPostArgs(query)
+-        except InvalidOpenIDNamespace, err:
++        except InvalidOpenIDNamespace as err:
+             # It's useful to have a Message attached to a ProtocolError, so we
+             # override the bad ns value to build a Message out of it.  Kinda
+             # kludgy, since it's made of lies, but the parts that aren't lies
+@@ -1647,7 +1647,7 @@ class ProtocolError(Exception):
+         self.openid_message = message
+         self.reference = reference
+         self.contact = contact
+-        assert type(message) not in [str, unicode]
++        assert type(message) not in [str, str]
+         Exception.__init__(self, text)
+ 
+ 
+--- openid/server/trustroot.py.orig	2010-06-18 17:08:20 UTC
++++ openid/server/trustroot.py
+@@ -21,7 +21,7 @@ from openid import oidutil
+ from openid import urinorm
+ from openid.yadis import services
+ 
+-from urlparse import urlparse, urlunparse
++from urllib.parse import urlparse, urlunparse
+ import re
+ 
+ ############################################
+@@ -442,7 +442,7 @@ def verifyReturnTo(realm_str, return_to, _vrfy=getAllo
+ 
+     try:
+         allowable_urls = _vrfy(realm.buildDiscoveryURL())
+-    except RealmVerificationRedirected, err:
++    except RealmVerificationRedirected as err:
+         oidutil.log(str(err))
+         return False
+ 
+--- openid/store/filestore.py.orig	2010-06-18 17:08:20 UTC
++++ openid/store/filestore.py
+@@ -24,8 +24,8 @@ except ImportError:
+         for _ in range(5):
+             name = os.tempnam(dir)
+             try:
+-                fd = os.open(name, os.O_CREAT | os.O_EXCL | os.O_RDWR, 0600)
+-            except OSError, why:
++                fd = os.open(name, os.O_CREAT | os.O_EXCL | os.O_RDWR, 0o600)
++            except OSError as why:
+                 if why.errno != EEXIST:
+                     raise
+             else:
+@@ -82,7 +82,7 @@ def _removeIfPresent(filename):
+     """
+     try:
+         os.unlink(filename)
+-    except OSError, why:
++    except OSError as why:
+         if why.errno == ENOENT:
+             # Someone beat us to it, but it's gone, so that's OK
+             return 0
+@@ -102,7 +102,7 @@ def _ensureDir(dir_name):
+     """
+     try:
+         os.makedirs(dir_name)
+-    except OSError, why:
++    except OSError as why:
+         if why.errno != EEXIST or not os.path.isdir(dir_name):
+             raise
+ 
+@@ -220,7 +220,7 @@ class FileOpenIDStore(OpenIDStore):
+ 
+             try:
+                 os.rename(tmp, filename)
+-            except OSError, why:
++            except OSError as why:
+                 if why.errno != EEXIST:
+                     raise
+ 
+@@ -229,7 +229,7 @@ class FileOpenIDStore(OpenIDStore):
+                 # file, but not in putting the temporary file in place.
+                 try:
+                     os.unlink(filename)
+-                except OSError, why:
++                except OSError as why:
+                     if why.errno == ENOENT:
+                         pass
+                     else:
+@@ -289,7 +289,7 @@ class FileOpenIDStore(OpenIDStore):
+     def _getAssociation(self, filename):
+         try:
+             assoc_file = file(filename, 'rb')
+-        except IOError, why:
++        except IOError as why:
+             if why.errno == ENOENT:
+                 # No association exists for that URL and handle
+                 return None
+@@ -350,8 +350,8 @@ class FileOpenIDStore(OpenIDStore):
+ 
+         filename = os.path.join(self.nonce_dir, filename)
+         try:
+-            fd = os.open(filename, os.O_CREAT | os.O_EXCL | os.O_WRONLY, 0200)
+-        except OSError, why:
++            fd = os.open(filename, os.O_CREAT | os.O_EXCL | os.O_WRONLY, 0o200)
++        except OSError as why:
+             if why.errno == EEXIST:
+                 return False
+             else:
+@@ -363,13 +363,11 @@ class FileOpenIDStore(OpenIDStore):
+     def _allAssocs(self):
+         all_associations = []
+ 
+-        association_filenames = map(
+-            lambda filename: os.path.join(self.association_dir, filename),
+-            os.listdir(self.association_dir))
++        association_filenames = [os.path.join(self.association_dir, filename) for filename in os.listdir(self.association_dir)]
+         for association_filename in association_filenames:
+             try:
+                 association_file = file(association_filename, 'rb')
+-            except IOError, why:
++            except IOError as why:
+                 if why.errno == ENOENT:
+                     oidutil.log("%s disappeared during %s._allAssocs" % (
+                         association_filename, self.__class__.__name__))
+--- openid/store/sqlstore.py.orig	2010-06-18 17:08:20 UTC
++++ openid/store/sqlstore.py
+@@ -139,11 +139,11 @@ class SQLStore(OpenIDStore):
+         # Currently the strings in our tables just have ascii in them,
+         # so this ought to be safe.
+         def unicode_to_str(arg):
+-            if isinstance(arg, unicode):
++            if isinstance(arg, str):
+                 return str(arg)
+             else:
+                 return arg
+-        str_args = map(unicode_to_str, args)
++        str_args = list(map(unicode_to_str, args))
+         self.cur.execute(sql, str_args)
+ 
+     def __getattr__(self, attr):
+@@ -349,7 +349,7 @@ class SQLiteStore(SQLStore):
+         # message from the OperationalError.
+         try:
+             return super(SQLiteStore, self).useNonce(*args, **kwargs)
+-        except self.exceptions.OperationalError, why:
++        except self.exceptions.OperationalError as why:
+             if re.match('^columns .* are not unique$', why[0]):
+                 return False
+             else:
+--- openid/urinorm.py.orig	2010-06-18 17:08:20 UTC
++++ openid/urinorm.py
+@@ -22,7 +22,7 @@ pct_encoded_pattern = r'%([0-9A-Fa-f]{2})'
+ pct_encoded_re = re.compile(pct_encoded_pattern)
+ 
+ try:
+-    unichr(0x10000)
++    chr(0x10000)
+ except ValueError:
+     # narrow python build
+     UCSCHAR = [
+@@ -73,8 +73,7 @@ _unreserved[ord('~')] = True
+ 
+ 
+ _escapeme_re = re.compile('[%s]' % (''.join(
+-    map(lambda (m, n): u'%s-%s' % (unichr(m), unichr(n)),
+-        UCSCHAR + IPRIVATE)),))
++    ['%s-%s' % (chr(m_n[0]), chr(m_n[1])) for m_n in UCSCHAR + IPRIVATE]),))
+ 
+ 
+ def _pct_escape_unicode(char_match):
+@@ -137,7 +136,7 @@ def remove_dot_segments(path):
+ 
+ 
+ def urinorm(uri):
+-    if isinstance(uri, unicode):
++    if isinstance(uri, str):
+         uri = _escapeme_re.sub(_pct_escape_unicode, uri).encode('ascii')
+ 
+     illegal_mo = uri_illegal_char_re.search(uri)
+@@ -171,7 +170,7 @@ def urinorm(uri):
+     if '%' in host:
+         host = host.lower()
+         host = pct_encoded_re.sub(_pct_encoded_replace, host)
+-        host = unicode(host, 'utf-8').encode('idna')
++        host = str(host, 'utf-8').encode('idna')
+     else:
+         host = host.lower()
+ 
+--- openid/yadis/etxrd.py.orig	2010-06-18 17:08:20 UTC
++++ openid/yadis/etxrd.py
+@@ -67,7 +67,7 @@ def parseXRDS(text):
+     """
+     try:
+         element = ElementTree.XML(text)
+-    except XMLError, why:
++    except XMLError as why:
+         exc = XRDSError('Error parsing document as XML')
+         exc.reason = why
+         raise exc
+--- openid/yadis/parsehtml.py.orig	2010-06-18 17:08:20 UTC
++++ openid/yadis/parsehtml.py
+@@ -1,7 +1,7 @@
+ __all__ = ['findHTMLMeta', 'MetaNotFound']
+ 
+-from HTMLParser import HTMLParser, HTMLParseError
+-import htmlentitydefs
++from html.parser import HTMLParser, HTMLParseError
++import html.entities
+ import re
+ 
+ from openid.yadis.constants import YADIS_HEADER_NAME
+@@ -39,12 +39,12 @@ def substituteMO(mo):
+         codepoint = int(mo.group('dec'))
+     else:
+         assert mo.lastgroup == 'word'
+-        codepoint = htmlentitydefs.name2codepoint.get(mo.group('word'))
++        codepoint = html.entities.name2codepoint.get(mo.group('word'))
+ 
+     if codepoint is None:
+         return mo.group()
+     else:
+-        return unichr(codepoint)
++        return chr(codepoint)
+ 
+ def substituteEntities(s):
+     return ent_re.sub(substituteMO, s)
+@@ -180,11 +180,11 @@ def findHTMLMeta(stream):
+         chunks.append(chunk)
+         try:
+             parser.feed(chunk)
+-        except HTMLParseError, why:
++        except HTMLParseError as why:
+             # HTML parse error, so bail
+             chunks.append(stream.read())
+             break
+-        except ParseDone, why:
++        except ParseDone as why:
+             uri = why[0]
+             if uri is None:
+                 # Parse finished, but we may need the rest of the file
+--- openid/yadis/services.py.orig	2010-06-18 17:08:20 UTC
++++ openid/yadis/services.py
+@@ -26,7 +26,7 @@ def getServiceEndpoints(input_url, flt=None):
+     try:
+         endpoints = applyFilter(result.normalized_uri,
+                                 result.response_text, flt)
+-    except XRDSError, err:
++    except XRDSError as err:
+         raise DiscoveryFailure(str(err), None)
+     return (result.normalized_uri, endpoints)
+ 
+--- openid/yadis/xri.py.orig	2010-06-18 17:08:20 UTC
++++ openid/yadis/xri.py
*** 33 LINES SKIPPED ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202203251350.22PDou4P037614>