From nobody Fri Mar 25 13:49:57 2022 X-Original-To: dev-commits-ports-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 349481A33C8F; Fri, 25 Mar 2022 13:49:59 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4KQ3PL5YNpz3R2Z; Fri, 25 Mar 2022 13:49:58 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1648216199; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=sNSXUgOXfFXzC3oPHY0KYTZVOhP4mC8dpHGyvE/tLv0=; b=npktrzAqGsD2kHk2J1cl0lOpCwZdfKuJD4bGUp1BprN02VHO4s4AFWB4wgyBf4ue8EMObo PbjZ4exIkeL72oroCrbU+NQz5FcqdVuIG9Y/XmASqbW1CXeWbZuLPrONgVIZtFkfqRO1AE sNV8Fsu8zteu4TsJms6G/QeuwNroZ9dC8hAZEIpZyfgjlKp1nn4UMgt3fdGL4j6rGXYEzD 9mIjY4ZOgdzexy18dyC+KuwWdcEoiYJO+c3BrVfJwKCrWwRkJhYaVTQuWp4e58bww3Vmaz xu3tC7YH3T6vhPvfGI4YycHL0+Rol3AzEZokNbC0fhGY5D1tZzXLCX34z/T8Lw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 55B92594E; Fri, 25 Mar 2022 13:49:57 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 22PDnvK6028020; Fri, 25 Mar 2022 13:49:57 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 22PDnv2u028019; Fri, 25 Mar 2022 13:49:57 GMT (envelope-from git) Date: Fri, 25 Mar 2022 13:49:57 GMT Message-Id: <202203251349.22PDnv2u028019@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Po-Chuan Hsieh Subject: git: 203a8354312c - main - devel/py-dal: Fix build with setuptools 58.0.0+ List-Id: Commits to the main branch of the FreeBSD ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-ports-main@freebsd.org X-BeenThere: dev-commits-ports-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: sunpoet X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 203a8354312c299848124f96442aba46c2517876 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1648216199; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=sNSXUgOXfFXzC3oPHY0KYTZVOhP4mC8dpHGyvE/tLv0=; b=XqW+qDjz3K/8YLE6nHcvRyh/ZTHJCmeQijN/RPlh8aCxYxrRDmsemg1iGzavcl6phFnV/6 ZZQ0D+m9NkizwMn+DnrIEqo9iIn0nS9sJ8VmOr8m98GMZSb+66HYbPL6bFvpfCcAexnvs4 T+BV+kdwMNAQ14gKGVfvh1FiHlWnfuemTQXJcTR9RxAh12SEDTXUTIcaYkxdydgYS8DweV 34GQkyOfa6IGzr9TE6RfGcZgwcDZd2X/65HWSZ26E9hPIxeCXjgxAgJx/iISZHrROOJwwu CWbiok8Mc9WjlF6KLW3Yl9zbqc+8u85mTbyzSgvOngzS1R+AizptuR5Pe+4CAA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1648216199; a=rsa-sha256; cv=none; b=gbXZsNNSE0k1M40JREWunC2ghwiLyyNevZdWCm8igxIt9Q/Z3eQfghbgYBYQ1Cu2OJaAl3 fujyb70CK6z680NCS8Zb/Pi++MZ613xCgkjX6LZvU9FsADTjNAbk0UGjbcay1pK8eCNir2 atXz9T4lac1+Kx+fFHMBtebAnTURyYtIbBEH7UnqJSjrvv9pXKIsXTDVqSVISGjcl+HLxs /kWzcXpY/s01yNzjX4WxQKtb9c3NZBhg6kQT1lUKkRPRAIpoQSzO+MdMNgT3gFasGfEkDm hq6BxVSStOxv6QElEJXVNhr0IW9SSPwIbMmRt8K/dvxfJo/0aHc+vpn5wjsVPA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by sunpoet: URL: https://cgit.FreeBSD.org/ports/commit/?id=203a8354312c299848124f96442aba46c2517876 commit 203a8354312c299848124f96442aba46c2517876 Author: Po-Chuan Hsieh AuthorDate: 2022-03-25 13:32:14 +0000 Commit: Po-Chuan Hsieh CommitDate: 2022-03-25 13:38:08 +0000 devel/py-dal: Fix build with setuptools 58.0.0+ With hat: python --- devel/py-dal/files/patch-2to3 | 604 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 604 insertions(+) diff --git a/devel/py-dal/files/patch-2to3 b/devel/py-dal/files/patch-2to3 new file mode 100644 index 000000000000..fa087e1eeacc --- /dev/null +++ b/devel/py-dal/files/patch-2to3 @@ -0,0 +1,604 @@ +--- dal/dbapi/db_row.py.orig 2008-07-25 06:05:12 UTC ++++ dal/dbapi/db_row.py +@@ -275,11 +275,11 @@ class MetaFields(type): + + for f in fields: + if type(f) is not str: +- raise TypeError, 'Field names must be ASCII strings' ++ raise TypeError('Field names must be ASCII strings') + if not f: +- raise ValueError, 'Field names cannot be empty' ++ raise ValueError('Field names cannot be empty') + if f in field_names: +- raise ValueError, 'Field names must be unique: %s' % f ++ raise ValueError('Field names must be unique: %s' % f) + + slots.append(f) + field_names[f] = 1 +@@ -313,7 +313,7 @@ class IMetaFields(MetaFields): + try: + ifields = tuple( [ f.lower() for f in fields ] ) + except AttributeError: +- raise TypeError, 'Field names must be ASCII strings' ++ raise TypeError('Field names must be ASCII strings') + + super(IMetaFields,cls).build_properties(cls, ifields, field_dict) + field_dict['__fields__'] = tuple(fields) +@@ -459,7 +459,7 @@ except ImportError: + super(IFieldsBase, self).__setattr__(key.lower(),None) + + +-class Fields(FieldsBase): ++class Fields(FieldsBase, metaclass=MetaFields): + '''Fields: + + A tuple-like base-class that gains properties to allow access to +@@ -469,12 +469,10 @@ class Fields(FieldsBase): + is case-sensitive, though case-insensitive objects may be created by + inheriting from the IFields base-class. + ''' +- +- __metaclass__ = MetaFields + __slots__ = () + + +-class IFields(IFieldsBase): ++class IFields(IFieldsBase, metaclass=IMetaFields): + '''IFields: + + A tuple-like base-class that gains properties to allow access to +@@ -484,8 +482,6 @@ class IFields(IFieldsBase): + is case-insensitive, though case-sensitive objects may be created by + inheriting from the Fields base-class. + ''' +- +- __metaclass__ = IMetaFields + __slots__ = () + + +@@ -513,7 +509,7 @@ except ImportError: + try: + return getattr(self.fields,key) + except AttributeError: +- raise KeyError,key ++ raise KeyError(key) + return self.fields.__getitem__(key) + + def __setitem__(self, key, value): +@@ -521,7 +517,7 @@ except ImportError: + try: + setattr(self.fields,key,value) + except AttributeError: +- raise KeyError,key ++ raise KeyError(key) + else: + self.fields.__setitem__(key,value) + +@@ -530,7 +526,7 @@ except ImportError: + try: + delattr(self.fields,key) + except AttributeError: +- raise KeyError,key ++ raise KeyError(key) + else: + self.fields.__delitem__(key) + +@@ -544,7 +540,7 @@ except ImportError: + self.fields.__delslice__(i, j) + + def __hash__(self): +- raise NotImplementedError,'Row objects are not hashable' ++ raise NotImplementedError('Row objects are not hashable') + + def __len__(self): + return len(self.fields) +@@ -622,7 +618,7 @@ class Row(RowBase): + + def items(self): + '''r.items() -> tuple of r's (field, value) pairs, as 2-tuples''' +- return zip(self.keys(),self.fields) ++ return list(zip(list(self.keys()),self.fields)) + + def get(self, key, default=None): + if not isinstance(key, str): +@@ -638,14 +634,14 @@ class Row(RowBase): + + def dict(self): + '''r.dict() -> dictionary mapping r's fields to its values''' +- return dict(self.items()) ++ return dict(list(self.items())) + + def copy(self): + '''r.copy() -> a shallow copy of r''' + return type(self)(self) + + def __hash__(self): +- raise NotImplementedError,'Row objects are not hashable' ++ raise NotImplementedError('Row objects are not hashable') + + + class IRow(Row): +@@ -662,7 +658,7 @@ class IRow(Row): + def has_key(self, key): + if isinstance(key, str): + key = key.lower() +- return super(IRow, self).has_key(key) ++ return key in super(IRow, self) + + + class MetaRowBase(type): +@@ -789,7 +785,7 @@ class NullRow(type(Nothing)): + return 0 + def __ne__(self, other): + return 1 +- def __nonzero__(self): ++ def __bool__(self): + return 0 + + +@@ -802,21 +798,21 @@ def test(cls): + assert d['c']==d[2]==d.fields.c==d.fields[2]==3 + + assert len(d) == 3 +- assert d.has_key('a') +- assert d.has_key('B') +- assert d.has_key('c') ++ assert 'a' in d ++ assert 'B' in d ++ assert 'c' in d + assert 'd' not in d + assert 1 in d + assert 2 in d + assert 3 in d + assert 4 not in d +- assert not d.has_key(4) +- assert not d.has_key('d') ++ assert 4 not in d ++ assert 'd' not in d + assert d[-1] == 3 + assert d[1:3] == (2,3) + +- assert d.keys() == ('a','B','c') +- assert d.items() == [('a', 1), ('B', 2), ('c', 3)] ++ assert list(d.keys()) == ('a','B','c') ++ assert list(d.items()) == [('a', 1), ('B', 2), ('c', 3)] + assert d.dict() == {'a': 1, 'c': 3, 'B': 2} + assert d.copy() == d + assert d == d.copy() +@@ -849,19 +845,19 @@ def test(cls): + + try: + d[4] +- raise AssertionError, 'Illegal index not caught' ++ raise AssertionError('Illegal index not caught') + except IndexError: + pass + + try: + d['f'] +- raise AssertionError, 'Illegal key not caught' ++ raise AssertionError('Illegal key not caught') + except KeyError: + pass + + try: + d.fields.f +- raise AssertionError, 'Illegal attribute not caught' ++ raise AssertionError('Illegal attribute not caught') + except AttributeError: + pass + +@@ -874,14 +870,14 @@ def test_insensitive(cls): + assert d['b']==d['B']==d[1]==d.fields.B==d.fields.b==d.fields[1]==2 + assert d['c']==d['C']==d[2]==d.fields.C==d.fields.c==d.fields[2]==3 + +- assert d.has_key('a') +- assert d.has_key('A') +- assert d.has_key('b') +- assert d.has_key('B') +- assert d.has_key('c') +- assert d.has_key('C') +- assert not d.has_key('d') +- assert not d.has_key('D') ++ assert 'a' in d ++ assert 'A' in d ++ assert 'b' in d ++ assert 'B' in d ++ assert 'c' in d ++ assert 'C' in d ++ assert 'd' not in d ++ assert 'D' not in d + + assert 1 in d + assert 2 in d +@@ -975,37 +971,37 @@ def test_rw(cls): + + try: + d['g'] = 'illegal' +- raise AssertionError,'Illegal setitem' ++ raise AssertionError('Illegal setitem') + except KeyError: + pass + + try: + del d['g'] +- raise AssertionError,'Illegal delitem' ++ raise AssertionError('Illegal delitem') + except KeyError: + pass + + try: + d[5] = 'illegal' +- raise AssertionError,'Illegal setitem' ++ raise AssertionError('Illegal setitem') + except IndexError: + pass + + try: + del d[5] +- raise AssertionError,'Illegal delitem' ++ raise AssertionError('Illegal delitem') + except IndexError: + pass + + try: + d.fields.g = 'illegal' +- raise AssertionError,'Illegal setattr' ++ raise AssertionError('Illegal setattr') + except AttributeError: + pass + + try: + del d.fields.g +- raise AssertionError,'Illegal delattr' ++ raise AssertionError('Illegal delattr') + except AttributeError: + pass + +@@ -1066,25 +1062,25 @@ def test_incomplete(cls): + + try: + d['B'] +- raise AssertionError,'Illegal getitem: "%s"' % d['B'] ++ raise AssertionError('Illegal getitem: "%s"' % d['B']) + except KeyError: + pass + + try: + d['c'] +- raise AssertionError,'Illegal getitem' ++ raise AssertionError('Illegal getitem') + except KeyError: + pass + + try: + d.fields.b +- raise AssertionError,'Illegal getattr' ++ raise AssertionError('Illegal getattr') + except AttributeError: + pass + + try: + d.fields.c +- raise AssertionError,'Illegal getattr' ++ raise AssertionError('Illegal getattr') + except AttributeError: + pass + +@@ -1121,12 +1117,12 @@ if __name__ == '__main__': + gc.collect() + new_objects = len(gc.get_objects()) - orig_objects + if new_objects >= N: +- print "WARNING: Detected memory leak of %d objects." % new_objects ++ print("WARNING: Detected memory leak of %d objects." % new_objects) + if sys.version_info >= (2,2,2): +- print " Please notify jacobs@theopalgroup.com immediately." ++ print(" Please notify jacobs@theopalgroup.com immediately.") + else: +- print " You are running a Python older than 2.2.1 or older. Several" +- print " memory leaks in the core interepreter were fixed in version" +- print " 2.2.2, so we strongly recommend upgrading." ++ print(" You are running a Python older than 2.2.1 or older. Several") ++ print(" memory leaks in the core interepreter were fixed in version") ++ print(" 2.2.2, so we strongly recommend upgrading.") + +- print 'Tests passed' ++ print('Tests passed') +--- dal/dbapi/dbapi.py.orig 2008-10-16 05:52:44 UTC ++++ dal/dbapi/dbapi.py +@@ -83,9 +83,9 @@ print cs.fetchone()[0] + + __revision__ = 0.1 + +-import dbtime +-import dbexceptions +-import paramstyles ++from . import dbtime ++from . import dbexceptions ++from . import paramstyles + + class MWrapper(object): + """Wraps DBAPI2 driver.""" +@@ -149,10 +149,10 @@ class MWrapper(object): + assert dtmodname in ('py', 'mx', 'native') + if dtmodname == 'py': + if not dbtime.have_datetime: +- raise Exception, 'datetime module not available.' ++ raise Exception('datetime module not available.') + elif dtmodname == 'mx': + if not dbtime.have_mxDateTime: +- raise Exception, 'mx.DateTime module not available.' ++ raise Exception('mx.DateTime module not available.') + self.__dtmod = dtmodname + + dtmod = property(__getDtMod, __setDtMod) +@@ -162,7 +162,7 @@ class MWrapper(object): + + def __setUseDbRow(self, use_db_row): + if use_db_row: +- import db_row ++ from . import db_row + globals()['db_row'] = db_row + self.__use_db_row = use_db_row + +@@ -265,7 +265,7 @@ class Cursor(object): + def __setDbRow(self, use_db_row): + """Set value of use_db_row for cursor.""" + if use_db_row: +- import db_row ++ from . import db_row + globals()['db_row'] = db_row + self.__use_db_row = use_db_row + +@@ -406,7 +406,7 @@ class Cursor(object): + elif self._mwrapper._convert_bool and typelist[i] == self._driver.BOOLEAN: + boolpos.append(i) + # loop through data to make changes +- for i in xrange(len(results)): ++ for i in range(len(results)): + set = results[i] + # make datetime objects + if len(datepos) > 0 or len(boolpos) > 0: +--- dal/dbapi/dbtime.py.orig 2008-10-03 11:24:17 UTC ++++ dal/dbapi/dbtime.py +@@ -98,7 +98,7 @@ def mx2pydt(mxdt): + else: + return mx2pydtdelta(mxdt) + else: +- raise Exception, 'Not a mx datetime type.' ++ raise Exception('Not a mx datetime type.') + + # Python datetime to mx.DateTime conversion functions + +@@ -148,7 +148,7 @@ def py2mxdt(pydt): + elif type(pydt) == datetime.timedelta: + return py2mxdtdelta(pydt) + else: +- raise Exception, 'Not a Python datetime type.' ++ raise Exception('Not a Python datetime type.') + + # Date and Time constructors + +@@ -160,7 +160,7 @@ def construct_date(dtpref, year, month, day): + return mx.DateTime.Date(year, month, day) + else: + # what exception should be raised here? +- raise Exception, 'Improper DATETIME set.' ++ raise Exception('Improper DATETIME set.') + + def construct_time(dtpref, hour, minute, second): + """Creates time object for preferred type.""" +@@ -170,7 +170,7 @@ def construct_time(dtpref, hour, minute, second): + return mx.DateTime.Time(hour, minute, second) + else: + # what exception should be raised here? +- raise Exception, 'Improper DATETIME set.' ++ raise Exception('Improper DATETIME set.') + + def construct_timestamp(dtpref, year, month, day, hour, minute, second): + """Creates timestamp object for preferred type.""" +@@ -180,7 +180,7 @@ def construct_timestamp(dtpref, year, month, day, hour + return mx.DateTime.DateTime(year, month, day, hour, minute, second) + else: + # what exception should be raised here? +- raise Exception, 'Improper DATETIME set.' ++ raise Exception('Improper DATETIME set.') + + def construct_datefromticks(dtpref, ticks): + """Creates date object for preferred type and ticks.""" +@@ -190,7 +190,7 @@ def construct_datefromticks(dtpref, ticks): + return mx.DateTime.DateFromTicks(ticks) + else: + # what exception should be raised here? +- raise Exception, 'Improper DATETIME set.' ++ raise Exception('Improper DATETIME set.') + + def construct_timefromticks(dtpref, ticks): + """Creates time object for preferred type and ticks.""" +@@ -200,7 +200,7 @@ def construct_timefromticks(dtpref, ticks): + return mx.DateTime.TimeFromTicks(ticks) + else: + # what exception should be raised here? +- raise Exception, 'Improper DATETIME set.' ++ raise Exception('Improper DATETIME set.') + + def construct_timestampfromticks(dtpref, ticks): + """Creates timestamp object for preferred type and ticks.""" +@@ -210,7 +210,7 @@ def construct_timestampfromticks(dtpref, ticks): + return mx.DateTime.localtime(ticks) + else: + # what exception should be raised here? +- raise Exception, 'Improper DATETIME set.' ++ raise Exception('Improper DATETIME set.') + + # Other functions + +@@ -250,25 +250,25 @@ def dtsubnative(dtpref, dbmod, params): + # not a datetime field + pass + else: +- raise ValueError, 'dbpref value not known.' ++ raise ValueError('dbpref value not known.') + return nparam + + def convert_dparams(dparams): + # Convert dictionary of parameters. +- for key, value in dparams.items(): ++ for key, value in list(dparams.items()): + dparams[key] = convertdt(value) + return dparams + + if type(params) == dict: + params = convert_dparams(params) + elif type(params) == list: +- for key in xrange(len(params)): ++ for key in range(len(params)): + if type(params[key]) == dict: + params[key] = convert_dparams(params[key]) + else: + params[key] = convertdt(params[key]) + else: +- raise ValueError, 'params should be list or dict.' ++ raise ValueError('params should be list or dict.') + return params + + def native2pref(nativedt, pref, dt_type=None, conv_func=None): +@@ -283,7 +283,7 @@ def native2pref(nativedt, pref, dt_type=None, conv_fun + elif dto_class == 'mx' and pref == 'py': + return mx2pydt(dto) + else: +- raise Exception, 'unknown dto_class/pref combination' ++ raise Exception('unknown dto_class/pref combination') + if isinstance(nativedt, datetime.datetime) and nativedt.tzinfo == None and server_tzinfo != None and local_tzinfo != None: + nativedt = datetime.datetime(nativedt.year, nativedt.month, nativedt.day, nativedt.hour, nativedt.minute, nativedt.second, nativedt.microsecond, server_tzinfo).astimezone(local_tzinfo) + # what type of object is this? +@@ -428,5 +428,5 @@ def main(): + assert pydtd.microseconds == mxdtd_msec + + if __name__ == '__main__': +- for i in xrange(1000): ++ for i in range(1000): + main() +--- dal/dbapi/dtuple.py.orig 2008-07-25 06:05:12 UTC ++++ dal/dbapi/dtuple.py +@@ -48,7 +48,7 @@ class TupleDescriptor: + """ + self.desc = tuple(desc) + ### validate the names? +- self.names = map(lambda x: x[0], desc) ++ self.names = [x[0] for x in desc] + self.namemap = { } + for i in range(len(self.names)): + self.namemap[self.names[i]] = i +@@ -145,7 +145,7 @@ class DatabaseTuple: + def __setattr__(self, name, value): + 'Simulate attribute-access via column names' + ### need to redirect into a db update +- raise TypeError, "can't assign to this subscripted object" ++ raise TypeError("can't assign to this subscripted object") + + def __getitem__(self, key): + 'Simulate indexed (tuple/list) and mapping-style access' +@@ -157,9 +157,9 @@ class DatabaseTuple: + 'Simulate indexed (tuple/list) and mapping-style access' + if type(key) == type(1): + ### need to redirect into a db update of elem #key +- raise TypeError, "can't assign to this subscripted object" ++ raise TypeError("can't assign to this subscripted object") + ### need to redirect into a db update of elem named key +- raise TypeError, "can't assign to this subscripted object" ++ raise TypeError("can't assign to this subscripted object") + + def __len__(self): + return len(self._data_) +@@ -171,7 +171,7 @@ class DatabaseTuple: + def __setslice__(self, i, j, list): + 'Simulate list/tuple slicing access' + ### need to redirect into a db update of elems +- raise TypeError, "can't assign to this subscripted object" ++ raise TypeError("can't assign to this subscripted object") + + def _keys_(self): + "Simulate mapping's methods" +@@ -183,7 +183,7 @@ class DatabaseTuple: + + def _items_(self): + "Simulate mapping's methods" +- return self.asMapping().items() ++ return list(self.asMapping().items()) + + def _count_(self, item): + "Simulate list's methods" +@@ -214,7 +214,7 @@ class DatabaseTuple: + def asMapping(self): + 'Return the "tuple" as a real mapping' + value = { } +- for name, idx in self._desc_.namemap.items(): ++ for name, idx in list(self._desc_.namemap.items()): + value[name] = self._data_[idx] + return value + +@@ -224,4 +224,4 @@ class DatabaseTuple: + + def asList(self): + 'Return the "list" as a real mapping' +- return map(None, self._data_) ++ return list(self._data_) +--- dal/dbapi/paramstyles.py.orig 2008-07-25 06:05:12 UTC ++++ dal/dbapi/paramstyles.py +@@ -256,7 +256,7 @@ def segmentize( string ): + if current_segment != '': + segments.append(current_segment) + if quoted: +- raise SegmentizeError, 'Unmatched quotes in string' ++ raise SegmentizeError('Unmatched quotes in string') + + return segments + +@@ -334,7 +334,7 @@ def convert( from_paramstyle, to_paramstyle, query, pa + try: + convert_function = CONVERSION_MATRIX[from_paramstyle][to_paramstyle] + except KeyError: +- raise NotImplementedError, 'Unsupported paramstyle conversion: %s to %s' % (from_paramstyle, to_paramstyle) ++ raise NotImplementedError('Unsupported paramstyle conversion: %s to %s' % (from_paramstyle, to_paramstyle)) + + new_query, new_params = convert_function(query, params) + +@@ -362,25 +362,25 @@ if __name__ == '__main__': + } + indent = 4 + width = 16 +- print '' +- print '[ PARAMSTYLE TRANSLATIONS ]' +- print '' ++ print('') ++ print('[ PARAMSTYLE TRANSLATIONS ]') ++ print('') + for from_paramstyle in PARAMSTYLES['all']: + query = tests[from_paramstyle][0] + params = tests[from_paramstyle][1] +- print '' +- print '%s[ %s ]' % (' ' * indent, from_paramstyle.upper()) +- print '' ++ print('') ++ print('%s[ %s ]' % (' ' * indent, from_paramstyle.upper())) ++ print('') + label = 'query' +- print '%s%s%s: %s' % (' ' * indent, label, '.' * (width + indent - len(label)), query) ++ print('%s%s%s: %s' % (' ' * indent, label, '.' * (width + indent - len(label)), query)) + label = 'paramstyle' +- print '%s%s%s: %s' % (' ' * indent, label, '.' * (width + indent - len(label)), from_paramstyle) +- print '' ++ print('%s%s%s: %s' % (' ' * indent, label, '.' * (width + indent - len(label)), from_paramstyle)) ++ print('') + for to_paramstyle in PARAMSTYLES['all']: + converted_query, converted_params = convert(from_paramstyle, to_paramstyle, query, params) + label = '%s_query' % (to_paramstyle) +- print '%s%s%s: %s' % (' ' * indent * 2, label, '.' * (width - len(label)), converted_query) ++ print('%s%s%s: %s' % (' ' * indent * 2, label, '.' * (width - len(label)), converted_query)) + label = '%s_params' % (to_paramstyle) +- print '%s%s%s: %s' % (' ' * indent * 2, label, '.' * (width - len(label)), converted_params) +- print '' ++ print('%s%s%s: %s' % (' ' * indent * 2, label, '.' * (width - len(label)), converted_params)) ++ print('') +