aboutsummaryrefslogtreecommitdiff
path: root/databases/py-sqlobject
diff options
context:
space:
mode:
authorWen Heping <wen@FreeBSD.org>2023-05-05 01:38:52 +0000
committerWen Heping <wen@FreeBSD.org>2023-05-05 01:38:52 +0000
commitd028fb861fd6555ac088c7893eab38788632dc4f (patch)
tree9cb6ddbb32fb7f4499bda88e6b2eefdf51b7feae /databases/py-sqlobject
parent58bda71a7c0bc8cb8e6f6b7b657b6ad4244f1a74 (diff)
Diffstat (limited to 'databases/py-sqlobject')
-rw-r--r--databases/py-sqlobject/Makefile5
-rw-r--r--databases/py-sqlobject/distinfo5
-rw-r--r--databases/py-sqlobject/files/patch-2to32505
3 files changed, 5 insertions, 2510 deletions
diff --git a/databases/py-sqlobject/Makefile b/databases/py-sqlobject/Makefile
index 7cb93a70a675..838e8b85751a 100644
--- a/databases/py-sqlobject/Makefile
+++ b/databases/py-sqlobject/Makefile
@@ -1,6 +1,5 @@
PORTNAME= sqlobject
-PORTVERSION= 1.6.0
-PORTREVISION= 1
+PORTVERSION= 3.10.1
CATEGORIES= databases python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
@@ -30,7 +29,7 @@ MSSQL_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}pymssql>=0:databases/py-pymssql@${PY_F
post-install-DOCS-on:
${MKDIR} ${STAGEDIR}${DOCSDIR}
- ${INSTALL_DATA} ${WRKSRC}/README.txt ${STAGEDIR}${DOCSDIR}
+ ${INSTALL_DATA} ${WRKSRC}/README.rst ${STAGEDIR}${DOCSDIR}
(cd ${WRKSRC}/docs && ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR})
.include <bsd.port.mk>
diff --git a/databases/py-sqlobject/distinfo b/databases/py-sqlobject/distinfo
index 1740aa04bfdf..ebd0377b0e3b 100644
--- a/databases/py-sqlobject/distinfo
+++ b/databases/py-sqlobject/distinfo
@@ -1,2 +1,3 @@
-SHA256 (SQLObject-1.6.0.tar.gz) = 7299dc568d074ea8cb418bf3ad64a5ed380ae6c18be381519ead6c6a2e578b95
-SIZE (SQLObject-1.6.0.tar.gz) = 276441
+TIMESTAMP = 1683248141
+SHA256 (SQLObject-3.10.1.tar.gz) = fcf3ea27f85af06450a58fee40e2c8174bfdd29f6d64aac74c2324bac888b844
+SIZE (SQLObject-3.10.1.tar.gz) = 1314120
diff --git a/databases/py-sqlobject/files/patch-2to3 b/databases/py-sqlobject/files/patch-2to3
deleted file mode 100644
index 66193d081e4a..000000000000
--- a/databases/py-sqlobject/files/patch-2to3
+++ /dev/null
@@ -1,2505 +0,0 @@
---- sqlobject/col.py.orig 2014-05-04 12:48:24 UTC
-+++ sqlobject/col.py
-@@ -22,17 +22,17 @@ from array import array
- from itertools import count
- import re, time
- try:
-- import cPickle as pickle
-+ import pickle as pickle
- except ImportError:
- import pickle
- import weakref
- from formencode import compound, validators
--from classregistry import findClass
-+from .classregistry import findClass
- # Sadly the name "constraints" conflicts with many of the function
- # arguments in this module, so we rename it:
--import constraints as constrs
--import sqlbuilder
--from styles import capword
-+from . import constraints as constrs
-+from . import sqlbuilder
-+from .styles import capword
-
- NoDefault = sqlbuilder.NoDefault
-
-@@ -218,7 +218,7 @@ class SOCol(object):
- self.dbEncoding = dbEncoding
-
- if extra_vars:
-- for name, value in extra_vars.items():
-+ for name, value in list(extra_vars.items()):
- setattr(self, name, value)
-
- def _set_validator(self, value):
-@@ -286,7 +286,7 @@ class SOCol(object):
-
- def _sqlType(self):
- if self.customSQLType is None:
-- raise ValueError, ("Col %s (%s) cannot be used for automatic "
-+ raise ValueError("Col %s (%s) cannot be used for automatic "
- "schema creation (too abstract)" %
- (self.name, self.__class__))
- else:
-@@ -399,7 +399,7 @@ class Col(object):
- super(Col, self).__init__()
- self.__dict__['_name'] = name
- self.__dict__['_kw'] = kw
-- self.__dict__['creationOrder'] = creationOrder.next()
-+ self.__dict__['creationOrder'] = next(creationOrder)
- self.__dict__['_extra_vars'] = {}
-
- def _set_name(self, value):
-@@ -473,7 +473,7 @@ class SOStringLikeCol(SOCol):
-
- def _check_case_sensitive(self, db):
- if self.char_binary:
-- raise ValueError, "%s does not support binary character columns" % db
-+ raise ValueError("%s does not support binary character columns" % db)
-
- def _mysqlType(self):
- type = self._sqlType()
-@@ -538,14 +538,14 @@ class StringValidator(SOValidator):
- except AttributeError:
- binaryType = type(None) # Just a simple workaround
- dbEncoding = self.getDbEncoding(state, default='ascii')
-- if isinstance(value, unicode):
-+ if isinstance(value, str):
- return value.encode(dbEncoding)
- if self.dataType and isinstance(value, self.dataType):
- return value
- if isinstance(value, (str, buffer, binaryType, sqlbuilder.SQLExpression)):
- return value
- if hasattr(value, '__unicode__'):
-- return unicode(value).encode(dbEncoding)
-+ return str(value).encode(dbEncoding)
- raise validators.Invalid("expected a str in the StringCol '%s', got %s %r instead" % \
- (self.name, type(value), value), value, state)
-
-@@ -563,7 +563,7 @@ class StringCol(Col):
-
- class NQuoted(sqlbuilder.SQLExpression):
- def __init__(self, value):
-- assert isinstance(value, unicode)
-+ assert isinstance(value, str)
- self.value = value
- def __hash__(self):
- return hash(self.value)
-@@ -576,14 +576,14 @@ class UnicodeStringValidator(SOValidator):
- def to_python(self, value, state):
- if value is None:
- return None
-- if isinstance(value, (unicode, sqlbuilder.SQLExpression)):
-+ if isinstance(value, (str, sqlbuilder.SQLExpression)):
- return value
- if isinstance(value, str):
-- return unicode(value, self.getDbEncoding(state))
-+ return str(value, self.getDbEncoding(state))
- if isinstance(value, array): # MySQL
-- return unicode(value.tostring(), self.getDbEncoding(state))
-+ return str(value.tostring(), self.getDbEncoding(state))
- if hasattr(value, '__unicode__'):
-- return unicode(value)
-+ return str(value)
- raise validators.Invalid("expected a str or a unicode in the UnicodeCol '%s', got %s %r instead" % \
- (self.name, type(value), value), value, state)
-
-@@ -592,7 +592,7 @@ class UnicodeStringValidator(SOValidator):
- return None
- if isinstance(value, (str, sqlbuilder.SQLExpression)):
- return value
-- if isinstance(value, unicode):
-+ if isinstance(value, str):
- try:
- connection = state.connection or state.soObject._connection
- except AttributeError:
-@@ -602,7 +602,7 @@ class UnicodeStringValidator(SOValidator):
- return NQuoted(value)
- return value.encode(self.getDbEncoding(state))
- if hasattr(value, '__unicode__'):
-- return unicode(value).encode(self.getDbEncoding(state))
-+ return str(value).encode(self.getDbEncoding(state))
- raise validators.Invalid("expected a str or a unicode in the UnicodeCol '%s', got %s %r instead" % \
- (self.name, type(value), value), value, state)
-
-@@ -625,9 +625,9 @@ class IntValidator(SOValidator):
- def to_python(self, value, state):
- if value is None:
- return None
-- if isinstance(value, (int, long, sqlbuilder.SQLExpression)):
-+ if isinstance(value, (int, sqlbuilder.SQLExpression)):
- return value
-- for converter, attr_name in (int, '__int__'), (long, '__long__'):
-+ for converter, attr_name in (int, '__int__'), (int, '__long__'):
- if hasattr(value, attr_name):
- try:
- return converter(value)
-@@ -708,7 +708,7 @@ class BoolValidator(SOValidator):
- return None
- if isinstance(value, (bool, sqlbuilder.SQLExpression)):
- return value
-- if isinstance(value, (int, long)) or hasattr(value, '__nonzero__'):
-+ if isinstance(value, int) or hasattr(value, '__nonzero__'):
- return bool(value)
- raise validators.Invalid("expected a bool or an int in the BoolCol '%s', got %s %r instead" % \
- (self.name, type(value), value), value, state)
-@@ -753,9 +753,9 @@ class FloatValidator(SOValidator):
- def to_python(self, value, state):
- if value is None:
- return None
-- if isinstance(value, (float, int, long, sqlbuilder.SQLExpression)):
-+ if isinstance(value, (float, int, sqlbuilder.SQLExpression)):
- return value
-- for converter, attr_name in (float, '__float__'), (int, '__int__'), (long, '__long__'):
-+ for converter, attr_name in (float, '__float__'), (int, '__int__'), (int, '__long__'):
- if hasattr(value, attr_name):
- try:
- return converter(value)
-@@ -964,7 +964,7 @@ class EnumValidator(SOValidator):
-
- def to_python(self, value, state):
- if value in self.enumValues:
-- if isinstance(value, unicode):
-+ if isinstance(value, str):
- dbEncoding = self.getDbEncoding(state)
- value = value.encode(dbEncoding)
- return value
-@@ -1000,7 +1000,7 @@ class SOEnumCol(SOCol):
- return "ENUM(%s) NOT NULL" % ', '.join([sqlbuilder.sqlrepr(v, 'mysql') for v in self.enumValues])
-
- def _postgresType(self):
-- length = max(map(self._getlength, self.enumValues))
-+ length = max(list(map(self._getlength, self.enumValues)))
- enumValues = ', '.join([sqlbuilder.sqlrepr(v, 'postgres') for v in self.enumValues])
- checkConstraint = "CHECK (%s in (%s))" % (self.dbName, enumValues)
- return "VARCHAR(%i) %s" % (length, checkConstraint)
-@@ -1014,7 +1014,7 @@ class SOEnumCol(SOCol):
- return self._postgresType()
-
- def _firebirdType(self):
-- length = max(map(self._getlength, self.enumValues))
-+ length = max(list(map(self._getlength, self.enumValues)))
- enumValues = ', '.join([sqlbuilder.sqlrepr(v, 'firebird') for v in self.enumValues])
- checkConstraint = "CHECK (%s in (%s))" % (self.dbName, enumValues)
- #NB. Return a tuple, not a string here
-@@ -1048,7 +1048,7 @@ class SetValidator(SOValidator):
- (self.name, type(value), value), value, state)
-
- def from_python(self, value, state):
-- if isinstance(value, basestring):
-+ if isinstance(value, str):
- value = (value,)
- try:
- return ",".join(value)
-@@ -1358,7 +1358,7 @@ class DecimalValidator(SOValidator):
- def to_python(self, value, state):
- if value is None:
- return None
-- if isinstance(value, (int, long, Decimal, sqlbuilder.SQLExpression)):
-+ if isinstance(value, (int, Decimal, sqlbuilder.SQLExpression)):
- return value
- if isinstance(value, float):
- value = str(value)
-@@ -1380,7 +1380,7 @@ class DecimalValidator(SOValidator):
- return None
- if isinstance(value, float):
- value = str(value)
-- if isinstance(value, basestring):
-+ if isinstance(value, str):
- try:
- connection = state.connection or state.soObject._connection
- except AttributeError:
-@@ -1393,7 +1393,7 @@ class DecimalValidator(SOValidator):
- except:
- raise validators.Invalid("can not parse Decimal value '%s' in the DecimalCol from '%s'" %
- (value, getattr(state, 'soObject', '(unknown)')), value, state)
-- if isinstance(value, (int, long, Decimal, sqlbuilder.SQLExpression)):
-+ if isinstance(value, (int, Decimal, sqlbuilder.SQLExpression)):
- return value
- raise validators.Invalid("expected a Decimal in the DecimalCol '%s', got %s %r instead" % \
- (self.name, type(value), value), value, state)
-@@ -1447,7 +1447,7 @@ class DecimalStringValidator(DecimalValidator):
- "Value must be less than %s" % int(self.max)
- value = value.quantize(self.precision)
- value = value.to_eng_string()
-- elif isinstance(value, (int, long)):
-+ elif isinstance(value, int):
- value = str(value)
- return value
-
-@@ -1569,7 +1569,7 @@ class PickleValidator(BinaryValidator):
- def to_python(self, value, state):
- if value is None:
- return None
-- if isinstance(value, unicode):
-+ if isinstance(value, str):
- dbEncoding = self.getDbEncoding(state, default='ascii')
- value = value.encode(dbEncoding)
- if isinstance(value, str):
-@@ -1610,7 +1610,7 @@ def pushKey(kw, name, value):
- kw[name] = value
-
- all = []
--for key, value in globals().items():
-+for key, value in list(globals().items()):
- if isinstance(value, type) and (issubclass(value, (Col, SOCol))):
- all.append(key)
- __all__.extend(all)
---- sqlobject/converters.py.orig 2014-05-04 12:48:24 UTC
-+++ sqlobject/converters.py
-@@ -95,7 +95,7 @@ def StringLikeConverter(value, db):
- return "'%s'" % value
-
- registerConverter(str, StringLikeConverter)
--registerConverter(unicode, StringLikeConverter)
-+registerConverter(str, StringLikeConverter)
- registerConverter(array, StringLikeConverter)
- registerConverter(buffer, StringLikeConverter)
-
-@@ -107,7 +107,7 @@ registerConverter(int, IntConverter)
- def LongConverter(value, db):
- return str(value)
-
--registerConverter(long, LongConverter)
-+registerConverter(int, LongConverter)
-
- if NumericType:
- registerConverter(NumericType, IntConverter)
-@@ -203,8 +203,8 @@ def sqlrepr(obj, db=None):
- except AttributeError:
- converter = lookupConverter(obj)
- if converter is None:
-- raise ValueError, "Unknown SQL builtin type: %s for %s" % \
-- (type(obj), repr(obj))
-+ raise ValueError("Unknown SQL builtin type: %s for %s" % \
-+ (type(obj), repr(obj)))
- return converter(obj, db)
- else:
- return reprFunc(db)
---- sqlobject/dbconnection.py.orig 2013-07-07 18:43:26 UTC
-+++ sqlobject/dbconnection.py
-@@ -6,17 +6,17 @@ import os
- import sys
- import threading
- import types
--import urllib
-+import urllib.request, urllib.parse, urllib.error
- import warnings
- import weakref
-
--from cache import CacheSet
--import classregistry
--import col
--from converters import sqlrepr
--import main
--import sqlbuilder
--from util.threadinglocal import local as threading_local
-+from .cache import CacheSet
-+from . import classregistry
-+from . import col
-+from .converters import sqlrepr
-+from . import main
-+from . import sqlbuilder
-+from .util.threadinglocal import local as threading_local
-
- warnings.filterwarnings("ignore", "DB-API extension cursor.lastrowid used")
-
-@@ -34,7 +34,7 @@ class ConsoleWriter:
- self.dbEncoding = getattr(connection, "dbEncoding", None) or "ascii"
- def write(self, text):
- logfile = getattr(sys, self.loglevel)
-- if isinstance(text, unicode):
-+ if isinstance(text, str):
- try:
- text = text.encode(self.dbEncoding)
- except UnicodeEncodeError:
-@@ -111,9 +111,9 @@ class DBConnection:
- def uri(self):
- auth = getattr(self, 'user', '') or ''
- if auth:
-- auth = urllib.quote(auth)
-+ auth = urllib.parse.quote(auth)
- if self.password:
-- auth = auth + ':' + urllib.quote(self.password)
-+ auth = auth + ':' + urllib.parse.quote(self.password)
- auth = auth + '@'
- else:
- assert not getattr(self, 'password', None), (
-@@ -127,7 +127,7 @@ class DBConnection:
- db = self.db
- if db.startswith('/'):
- db = db[1:]
-- return uri + urllib.quote(db)
-+ return uri + urllib.parse.quote(db)
-
- @classmethod
- def connectionFromOldURI(cls, uri):
-@@ -167,9 +167,9 @@ class DBConnection:
- try:
- port = int(port)
- except ValueError:
-- raise ValueError, "port must be integer, got '%s' instead" % port
-+ raise ValueError("port must be integer, got '%s' instead" % port)
- if not (1 <= port <= 65535):
-- raise ValueError, "port must be integer in the range 1-65535, got '%d' instead" % port
-+ raise ValueError("port must be integer in the range 1-65535, got '%d' instead" % port)
- host = _host
- else:
- port = None
-@@ -183,15 +183,15 @@ class DBConnection:
- arglist = arglist.split('&')
- for single in arglist:
- argname, argvalue = single.split('=', 1)
-- argvalue = urllib.unquote(argvalue)
-+ argvalue = urllib.parse.unquote(argvalue)
- args[argname] = argvalue
- return user, password, host, port, path, args
-
- @staticmethod
- def _parseURI(uri):
-- protocol, request = urllib.splittype(uri)
-+ protocol, request = urllib.parse.splittype(uri)
- user, password, port = None, None, None
-- host, path = urllib.splithost(request)
-+ host, path = urllib.parse.splithost(request)
-
- if host:
- # Python < 2.7 have a problem - splituser() calls unquote() too early
-@@ -199,17 +199,17 @@ class DBConnection:
- if '@' in host:
- user, host = host.split('@', 1)
- if user:
-- user, password = [x and urllib.unquote(x) or None for x in urllib.splitpasswd(user)]
-- host, port = urllib.splitport(host)
-+ user, password = [x and urllib.parse.unquote(x) or None for x in urllib.parse.splitpasswd(user)]
-+ host, port = urllib.parse.splitport(host)
- if port: port = int(port)
- elif host == '':
- host = None
-
- # hash-tag is splitted but ignored
-- path, tag = urllib.splittag(path)
-- path, query = urllib.splitquery(path)
-+ path, tag = urllib.parse.splittag(path)
-+ path, query = urllib.parse.splitquery(path)
-
-- path = urllib.unquote(path)
-+ path = urllib.parse.unquote(path)
- if (os.name == 'nt') and (len(path) > 2):
- # Preserve backward compatibility with URIs like /C|/path;
- # replace '|' by ':'
-@@ -282,7 +282,7 @@ class ConnWrapper(object):
- "because it takes **kw: %r"
- % meth)
- takes_conn = 'connection' in args
-- meth.im_func.takes_connection = takes_conn
-+ meth.__func__.takes_connection = takes_conn
- if not takes_conn:
- return meth
- return ConnMethodWrapper(meth, self._connection)
-@@ -363,7 +363,7 @@ class DBAPI(DBConnection):
- if self.debug:
- self.printDebug(conn, 'auto/exception', 'ROLLBACK')
- conn.rollback()
-- raise Exception, 'Object used outside of a transaction; implicit COMMIT or ROLLBACK not allowed'
-+ raise Exception('Object used outside of a transaction; implicit COMMIT or ROLLBACK not allowed')
- elif self.autoCommit:
- if self.debug:
- self.printDebug(conn, 'auto', 'COMMIT')
-@@ -593,7 +593,7 @@ class DBAPI(DBConnection):
-
- def _SO_selectOneAlt(self, so, columnNames, condition):
- if columnNames:
-- columns = [isinstance(x, basestring) and sqlbuilder.SQLConstant(x) or x for x in columnNames]
-+ columns = [isinstance(x, str) and sqlbuilder.SQLConstant(x) or x for x in columnNames]
- else:
- columns = None
- return self.queryOne(self.sqlrepr(sqlbuilder.Select(columns,
-@@ -643,7 +643,7 @@ class DBAPI(DBConnection):
- data = {}
- if 'id' in kw:
- data[soClass.sqlmeta.idName] = kw.pop('id')
-- for key, col in soClass.sqlmeta.columns.items():
-+ for key, col in list(soClass.sqlmeta.columns.items()):
- if key in kw:
- value = kw.pop(key)
- if col.from_python:
-@@ -657,7 +657,7 @@ class DBAPI(DBConnection):
- data[col.dbName] = obj
- if kw:
- # pick the first key from kw to use to raise the error,
-- raise TypeError, "got an unexpected keyword argument(s): %r" % kw.keys()
-+ raise TypeError("got an unexpected keyword argument(s): %r" % list(kw.keys()))
-
- if not data:
- return None
-@@ -665,7 +665,7 @@ class DBAPI(DBConnection):
- ['%s %s %s' %
- (dbName, ops.get(value, "="), self.sqlrepr(value))
- for dbName, value
-- in data.items()])
-+ in list(data.items())])
-
- def sqlrepr(self, v):
- return sqlrepr(v, self.dbName)
-@@ -718,7 +718,7 @@ class Iteration(object):
- def __iter__(self):
- return self
-
-- def next(self):
-+ def __next__(self):
- result = self.cursor.fetchone()
- if result is None:
- self._cleanup()
-@@ -791,7 +791,7 @@ class Transaction(object):
- if not cls in self._deletedCache:
- self._deletedCache[cls] = []
- self._deletedCache[cls].append(inst.id)
-- meth = new.instancemethod(self._dbConnection._SO_delete.im_func, self, self.__class__)
-+ meth = new.instancemethod(self._dbConnection._SO_delete.__func__, self, self.__class__)
- return meth(inst)
-
- def commit(self, close=False):
-@@ -801,8 +801,8 @@ class Transaction(object):
- if self._dbConnection.debug:
- self._dbConnection.printDebug(self._connection, '', 'COMMIT')
- self._connection.commit()
-- subCaches = [(sub[0], sub[1].allIDs()) for sub in self.cache.allSubCachesByClassNames().items()]
-- subCaches.extend([(x[0], x[1]) for x in self._deletedCache.items()])
-+ subCaches = [(sub[0], sub[1].allIDs()) for sub in list(self.cache.allSubCachesByClassNames().items())]
-+ subCaches.extend([(x[0], x[1]) for x in list(self._deletedCache.items())])
- for cls, ids in subCaches:
- for id in ids:
- inst = self._dbConnection.cache.tryGetByName(id, cls)
-@@ -836,7 +836,7 @@ class Transaction(object):
- self.assertActive()
- attr = getattr(self._dbConnection, attr)
- try:
-- func = attr.im_func
-+ func = attr.__func__
- except AttributeError:
- if isinstance(attr, ConnWrapper):
- return ConnWrapper(attr._soClass, self)
-@@ -996,9 +996,9 @@ class ConnectionURIOpener(object):
- def connectionForURI(self, uri, oldUri=False, **args):
- if args:
- if '?' not in uri:
-- uri += '?' + urllib.urlencode(args)
-+ uri += '?' + urllib.parse.urlencode(args)
- else:
-- uri += '&' + urllib.urlencode(args)
-+ uri += '&' + urllib.parse.urlencode(args)
- if uri in self.cachedURIs:
- return self.cachedURIs[uri]
- if uri.find(':') != -1:
-@@ -1020,7 +1020,7 @@ class ConnectionURIOpener(object):
- def dbConnectionForScheme(self, scheme):
- assert scheme in self.schemeBuilders, (
- "No SQLObject driver exists for %s (only %s)"
-- % (scheme, ', '.join(self.schemeBuilders.keys())))
-+ % (scheme, ', '.join(list(self.schemeBuilders.keys()))))
- return self.schemeBuilders[scheme]()
-
- TheURIOpener = ConnectionURIOpener()
-@@ -1031,11 +1031,11 @@ connectionForURI = TheURIOpener.connectionForURI
- dbConnectionForScheme = TheURIOpener.dbConnectionForScheme
-
- # Register DB URI schemas
--import firebird
--import maxdb
--import mssql
--import mysql
--import postgres
--import rdbhost
--import sqlite
--import sybase
-+from . import firebird
-+from . import maxdb
-+from . import mssql
-+from . import mysql
-+from . import postgres
-+from . import rdbhost
-+from . import sqlite
-+from . import sybase
---- sqlobject/events.py.orig 2010-11-13 17:42:40 UTC
-+++ sqlobject/events.py
-@@ -206,25 +206,25 @@ def summarize_events_by_sender(sender=None, output=Non
- if sender is None:
- send_list = [
- (deref(dispatcher.senders.get(sid)), listeners)
-- for sid, listeners in dispatcher.connections.items()
-+ for sid, listeners in list(dispatcher.connections.items())
- if deref(dispatcher.senders.get(sid))]
- for sender, listeners in sorted_items(send_list):
- real_sender = deref(sender)
- if not real_sender:
- continue
- header = 'Sender: %r' % real_sender
-- print >> output, (' '*indent) + header
-- print >> output, (' '*indent) + '='*len(header)
-+ print((' '*indent) + header, file=output)
-+ print((' '*indent) + '='*len(header), file=output)
- summarize_events_by_sender(real_sender, output=output, indent=indent+2)
- else:
- for signal, receivers in sorted_items(dispatcher.connections.get(id(sender), [])):
- receivers = [deref(r) for r in receivers if deref(r)]
- header = 'Signal: %s (%i receivers)' % (sort_name(signal),
- len(receivers))
-- print >> output, (' '*indent) + header
-- print >> output, (' '*indent) + '-'*len(header)
-+ print((' '*indent) + header, file=output)
-+ print((' '*indent) + '-'*len(header), file=output)
- for receiver in sorted(receivers, key=sort_name):
-- print >> output, (' '*indent) + ' ' + nice_repr(receiver)
-+ print((' '*indent) + ' ' + nice_repr(receiver), file=output)
-
- def deref(value):
- if isinstance(value, dispatcher.WEAKREF_TYPES):
-@@ -234,14 +234,14 @@ def deref(value):
-
- def sorted_items(a_dict):
- if isinstance(a_dict, dict):
-- a_dict = a_dict.items()
-+ a_dict = list(a_dict.items())
- return sorted(a_dict, key=lambda t: sort_name(t[0]))
-
- def sort_name(value):
- if isinstance(value, type):
- return value.__name__
- elif isinstance(value, types.FunctionType):
-- return value.func_name
-+ return value.__name__
- else:
- return str(value)
-
-@@ -262,26 +262,26 @@ def debug_events():
-
- def _debug_send(signal=dispatcher.Any, sender=dispatcher.Anonymous,
- *arguments, **named):
-- print "send %s from %s: %s" % (
-- nice_repr(signal), nice_repr(sender), fmt_args(*arguments, **named))
-+ print("send %s from %s: %s" % (
-+ nice_repr(signal), nice_repr(sender), fmt_args(*arguments, **named)))
- return _real_dispatcher_send(signal, sender, *arguments, **named)
-
- def _debug_sendExact(signal=dispatcher.Any, sender=dispatcher.Anonymous,
- *arguments, **named):
-- print "sendExact %s from %s: %s" % (
-- nice_repr(signal), nice_repr(sender), fmt_args(*arguments, **name))
-+ print("sendExact %s from %s: %s" % (
-+ nice_repr(signal), nice_repr(sender), fmt_args(*arguments, **name)))
- return _real_dispatcher_sendExact(signal, sender, *arguments, **named)
-
- def _debug_connect(receiver, signal=dispatcher.Any, sender=dispatcher.Any,
- weak=True):
-- print "connect %s to %s signal %s" % (
-- nice_repr(receiver), nice_repr(signal), nice_repr(sender))
-+ print("connect %s to %s signal %s" % (
-+ nice_repr(receiver), nice_repr(signal), nice_repr(sender)))
- return _real_dispatcher_connect(receiver, signal, sender, weak)
-
- def _debug_disconnect(receiver, signal=dispatcher.Any, sender=dispatcher.Any,
- weak=True):
-- print "disconnecting %s from %s signal %s" % (
-- nice_repr(receiver), nice_repr(signal), nice_repr(sender))
-+ print("disconnecting %s from %s signal %s" % (
-+ nice_repr(receiver), nice_repr(signal), nice_repr(sender)))
- return disconnect(receiver, signal, sender, weak)
-
- def fmt_args(*arguments, **name):
-@@ -294,23 +294,23 @@ def nice_repr(v):
- """
- Like repr(), but nicer for debugging here.
- """
-- if isinstance(v, (types.ClassType, type)):
-+ if isinstance(v, type):
- return v.__module__ + '.' + v.__name__
- elif isinstance(v, types.FunctionType):
-- if '__name__' in v.func_globals:
-- if getattr(sys.modules[v.func_globals['__name__']],
-- v.func_name, None) is v:
-- return '%s.%s' % (v.func_globals['__name__'], v.func_name)
-+ if '__name__' in v.__globals__:
-+ if getattr(sys.modules[v.__globals__['__name__']],
-+ v.__name__, None) is v:
-+ return '%s.%s' % (v.__globals__['__name__'], v.__name__)
- return repr(v)
- elif isinstance(v, types.MethodType):
- return '%s.%s of %s' % (
-- nice_repr(v.im_class), v.im_func.func_name,
-- nice_repr(v.im_self))
-+ nice_repr(v.__self__.__class__), v.__func__.__name__,
-+ nice_repr(v.__self__))
- else:
- return repr(v)
-
-
- __all__ = ['listen', 'send']
--for name, value in globals().items():
-+for name, value in list(globals().items()):
- if isinstance(value, type) and issubclass(value, Signal):
- __all__.append(name)
---- sqlobject/include/pydispatch/dispatcher.py.orig 2011-05-15 15:48:27 UTC
-+++ sqlobject/include/pydispatch/dispatcher.py
-@@ -25,20 +25,14 @@ Internal attributes:
- deletion, (considerably speeds up the cleanup process
- vs. the original code.)
- """
--from __future__ import generators
-+
- import types, weakref
--import saferef, robustapply, errors
-+from . import saferef, robustapply, errors
-
- __author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
- __cvsid__ = "$Id: dispatcher.py,v 1.9 2005/09/17 04:55:57 mcfletch Exp $"
- __version__ = "$Revision: 1.9 $"[11:-2]
-
--try:
-- True
--except NameError:
-- True = 1==1
-- False = 1==0
--
- class _Parameter:
- """Used to represent default parameter values."""
- def __repr__(self):
-@@ -379,8 +373,8 @@ def _removeReceiver(receiver):
- backKey = id(receiver)
- for senderkey in sendersBack.get(backKey,()):
- try:
-- signals = connections[senderkey].keys()
-- except KeyError,err:
-+ signals = list(connections[senderkey].keys())
-+ except KeyError as err:
- pass
- else:
- for signal in signals:
-@@ -391,7 +385,7 @@ def _removeReceiver(receiver):
- else:
- try:
- receivers.remove( receiver )
-- except Exception, err:
-+ except Exception as err:
- pass
- _cleanupConnections(senderkey, signal)
- try:
-@@ -440,7 +434,7 @@ def _removeBackrefs( senderkey):
- except KeyError:
- signals = None
- else:
-- items = signals.items()
-+ items = list(signals.items())
- def allReceivers( ):
- for signal,set in items:
- for item in set:
-@@ -468,7 +462,7 @@ def _removeOldBackRefs(senderkey, signal, receiver, re
- found = 0
- signals = connections.get(signal)
- if signals is not None:
-- for sig,recs in connections.get(signal,{}).iteritems():
-+ for sig,recs in connections.get(signal,{}).items():
- if sig != signal:
- for rec in recs:
- if rec is oldReceiver:
---- sqlobject/include/pydispatch/robust.py.orig 2006-02-09 16:14:04 UTC
-+++ sqlobject/include/pydispatch/robust.py
-@@ -1,6 +1,6 @@
- """Module implementing error-catching version of send (sendRobust)"""
--from dispatcher import Any, Anonymous, liveReceivers, getAllReceivers
--from robustapply import robustApply
-+from .dispatcher import Any, Anonymous, liveReceivers, getAllReceivers
-+from .robustapply import robustApply
-
- def sendRobust(
- signal=Any,
-@@ -50,7 +50,7 @@ def sendRobust(
- *arguments,
- **named
- )
-- except Exception, err:
-+ except Exception as err:
- responses.append((receiver, err))
- else:
- responses.append((receiver, response))
---- sqlobject/include/pydispatch/saferef.py.orig 2006-02-09 16:14:04 UTC
-+++ sqlobject/include/pydispatch/saferef.py
-@@ -13,7 +13,7 @@ def safeRef(target, onDelete = None):
- weakref or a BoundMethodWeakref) as argument.
- """
- if hasattr(target, 'im_self'):
-- if target.im_self is not None:
-+ if target.__self__ is not None:
- # Turn a bound method into a BoundMethodWeakref instance.
- # Keep track of these instances for lookup by disconnect().
- assert hasattr(target, 'im_func'), """safeRef target %r has im_self, but no im_func, don't know how to create reference"""%( target,)
-@@ -109,26 +109,26 @@ class BoundMethodWeakref(object):
- try:
- if callable( function ):
- function( self )
-- except Exception, e:
-+ except Exception as e:
- try:
- traceback.print_exc()
-- except AttributeError, err:
-- print '''Exception during saferef %s cleanup function %s: %s'''%(
-+ except AttributeError as err:
-+ print('''Exception during saferef %s cleanup function %s: %s'''%(
- self, function, e
-- )
-+ ))
- self.deletionMethods = [onDelete]
- self.key = self.calculateKey( target )
-- self.weakSelf = weakref.ref(target.im_self, remove)
-- self.weakFunc = weakref.ref(target.im_func, remove)
-- self.selfName = str(target.im_self)
-- self.funcName = str(target.im_func.__name__)
-+ self.weakSelf = weakref.ref(target.__self__, remove)
-+ self.weakFunc = weakref.ref(target.__func__, remove)
-+ self.selfName = str(target.__self__)
-+ self.funcName = str(target.__func__.__name__)
- def calculateKey( cls, target ):
- """Calculate the reference key for this reference
-
- Currently this is a two-tuple of the id()'s of the
- target object and the target function respectively.
- """
-- return (id(target.im_self),id(target.im_func))
-+ return (id(target.__self__),id(target.__func__))
- calculateKey = classmethod( calculateKey )
- def __str__(self):
- """Give a friendly representation of the object"""
-@@ -138,7 +138,7 @@ class BoundMethodWeakref(object):
- self.funcName,
- )
- __repr__ = __str__
-- def __nonzero__( self ):
-+ def __bool__( self ):
- """Whether we are still a valid reference"""
- return self() is not None
- def __cmp__( self, other ):
---- sqlobject/index.py.orig 2011-05-15 15:48:27 UTC
-+++ sqlobject/index.py
-@@ -1,6 +1,6 @@
- from itertools import count
- from types import *
--from converters import sqlrepr
-+from .converters import sqlrepr
-
- creationOrder = count()
-
-@@ -20,15 +20,15 @@ class SODatabaseIndex(object):
-
- def get(self, *args, **kw):
- if not self.unique:
-- raise AttributeError, (
-+ raise AttributeError(
- "'%s' object has no attribute 'get' (index is not unique)" % self.name)
- connection = kw.pop('connection', None)
- if args and kw:
-- raise TypeError, "You cannot mix named and unnamed arguments"
-+ raise TypeError("You cannot mix named and unnamed arguments")
- columns = [d['column'] for d in self.descriptions
- if 'column' in d]
- if kw and len(kw) != len(columns) or args and len(args) != len(columns):
-- raise TypeError, ("get() takes exactly %d argument and an optional "
-+ raise TypeError("get() takes exactly %d argument and an optional "
- "named argument 'connection' (%d given)" % (
- len(columns), len(args)+len(kw)))
- if args:
-@@ -65,13 +65,13 @@ class SODatabaseIndex(object):
- columnName = columnName.name
- colDict = self.soClass.sqlmeta.columns
- if columnName not in colDict:
-- for possible in colDict.values():
-+ for possible in list(colDict.values()):
- if possible.origName == columnName:
- column = possible
- break
- else:
- # None found
-- raise ValueError, "The column by the name %r was not found in the class %r" % (columnName, self.soClass)
-+ raise ValueError("The column by the name %r was not found in the class %r" % (columnName, self.soClass))
- else:
- column = colDict[columnName]
- desc['column'] = column
-@@ -153,7 +153,7 @@ class DatabaseIndex(object):
- def __init__(self, *columns, **kw):
- kw['columns'] = columns
- self.kw = kw
-- self.creationOrder = creationOrder.next()
-+ self.creationOrder = next(creationOrder)
-
- def setName(self, value):
- assert self.kw.get('name') is None, "You cannot change a name after it has already been set (from %s to %s)" % (self.kw['name'], value)
---- sqlobject/inheritance/__init__.py.orig 2011-05-15 15:48:27 UTC
-+++ sqlobject/inheritance/__init__.py
-@@ -5,7 +5,8 @@ from sqlobject import sqlbuilder
- from sqlobject.col import StringCol, ForeignKey
- from sqlobject.main import sqlmeta, SQLObject, SelectResults, \
- makeProperties, unmakeProperties, getterName, setterName
--import iteration
-+from . import iteration
-+from functools import reduce
-
- def tablesUsedSet(obj, db):
- if hasattr(obj, "tablesUsedSet"):
-@@ -35,7 +36,7 @@ class InheritableSelectResults(SelectResults):
- if inheritedTables:
- for tableName in inheritedTables:
- tablesSet.add(str(tableName))
-- if orderBy and not isinstance(orderBy, basestring):
-+ if orderBy and not isinstance(orderBy, str):
- tablesSet.update(tablesUsedSet(orderBy, dbName))
- #DSM: if this class has a parent, we need to link it
- #DSM: and be sure the parent is in the table list.
-@@ -69,7 +70,7 @@ class InheritableSelectResults(SelectResults):
- #DSM: Table registry contains only the last children
- #DSM: or standalone classes
- parentClause = []
-- for (currentClass, minParentClass) in tableRegistry.items():
-+ for (currentClass, minParentClass) in list(tableRegistry.items()):
- while (currentClass != minParentClass) \
- and currentClass.sqlmeta.parentClass:
- parentClass = currentClass.sqlmeta.parentClass
-@@ -86,7 +87,7 @@ class InheritableSelectResults(SelectResults):
- return super(InheritableSelectResults, self).accumulateMany(*attributes)
- tables = []
- for func_name, attribute in attributes:
-- if not isinstance(attribute, basestring):
-+ if not isinstance(attribute, str):
- tables.append(attribute.tableName)
- clone = self.__class__(self.sourceClass, self.clause,
- self.clauseTables, inheritedTables=tables, **self.ops)
-@@ -130,7 +131,7 @@ class InheritableSQLMeta(sqlmeta):
- q = getattr(soClass.q, columnDef.name, None)
- else:
- q = None
-- for c in sqlmeta.childClasses.values():
-+ for c in list(sqlmeta.childClasses.values()):
- c.sqlmeta.addColumn(columnDef, connection=connection, childUpdate=True)
- if q: setattr(c.q, columnDef.name, q)
-
-@@ -153,7 +154,7 @@ class InheritableSQLMeta(sqlmeta):
-
- #DSM: Update each child class if needed
- #DSM: and delete properties for this column
-- for c in sqlmeta.childClasses.values():
-+ for c in list(sqlmeta.childClasses.values()):
- c.sqlmeta.delColumn(column, changeSchema=changeSchema,
- connection=connection, childUpdate=True)
-
-@@ -184,7 +185,7 @@ class InheritableSQLMeta(sqlmeta):
-
- #DSM: Update each child class if needed and existing (only for new
- #DSM: dynamic join as no child classes exists at object creation)
-- for c in sqlmeta.childClasses.values():
-+ for c in list(sqlmeta.childClasses.values()):
- c.sqlmeta.addJoin(joinDef, childUpdate=True)
-
- @classmethod
-@@ -199,7 +200,7 @@ class InheritableSQLMeta(sqlmeta):
-
- #DSM: Update each child class if needed
- #DSM: and delete properties for this join
-- for c in sqlmeta.childClasses.values():
-+ for c in list(sqlmeta.childClasses.values()):
- c.sqlmeta.delJoin(joinDef, childUpdate=True)
-
- @classmethod
-@@ -236,7 +237,7 @@ class InheritableSQLObject(SQLObject):
- # if we are a child class, add sqlbuilder fields from parents
- currentClass = cls.sqlmeta.parentClass
- while currentClass:
-- for column in currentClass.sqlmeta.columnDefinitions.values():
-+ for column in list(currentClass.sqlmeta.columnDefinitions.values()):
- if column.name == 'childName':
- continue
- if isinstance(column, ForeignKey):
-@@ -319,7 +320,7 @@ class InheritableSQLObject(SQLObject):
- # verify names of added columns
- if sqlmeta.parentClass:
- # FIXME: this does not check for grandparent column overrides
-- parentCols = sqlmeta.parentClass.sqlmeta.columns.keys()
-+ parentCols = list(sqlmeta.parentClass.sqlmeta.columns.keys())
- for column in sqlmeta.columnList:
- if column.name == 'childName':
- raise AttributeError(
-@@ -357,7 +358,7 @@ class InheritableSQLObject(SQLObject):
- parentClass = self.sqlmeta.parentClass
- new_kw = {}
- parent_kw = {}
-- for (name, value) in kw.items():
-+ for (name, value) in list(kw.items()):
- if (name != 'childName') and hasattr(parentClass, name):
- parent_kw[name] = value
- else:
-@@ -370,7 +371,7 @@ class InheritableSQLObject(SQLObject):
- for col in self.sqlmeta.columnList:
- if (col._default == sqlbuilder.NoDefault) and \
- (col.name not in kw) and (col.foreignName not in kw):
-- raise TypeError, "%s() did not get expected keyword argument %s" % (self.__class__.__name__, col.name)
-+ raise TypeError("%s() did not get expected keyword argument %s" % (self.__class__.__name__, col.name))
-
- parent_kw['childName'] = self.sqlmeta.childName
- self._parent = parentClass(kw=parent_kw,
-@@ -426,7 +427,7 @@ class InheritableSQLObject(SQLObject):
- addClause = parentClass.q.childName == cls.sqlmeta.childName
- # if the clause was one of TRUE varians, replace it
- if (clause is None) or (clause is sqlbuilder.SQLTrueClause) \
-- or (isinstance(clause, basestring) and (clause == 'all')):
-+ or (isinstance(clause, str) and (clause == 'all')):
- clause = addClause
- else:
- # patch WHERE condition:
-@@ -471,11 +472,11 @@ class InheritableSQLObject(SQLObject):
- currentClass = cls
- while currentClass:
- foreignColumns.update(dict([(column.foreignName, name)
-- for (name, column) in currentClass.sqlmeta.columns.items()
-+ for (name, column) in list(currentClass.sqlmeta.columns.items())
- if column.foreignKey
- ]))
- currentClass = currentClass.sqlmeta.parentClass
-- for name, value in kw.items():
-+ for name, value in list(kw.items()):
- if name in foreignColumns:
- name = foreignColumns[name] # translate "key" to "keyID"
- if isinstance(value, SQLObject):
-@@ -485,7 +486,7 @@ class InheritableSQLObject(SQLObject):
- try:
- clause.append(getattr(currentClass.q, name) == value)
- break
-- except AttributeError, err:
-+ except AttributeError as err:
- pass
- currentClass = currentClass.sqlmeta.parentClass
- else:
---- sqlobject/main.py.orig 2013-10-14 16:07:00 UTC
-+++ sqlobject/main.py
-@@ -28,23 +28,23 @@ USA.
-
- import threading
- import weakref
--import sqlbuilder
--import dbconnection
--import col
--import styles
-+from . import sqlbuilder
-+from . import dbconnection
-+from . import col
-+from . import styles
- import types
- import warnings
--import joins
--import index
--import classregistry
--import declarative
--import events
--from sresults import SelectResults
--from util.threadinglocal import local
-+from . import joins
-+from . import index
-+from . import classregistry
-+from . import declarative
-+from . import events
-+from .sresults import SelectResults
-+from .util.threadinglocal import local
-
- import sys
- if sys.version_info[:3] < (2, 5, 0):
-- raise ImportError, "SQLObject requires Python 2.5.0 or later"
-+ raise ImportError("SQLObject requires Python 2.5.0 or later")
-
- """
- This thread-local storage is needed for RowCreatedSignals. It gathers
-@@ -81,7 +81,7 @@ def makeProperties(obj):
- d = obj.__dict__
-
- props = {}
-- for var, value in d.items():
-+ for var, value in list(d.items()):
- if var.startswith('_set_'):
- props.setdefault(var[5:], {})['set'] = value
- elif var.startswith('_get_'):
-@@ -90,7 +90,7 @@ def makeProperties(obj):
- props.setdefault(var[5:], {})['del'] = value
- elif var.startswith('_doc_'):
- props.setdefault(var[5:], {})['doc'] = value
-- for var, setters in props.items():
-+ for var, setters in list(props.items()):
- if len(setters) == 1 and 'doc' in setters:
- continue
- if var in d:
-@@ -115,7 +115,7 @@ def unmakeProperties(obj):
- delFunc = delattr
- d = obj.__dict__
-
-- for var, value in d.items():
-+ for var, value in list(d.items()):
- if isinstance(value, property):
- for prop in [value.fget, value.fset, value.fdel]:
- if prop and not prop.__name__ in d:
-@@ -148,7 +148,7 @@ def _collectAttributes(cls, new_attrs, look_for_class)
-
- """
- result = []
-- for attr, value in new_attrs.items():
-+ for attr, value in list(new_attrs.items()):
- if isinstance(value, look_for_class):
- value.name = attr
- delattr(cls, attr)
-@@ -162,7 +162,7 @@ class CreateNewSQLObject:
- """
- pass
-
--class sqlmeta(object):
-+class sqlmeta(object, metaclass=declarative.DeclarativeMeta):
-
- """
- This object is the object we use to keep track of all sorts of
-@@ -236,8 +236,6 @@ class sqlmeta(object):
- # Default encoding for UnicodeCol's
- dbEncoding = None
-
-- __metaclass__ = declarative.DeclarativeMeta
--
- def __classinit__(cls, new_attrs):
- for attr in cls._unshared_attributes:
- if attr not in new_attrs:
-@@ -321,7 +319,7 @@ class sqlmeta(object):
- parent_columns = []
- for base in soClass.__bases__:
- if hasattr(base, "sqlmeta"):
-- parent_columns.extend(base.sqlmeta.columns.keys())
-+ parent_columns.extend(list(base.sqlmeta.columns.keys()))
- if hasattr(soClass, name):
- assert (name in parent_columns) or (name == "childName"), (
- "The class %s.%s already has a variable or method %r, you cannot "
-@@ -440,7 +438,7 @@ class sqlmeta(object):
- conn = connection or soClass._connection
- for columnDef in conn.columnsFromSchema(sqlmeta.table, soClass):
- if columnDef.name not in sqlmeta.columnDefinitions:
-- if isinstance(columnDef.name, unicode):
-+ if isinstance(columnDef.name, str):
- columnDef.name = columnDef.name.encode('ascii')
- sqlmeta.addColumn(columnDef)
-
-@@ -456,7 +454,7 @@ class sqlmeta(object):
- else:
- raise ValueError('Unknown column ' + column)
- if isinstance(column, col.Col):
-- for c in sqlmeta.columns.values():
-+ for c in list(sqlmeta.columns.values()):
- if column is c.columnDef:
- column = c
- break
-@@ -704,10 +702,8 @@ _postponed_local = local()
- # here, though -- just automatic method generation (like
- # methods and properties for each column) is done in
- # MetaSQLObject.
--class SQLObject(object):
-+class SQLObject(object, metaclass=declarative.DeclarativeMeta):
-
-- __metaclass__ = declarative.DeclarativeMeta
--
- _connection = sqlhub
-
- sqlmeta = sqlmeta
-@@ -770,12 +766,12 @@ class SQLObject(object):
- # _columns where the attribute has been set to None in this
- # class. If so, then we need to remove that column from
- # _columns.
-- for key in sqlmeta.columnDefinitions.keys():
-+ for key in list(sqlmeta.columnDefinitions.keys()):
- if (key in new_attrs
- and new_attrs[key] is None):
- del sqlmeta.columnDefinitions[key]
-
-- for column in sqlmeta.columnDefinitions.values():
-+ for column in list(sqlmeta.columnDefinitions.values()):
- sqlmeta.addColumn(column)
-
- for column in implicitColumns:
-@@ -850,7 +846,7 @@ class SQLObject(object):
- "(while fixing up sqlmeta %r inheritance)"
- % cls.sqlmeta)
- values = dict(cls.sqlmeta.__dict__)
-- for key in values.keys():
-+ for key in list(values.keys()):
- if key.startswith('__') and key.endswith('__'):
- # Magic values shouldn't be passed through:
- del values[key]
-@@ -931,7 +927,7 @@ class SQLObject(object):
- dbNames = [col.dbName for col in self.sqlmeta.columnList]
- selectResults = self._connection._SO_selectOne(self, dbNames)
- if not selectResults:
-- raise SQLObjectNotFound, "The object %s by the ID %s does not exist" % (self.__class__.__name__, self.id)
-+ raise SQLObjectNotFound("The object %s by the ID %s does not exist" % (self.__class__.__name__, self.id))
- self._SO_selectInit(selectResults)
- self._SO_createValues = {}
- self.sqlmeta.dirty = False
-@@ -958,7 +954,7 @@ class SQLObject(object):
- dbNames = [col.dbName for col in self.sqlmeta.columnList]
- selectResults = self._connection._SO_selectOne(self, dbNames)
- if not selectResults:
-- raise SQLObjectNotFound, "The object %s by the ID %s has been deleted" % (self.__class__.__name__, self.id)
-+ raise SQLObjectNotFound("The object %s by the ID %s has been deleted" % (self.__class__.__name__, self.id))
- self._SO_selectInit(selectResults)
- result = getattr(self, attrName)
- return result
-@@ -973,7 +969,7 @@ class SQLObject(object):
- dbNames = [col.dbName for col in self.sqlmeta.columnList]
- selectResults = self._connection._SO_selectOne(self, dbNames)
- if not selectResults:
-- raise SQLObjectNotFound, "The object %s by the ID %s has been deleted" % (self.__class__.__name__, self.id)
-+ raise SQLObjectNotFound("The object %s by the ID %s has been deleted" % (self.__class__.__name__, self.id))
- self._SO_selectInit(selectResults)
- self.sqlmeta.expired = False
- finally:
-@@ -986,7 +982,7 @@ class SQLObject(object):
- try:
- if self.sqlmeta.columns:
- values = [(self.sqlmeta.columns[v[0]].dbName, v[1])
-- for v in self._SO_createValues.items()]
-+ for v in list(self._SO_createValues.items())]
- self._connection._SO_update(self, values)
- self.sqlmeta.dirty = False
- self._SO_createValues = {}
-@@ -1067,13 +1063,13 @@ class SQLObject(object):
- is_column = lambda _c: _c in self.sqlmeta._plainSetters
- f_is_column = lambda item: is_column(item[0])
- f_not_column = lambda item: not is_column(item[0])
-- items = kw.items()
-- extra = dict(filter(f_not_column, items))
-- kw = dict(filter(f_is_column, items))
-+ items = list(kw.items())
-+ extra = dict(list(filter(f_not_column, items)))
-+ kw = dict(list(filter(f_is_column, items)))
-
- # _creating is special, see _SO_setValue
- if self.sqlmeta._creating or self.sqlmeta.lazyUpdate:
-- for name, value in kw.items():
-+ for name, value in list(kw.items()):
- from_python = getattr(self, '_SO_from_python_%s' % name, None)
- if from_python:
- kw[name] = dbValue = from_python(value, self._SO_validatorState)
-@@ -1086,16 +1082,16 @@ class SQLObject(object):
-
- self._SO_createValues.update(kw)
-
-- for name, value in extra.items():
-+ for name, value in list(extra.items()):
- try:
- getattr(self.__class__, name)
- except AttributeError:
- if name not in self.sqlmeta.columns:
-- raise TypeError, "%s.set() got an unexpected keyword argument %s" % (self.__class__.__name__, name)
-+ raise TypeError("%s.set() got an unexpected keyword argument %s" % (self.__class__.__name__, name))
- try:
- setattr(self, name, value)
-- except AttributeError, e:
-- raise AttributeError, '%s (with attribute %r)' % (e, name)
-+ except AttributeError as e:
-+ raise AttributeError('%s (with attribute %r)' % (e, name))
-
- self.sqlmeta.dirty = True
- return
-@@ -1112,7 +1108,7 @@ class SQLObject(object):
- # read the user's mind. We'll combine everything
- # else into a single UPDATE, if necessary.
- toUpdate = {}
-- for name, value in kw.items():
-+ for name, value in list(kw.items()):
- from_python = getattr(self, '_SO_from_python_%s' % name, None)
- if from_python:
- dbValue = from_python(value, self._SO_validatorState)
-@@ -1124,20 +1120,20 @@ class SQLObject(object):
- if self.sqlmeta.cacheValues:
- setattr(self, instanceName(name), value)
- toUpdate[name] = dbValue
-- for name, value in extra.items():
-+ for name, value in list(extra.items()):
- try:
- getattr(self.__class__, name)
- except AttributeError:
- if name not in self.sqlmeta.columns:
-- raise TypeError, "%s.set() got an unexpected keyword argument %s" % (self.__class__.__name__, name)
-+ raise TypeError("%s.set() got an unexpected keyword argument %s" % (self.__class__.__name__, name))
- try:
- setattr(self, name, value)
-- except AttributeError, e:
-- raise AttributeError, '%s (with attribute %r)' % (e, name)
-+ except AttributeError as e:
-+ raise AttributeError('%s (with attribute %r)' % (e, name))
-
- if toUpdate:
- args = [(self.sqlmeta.columns[name].dbName, value)
-- for name, value in toUpdate.items()]
-+ for name, value in list(toUpdate.items())]
- self._connection._SO_update(self, args)
- finally:
- self._SO_writeLock.release()
-@@ -1257,7 +1253,7 @@ class SQLObject(object):
- # If we specified an SQL DEFAULT, then we should use that
- if default is NoDefault:
- if column.defaultSQL is None:
-- raise TypeError, "%s() did not get expected keyword argument '%s'" % (self.__class__.__name__, column.name)
-+ raise TypeError("%s() did not get expected keyword argument '%s'" % (self.__class__.__name__, column.name))
- else:
- # There is defaultSQL for the column - do not put
- # the column to kw so that the backend creates the value
-@@ -1277,7 +1273,7 @@ class SQLObject(object):
- # Here's where an INSERT is finalized.
- # These are all the column values that were supposed
- # to be set, but were delayed until now:
-- setters = self._SO_createValues.items()
-+ setters = list(self._SO_createValues.items())
- # Here's their database names:
- names = [self.sqlmeta.columns[v[0]].dbName for v in setters]
- values = [v[1] for v in setters]
-@@ -1316,7 +1312,7 @@ class SQLObject(object):
- name = (name,)
- value = (value,)
- if len(name) != len(value):
-- raise ValueError, "'column' and 'value' tuples must be of the same size"
-+ raise ValueError("'column' and 'value' tuples must be of the same size")
- new_value = []
- for n, v in zip(name, value):
- from_python = getattr(cls, '_SO_from_python_' + n)
-@@ -1335,13 +1331,13 @@ class SQLObject(object):
- result, obj = cls._findAlternateID(name, dbName, value, connection)
- if not result:
- if idxName is None:
-- raise SQLObjectNotFound, "The %s by alternateID %s = %s does not exist" % (cls.__name__, name, repr(value))
-+ raise SQLObjectNotFound("The %s by alternateID %s = %s does not exist" % (cls.__name__, name, repr(value)))
- else:
- names = []
-- for i in xrange(len(name)):
-+ for i in range(len(name)):
- names.append("%s = %s" % (name[i], repr(value[i])))
- names = ', '.join(names)
-- raise SQLObjectNotFound, "The %s by unique index %s(%s) does not exist" % (cls.__name__, idxName, names)
-+ raise SQLObjectNotFound("The %s by unique index %s(%s) does not exist" % (cls.__name__, idxName, names))
- if obj:
- return obj
- if connection:
-@@ -1564,7 +1560,7 @@ class SQLObject(object):
- if results.count():
- # Restrictions only apply if there are
- # matching records on the related table
-- raise SQLObjectIntegrityError, (
-+ raise SQLObjectIntegrityError(
- "Tried to delete %s::%s but "
- "table %s has a restriction against it" %
- (klass.__name__, self.id, k.__name__))
-@@ -1638,7 +1634,7 @@ class SQLObject(object):
-
- @classmethod
- def setConnection(cls, value):
-- if isinstance(value, basestring):
-+ if isinstance(value, str):
- value = dbconnection.connectionForURI(value)
- cls._connection = value
-
-@@ -1720,7 +1716,7 @@ def getID(obj, refColumn=None):
- return getattr(obj, refColumn or 'id')
- elif isinstance(obj, int):
- return obj
-- elif isinstance(obj, long):
-+ elif isinstance(obj, int):
- return int(obj)
- elif isinstance(obj, str):
- try:
-@@ -1733,7 +1729,7 @@ def getID(obj, refColumn=None):
- def getObject(obj, klass):
- if isinstance(obj, int):
- return klass(obj)
-- elif isinstance(obj, long):
-+ elif isinstance(obj, int):
- return klass(int(obj))
- elif isinstance(obj, str):
- return klass(int(obj))
---- sqlobject/manager/command.py.orig 2011-05-15 15:48:27 UTC
-+++ sqlobject/manager/command.py
-@@ -69,10 +69,10 @@ def db_differences(soClass, conn):
- del existing[col.dbName]
- else:
- missing[col.dbName] = col
-- for col in existing.values():
-+ for col in list(existing.values()):
- diffs.append('Database has extra column: %s'
- % col.dbName)
-- for col in missing.values():
-+ for col in list(missing.values()):
- diffs.append('Database missing column: %s' % col.dbName)
- return diffs
-
-@@ -96,7 +96,7 @@ class CommandRunner(object):
- self.invalid('No COMMAND given (try "%s help")'
- % os.path.basename(invoked_as))
- real_command = self.command_aliases.get(command, command)
-- if real_command not in self.commands.keys():
-+ if real_command not in list(self.commands.keys()):
- self.invalid('COMMAND %s unknown' % command)
- runner = self.commands[real_command](
- invoked_as, command, args, self)
-@@ -109,7 +109,7 @@ class CommandRunner(object):
- self.command_aliases[alias] = name
-
- def invalid(self, msg, code=2):
-- print msg
-+ print(msg)
- sys.exit(code)
-
- the_runner = CommandRunner()
-@@ -170,10 +170,8 @@ def standard_parser(connection=True, simulate=True,
- default=[])
- return parser
-
--class Command(object):
-+class Command(object, metaclass=DeclarativeMeta):
-
-- __metaclass__ = DeclarativeMeta
--
- min_args = 0
- min_args_error = 'You must provide at least %(min_args)s arguments'
- max_args = 0
-@@ -225,7 +223,7 @@ class Command(object):
- # Check for circular references
- if cls in dependency_stack:
- dependency_stack.append(cls)
-- raise SQLObjectCircularReferenceError, (
-+ raise SQLObjectCircularReferenceError(
- "Found a circular reference: %s " %
- (' --> '.join([x.__name__
- for x in dependency_stack])))
-@@ -248,14 +246,14 @@ class Command(object):
- sorter.append((level, cls))
- sorter.sort()
- ordered_classes = [cls for level, cls in sorter]
-- except SQLObjectCircularReferenceError, msg:
-+ except SQLObjectCircularReferenceError as msg:
- # Failsafe: return the classes as-is if a circular reference
- # prevented the dependency levels to be calculated.
-- print ("Warning: a circular reference was detected in the "
-+ print(("Warning: a circular reference was detected in the "
- "model. Unable to sort the classes by dependency: they "
- "will be treated in alphabetic order. This may or may "
- "not work depending on your database backend. "
-- "The error was:\n%s" % msg)
-+ "The error was:\n%s" % msg))
- return classes
- return ordered_classes
-
-@@ -347,21 +345,21 @@ class Command(object):
- % '\n * '.join([soClass.__name__
- for soClass in missing]))
- if require_some and not all:
-- print 'No classes found!'
-+ print('No classes found!')
- if self.options.modules:
-- print 'Looked in modules: %s' % ', '.join(self.options.modules)
-+ print('Looked in modules: %s' % ', '.join(self.options.modules))
- else:
-- print 'No modules specified'
-+ print('No modules specified')
- if self.options.packages:
-- print 'Looked in packages: %s' % ', '.join(self.options.packages)
-+ print('Looked in packages: %s' % ', '.join(self.options.packages))
- else:
-- print 'No packages specified'
-+ print('No packages specified')
- if self.options.class_matchers:
-- print 'Matching class pattern: %s' % self.options.class_matches
-+ print('Matching class pattern: %s' % self.options.class_matches)
- if self.options.eggs:
-- print 'Looked in eggs: %s' % ', '.join(self.options.eggs)
-+ print('Looked in eggs: %s' % ', '.join(self.options.eggs))
- else:
-- print 'No eggs specified'
-+ print('No eggs specified')
- sys.exit(1)
- return self.orderClassesByDependencyLevel(all)
-
-@@ -411,7 +409,7 @@ class Command(object):
- if '#' in conf_fn:
- conf_fn, conf_section = conf_fn.split('#', 1)
-
-- from ConfigParser import ConfigParser
-+ from configparser import ConfigParser
- p = ConfigParser()
- # Case-sensitive:
- p.optionxform = str
-@@ -454,21 +452,20 @@ class Command(object):
- def find_classes_in_file(arg, dir_name, filenames):
- if dir_name.startswith('.svn'):
- return
-- filenames = filter(lambda fname: fname.endswith('.py') and fname != '__init__.py',
-- filenames)
-+ filenames = [fname for fname in filenames if fname.endswith('.py') and fname != '__init__.py']
- for fname in filenames:
- module_name = os.path.join(dir_name, fname)
- module_name = module_name[module_name.find(package_name):]
- module_name = module_name.replace(os.path.sep,'.')[:-3]
- try:
- module = moduleloader.load_module(module_name)
-- except ImportError, err:
-+ except ImportError as err:
- if self.options.verbose:
-- print 'Could not import module "%s". Error was : "%s"' % (module_name, err)
-+ print('Could not import module "%s". Error was : "%s"' % (module_name, err))
- continue
-- except Exception, exc:
-+ except Exception as exc:
- if self.options.verbose:
-- print 'Unknown exception while processing module "%s" : "%s"' % (module_name, exc)
-+ print('Unknown exception while processing module "%s" : "%s"' % (module_name, exc))
- continue
- classes = self.classes_from_module(module)
- all.extend(classes)
-@@ -484,7 +481,7 @@ class Command(object):
- if not mod:
- continue
- if self.options.verbose:
-- print 'Looking in module %s' % mod
-+ print('Looking in module %s' % mod)
- modules.extend(self.classes_from_module(
- moduleloader.load_module(mod)))
- return modules
-@@ -503,7 +500,7 @@ class Command(object):
- dist = pkg_resources.get_distribution(egg_spec)
- if not dist.has_metadata('sqlobject.txt'):
- if warn_no_sqlobject:
-- print 'No sqlobject.txt in %s egg info' % egg_spec
-+ print('No sqlobject.txt in %s egg info' % egg_spec)
- return None, {}
- result = {}
- for line in dist.get_metadata_lines('sqlobject.txt'):
-@@ -513,7 +510,7 @@ class Command(object):
- name, value = line.split('=', 1)
- name = name.strip().lower()
- if name in result:
-- print 'Warning: %s appears more than once in sqlobject.txt' % name
-+ print('Warning: %s appears more than once in sqlobject.txt' % name)
- result[name.strip().lower()] = value.strip()
- return dist, result
-
-@@ -532,12 +529,12 @@ class Command(object):
- else:
- prompt += ' [y/N]? '
- while 1:
-- response = raw_input(prompt).strip()
-+ response = input(prompt).strip()
- if not response.strip():
- return default
- if response and response[0].lower() in ('y', 'n'):
- return response[0].lower() == 'y'
-- print 'Y or N please'
-+ print('Y or N please')
-
- def shorten_filename(self, fn):
- """
-@@ -558,7 +555,7 @@ class Command(object):
- f = open(fn, 'w')
- f.write(pretext)
- f.close()
-- print '$EDITOR %s' % fn
-+ print('$EDITOR %s' % fn)
- os.system('$EDITOR %s' % fn)
- f = open(fn, 'r')
- content = f.read()
-@@ -582,16 +579,16 @@ class CommandSQL(Command):
- allConstraints = []
- for cls in classes:
- if self.options.verbose >= 1:
-- print '-- %s from %s' % (
-- cls.__name__, cls.__module__)
-+ print('-- %s from %s' % (
-+ cls.__name__, cls.__module__))
- createSql, constraints = cls.createTableSQL()
-- print createSql.strip() + ';\n'
-+ print(createSql.strip() + ';\n')
- allConstraints.append(constraints)
- for constraints in allConstraints:
- if constraints:
- for constraint in constraints:
- if constraint:
-- print constraint.strip() + ';\n'
-+ print(constraint.strip() + ';\n')
-
-
- class CommandList(Command):
-@@ -603,12 +600,12 @@ class CommandList(Command):
-
- def command(self):
- if self.options.verbose >= 1:
-- print 'Classes found:'
-+ print('Classes found:')
- classes = self.classes(require_connection=False)
- for soClass in classes:
-- print '%s.%s' % (soClass.__module__, soClass.__name__)
-+ print('%s.%s' % (soClass.__module__, soClass.__name__))
- if self.options.verbose >= 1:
-- print ' Table: %s' % soClass.sqlmeta.table
-+ print(' Table: %s' % soClass.sqlmeta.table)
-
- class CommandCreate(Command):
-
-@@ -633,26 +630,26 @@ class CommandCreate(Command):
- if not self.options.simulate:
- try:
- soClass._connection.createEmptyDatabase()
-- except soClass._connection.module.ProgrammingError, e:
-+ except soClass._connection.module.ProgrammingError as e:
- if str(e).find('already exists') != -1:
-- print 'Database already exists'
-+ print('Database already exists')
- else:
- raise
- else:
-- print '(simulating; cannot create database)'
-+ print('(simulating; cannot create database)')
- dbs_created.append(soClass._connection)
-- if soClass._connection not in constraints.keys():
-+ if soClass._connection not in list(constraints.keys()):
- constraints[soClass._connection] = []
- exists = soClass._connection.tableExists(soClass.sqlmeta.table)
- if v >= 1:
- if exists:
- existing += 1
-- print '%s already exists.' % soClass.__name__
-+ print('%s already exists.' % soClass.__name__)
- else:
-- print 'Creating %s' % soClass.__name__
-+ print('Creating %s' % soClass.__name__)
- if v >= 2:
- sql, extra = soClass.createTableSQL()
-- print sql
-+ print(sql)
- if (not self.options.simulate
- and not exists):
- if self.options.interactive:
-@@ -662,22 +659,22 @@ class CommandCreate(Command):
- if tableConstraints:
- constraints[soClass._connection].append(tableConstraints)
- else:
-- print 'Cancelled'
-+ print('Cancelled')
- else:
- created += 1
- tableConstraints = soClass.createTable(applyConstraints=False)
- if tableConstraints:
- constraints[soClass._connection].append(tableConstraints)
-- for connection in constraints.keys():
-+ for connection in list(constraints.keys()):
- if v >= 2:
-- print 'Creating constraints'
-+ print('Creating constraints')
- for constraintList in constraints[connection]:
- for constraint in constraintList:
- if constraint:
- connection.query(constraint)
- if v >= 1:
-- print '%i tables created (%i already exist)' % (
-- created, existing)
-+ print('%i tables created (%i already exist)' % (
-+ created, existing))
-
-
- class CommandDrop(Command):
-@@ -695,10 +692,10 @@ class CommandDrop(Command):
- exists = soClass._connection.tableExists(soClass.sqlmeta.table)
- if v >= 1:
- if exists:
-- print 'Dropping %s' % soClass.__name__
-+ print('Dropping %s' % soClass.__name__)
- else:
- not_existing += 1
-- print '%s does not exist.' % soClass.__name__
-+ print('%s does not exist.' % soClass.__name__)
- if (not self.options.simulate
- and exists):
- if self.options.interactive:
-@@ -706,13 +703,13 @@ class CommandDrop(Command):
- dropped += 1
- soClass.dropTable()
- else:
-- print 'Cancelled'
-+ print('Cancelled')
- else:
- dropped += 1
- soClass.dropTable()
- if v >= 1:
-- print '%i tables dropped (%i didn\'t exist)' % (
-- dropped, not_existing)
-+ print('%i tables dropped (%i didn\'t exist)' % (
-+ dropped, not_existing))
-
- class CommandStatus(Command):
-
-@@ -730,7 +727,7 @@ class CommandStatus(Command):
- if self.printed:
- return
- self.printed = True
-- print 'Checking %s...' % soClass.__name__
-+ print('Checking %s...' % soClass.__name__)
-
- def command(self):
- good = 0
-@@ -744,7 +741,7 @@ class CommandStatus(Command):
- self.print_class(soClass)
- if not conn.tableExists(soClass.sqlmeta.table):
- self.print_class(soClass)
-- print ' Does not exist in database'
-+ print(' Does not exist in database')
- missing_tables += 1
- continue
- try:
-@@ -752,13 +749,13 @@ class CommandStatus(Command):
- soClass)
- except AttributeError:
- if not columnsFromSchema_warning:
-- print 'Database does not support reading columns'
-+ print('Database does not support reading columns')
- columnsFromSchema_warning = True
- good += 1
- continue
-- except AssertionError, e:
-- print 'Cannot read db table %s: %s' % (
-- soClass.sqlmeta.table, e)
-+ except AssertionError as e:
-+ print('Cannot read db table %s: %s' % (
-+ soClass.sqlmeta.table, e))
- continue
- existing = {}
- for col in columns:
-@@ -772,19 +769,19 @@ class CommandStatus(Command):
- missing[col.dbName] = col
- if existing:
- self.print_class(soClass)
-- for col in existing.values():
-- print ' Database has extra column: %s' % col.dbName
-+ for col in list(existing.values()):
-+ print(' Database has extra column: %s' % col.dbName)
- if missing:
- self.print_class(soClass)
-- for col in missing.values():
-- print ' Database missing column: %s' % col.dbName
-+ for col in list(missing.values()):
-+ print(' Database missing column: %s' % col.dbName)
- if existing or missing:
- bad += 1
- else:
- good += 1
- if self.options.verbose:
-- print '%i in sync; %i out of sync; %i not in database' % (
-- good, bad, missing_tables)
-+ print('%i in sync; %i out of sync; %i not in database' % (
-+ good, bad, missing_tables))
-
- class CommandHelp(Command):
-
-@@ -799,20 +796,20 @@ class CommandHelp(Command):
- if self.args:
- the_runner.run([self.invoked_as, self.args[0], '-h'])
- else:
-- print 'Available commands:'
-- print ' (use "%s help COMMAND" or "%s COMMAND -h" ' % (
-- self.prog_name, self.prog_name)
-- print ' for more information)'
-- items = the_runner.commands.items()
-+ print('Available commands:')
-+ print(' (use "%s help COMMAND" or "%s COMMAND -h" ' % (
-+ self.prog_name, self.prog_name))
-+ print(' for more information)')
-+ items = list(the_runner.commands.items())
- items.sort()
- max_len = max([len(cn) for cn, c in items])
- for command_name, command in items:
-- print '%s:%s %s' % (command_name,
-+ print('%s:%s %s' % (command_name,
- ' '*(max_len-len(command_name)),
-- command.summary)
-+ command.summary))
- if command.aliases:
-- print '%s (Aliases: %s)' % (
-- ' '*max_len, ', '.join(command.aliases))
-+ print('%s (Aliases: %s)' % (
-+ ' '*max_len, ', '.join(command.aliases)))
-
- class CommandExecute(Command):
-
-@@ -834,7 +831,7 @@ class CommandExecute(Command):
- args = self.args
- if self.options.use_stdin:
- if self.options.verbose:
-- print "Reading additional SQL from stdin (Ctrl-D or Ctrl-Z to finish)..."
-+ print("Reading additional SQL from stdin (Ctrl-D or Ctrl-Z to finish)...")
- args.append(sys.stdin.read())
- self.conn = self.connection().getConnection()
- self.cursor = self.conn.cursor()
-@@ -843,22 +840,22 @@ class CommandExecute(Command):
-
- def execute_sql(self, sql):
- if self.options.verbose:
-- print sql
-+ print(sql)
- try:
- self.cursor.execute(sql)
-- except Exception, e:
-+ except Exception as e:
- if not self.options.verbose:
-- print sql
-- print "****Error:"
-- print ' ', e
-+ print(sql)
-+ print("****Error:")
-+ print(' ', e)
- return
- desc = self.cursor.description
- rows = self.cursor.fetchall()
- if self.options.verbose:
- if not self.cursor.rowcount:
-- print "No rows accessed"
-+ print("No rows accessed")
- else:
-- print "%i rows accessed" % self.cursor.rowcount
-+ print("%i rows accessed" % self.cursor.rowcount)
- if desc:
- for name, type_code, display_size, internal_size, precision, scale, null_ok in desc:
- sys.stdout.write("%s\t" % name)
-@@ -867,7 +864,7 @@ class CommandExecute(Command):
- for col in row:
- sys.stdout.write("%r\t" % col)
- sys.stdout.write("\n")
-- print
-+ print()
-
- class CommandRecord(Command):
-
-@@ -928,12 +925,12 @@ class CommandRecord(Command):
- sim = self.options.simulate
- classes = self.classes()
- if not classes:
-- print "No classes found!"
-+ print("No classes found!")
- return
-
- output_dir = self.find_output_dir()
- version = os.path.basename(output_dir)
-- print "Creating version %s" % version
-+ print("Creating version %s" % version)
- conns = []
- files = {}
- for cls in self.classes():
-@@ -963,14 +960,14 @@ class CommandRecord(Command):
- last_version_dir = self.find_last_version()
- if last_version_dir and not self.options.force_create:
- if v > 1:
-- print "Checking %s to see if it is current" % last_version_dir
-+ print("Checking %s to see if it is current" % last_version_dir)
- files_copy = files.copy()
- for fn in os.listdir(last_version_dir):
- if not fn.endswith('.sql'):
- continue
- if not fn in files_copy:
- if v > 1:
-- print "Missing file %s" % fn
-+ print("Missing file %s" % fn)
- break
- f = open(os.path.join(last_version_dir, fn), 'r')
- content = f.read()
-@@ -978,32 +975,32 @@ class CommandRecord(Command):
- if (self.strip_comments(files_copy[fn])
- != self.strip_comments(content)):
- if v > 1:
-- print "Content does not match: %s" % fn
-+ print("Content does not match: %s" % fn)
- break
- del files_copy[fn]
- else:
- # No differences so far
- if not files_copy:
- # Used up all files
-- print ("Current status matches version %s"
-- % os.path.basename(last_version_dir))
-+ print(("Current status matches version %s"
-+ % os.path.basename(last_version_dir)))
- return
- if v > 1:
-- print "Extra files: %s" % ', '.join(files_copy.keys())
-+ print("Extra files: %s" % ', '.join(list(files_copy.keys())))
- if v:
-- print ("Current state does not match %s"
-- % os.path.basename(last_version_dir))
-+ print(("Current state does not match %s"
-+ % os.path.basename(last_version_dir)))
- if v > 1 and not last_version_dir:
-- print "No last version to check"
-+ print("No last version to check")
- if not sim:
- os.mkdir(output_dir)
- if v:
-- print 'Making directory %s' % self.shorten_filename(output_dir)
-- files = files.items()
-+ print('Making directory %s' % self.shorten_filename(output_dir))
-+ files = list(files.items())
- files.sort()
- for fn, content in files:
- if v:
-- print ' Writing %s' % self.shorten_filename(fn)
-+ print(' Writing %s' % self.shorten_filename(fn))
- if not sim:
- f = open(os.path.join(output_dir, fn), 'w')
- f.write(content)
-@@ -1021,8 +1018,8 @@ class CommandRecord(Command):
- diff = ' %s: %s' % (cls.sqlmeta.table, diff)
- all_diffs.append(diff)
- if all_diffs:
-- print 'Database does not match schema:'
-- print '\n'.join(all_diffs)
-+ print('Database does not match schema:')
-+ print('\n'.join(all_diffs))
- for conn in conns:
- self.update_db(version, conn)
- else:
-@@ -1044,17 +1041,17 @@ class CommandRecord(Command):
- f = open(fn, 'w')
- f.write(text)
- f.close()
-- print 'Wrote to %s' % fn
-+ print('Wrote to %s' % fn)
-
- def update_db(self, version, conn):
- v = self.options.verbose
- if not conn.tableExists(SQLObjectVersionTable.sqlmeta.table):
- if v:
-- print ('Creating table %s'
-- % SQLObjectVersionTable.sqlmeta.table)
-+ print(('Creating table %s'
-+ % SQLObjectVersionTable.sqlmeta.table))
- sql = SQLObjectVersionTable.createTableSQL(connection=conn)
- if v > 1:
-- print sql
-+ print(sql)
- if not self.options.simulate:
- SQLObjectVersionTable.createTable(connection=conn)
- if not self.options.simulate:
-@@ -1073,7 +1070,7 @@ class CommandRecord(Command):
- if base is None:
- base = CONFIG.get('sqlobject_history_dir', '.')
- if not os.path.exists(base):
-- print 'Creating history directory %s' % self.shorten_filename(base)
-+ print('Creating history directory %s' % self.shorten_filename(base))
- if not self.options.simulate:
- os.makedirs(base)
- return base
-@@ -1084,8 +1081,8 @@ class CommandRecord(Command):
- dir = os.path.join(self.base_dir(), today + '-' +
- self.options.version_name)
- if os.path.exists(dir):
-- print ("Error, directory already exists: %s"
-- % dir)
-+ print(("Error, directory already exists: %s"
-+ % dir))
- sys.exit(1)
- return dir
- extra = ''
-@@ -1114,18 +1111,18 @@ class CommandRecord(Command):
- sim = self.options.simulate
- version = self.options.force_db_version
- if not self.version_regex.search(version):
-- print "Versions must be in the format YYYY-MM-DD..."
-- print "You version %s does not fit this" % version
-+ print("Versions must be in the format YYYY-MM-DD...")
-+ print("You version %s does not fit this" % version)
- return
- version_dir = os.path.join(self.base_dir(), version)
- if not os.path.exists(version_dir):
- if v:
-- print 'Creating %s' % self.shorten_filename(version_dir)
-+ print('Creating %s' % self.shorten_filename(version_dir))
- if not sim:
- os.mkdir(version_dir)
- elif v:
-- print ('Directory %s exists'
-- % self.shorten_filename(version_dir))
-+ print(('Directory %s exists'
-+ % self.shorten_filename(version_dir)))
- if self.options.db_record:
- self.update_db(version, self.connection())
-
-@@ -1162,51 +1159,51 @@ class CommandUpgrade(CommandRecord):
- else:
- fname = self.find_last_version()
- if fname is None:
-- print "No version exists, use 'record' command to create one"
-+ print("No version exists, use 'record' command to create one")
- return
- version_to = os.path.basename(fname)
- current = self.current_version()
- if v:
-- print 'Current version: %s' % current
-+ print('Current version: %s' % current)
- version_list = self.make_plan(current, version_to)
- if not version_list:
-- print 'Database up to date'
-+ print('Database up to date')
- return
- if v:
-- print 'Plan:'
-+ print('Plan:')
- for next_version, upgrader in version_list:
-- print ' Use %s to upgrade to %s' % (
-- self.shorten_filename(upgrader), next_version)
-+ print(' Use %s to upgrade to %s' % (
-+ self.shorten_filename(upgrader), next_version))
- conn = self.connection()
- for next_version, upgrader in version_list:
- f = open(upgrader)
- sql = f.read()
- f.close()
- if v:
-- print "Running:"
-- print sql
-- print '-'*60
-+ print("Running:")
-+ print(sql)
-+ print('-'*60)
- if not sim:
- try:
- conn.query(sql)
- except:
-- print "Error in script: %s" % upgrader
-+ print("Error in script: %s" % upgrader)
- raise
- self.update_db(next_version, conn)
-- print 'Done.'
-+ print('Done.')
-
-
- def current_version(self):
- conn = self.connection()
- if not conn.tableExists(SQLObjectVersionTable.sqlmeta.table):
-- print 'No sqlobject_version table!'
-+ print('No sqlobject_version table!')
- sys.exit(1)
- versions = list(SQLObjectVersionTable.select(connection=conn))
- if not versions:
-- print 'No rows in sqlobject_version!'
-+ print('No rows in sqlobject_version!')
- sys.exit(1)
- if len(versions) > 1:
-- print 'Ambiguous sqlobject_version_table'
-+ print('Ambiguous sqlobject_version_table')
- sys.exit(1)
- return versions[0].version
-
-@@ -1216,9 +1213,9 @@ class CommandUpgrade(CommandRecord):
- dbname = self.connection().dbName
- next_version, upgrader = self.best_upgrade(current, dest, dbname)
- if not upgrader:
-- print 'No way to upgrade from %s to %s' % (current, dest)
-- print ('(you need a %s/upgrade_%s_%s.sql script)'
-- % (current, dbname, dest))
-+ print('No way to upgrade from %s to %s' % (current, dest))
-+ print(('(you need a %s/upgrade_%s_%s.sql script)'
-+ % (current, dbname, dest)))
- sys.exit(1)
- plan = [(next_version, upgrader)]
- if next_version == dest:
-@@ -1229,42 +1226,42 @@ class CommandUpgrade(CommandRecord):
- def best_upgrade(self, current, dest, target_dbname):
- current_dir = os.path.join(self.base_dir(), current)
- if self.options.verbose > 1:
-- print ('Looking in %s for upgraders'
-- % self.shorten_filename(current_dir))
-+ print(('Looking in %s for upgraders'
-+ % self.shorten_filename(current_dir)))
- upgraders = []
- for fn in os.listdir(current_dir):
- match = self.upgrade_regex.search(fn)
- if not match:
- if self.options.verbose > 1:
-- print 'Not an upgrade script: %s' % fn
-+ print('Not an upgrade script: %s' % fn)
- continue
- dbname = match.group(1)
- version = match.group(2)
- if dbname != target_dbname:
- if self.options.verbose > 1:
-- print 'Not for this database: %s (want %s)' % (
-- dbname, target_dbname)
-+ print('Not for this database: %s (want %s)' % (
-+ dbname, target_dbname))
- continue
- if version > dest:
- if self.options.verbose > 1:
-- print 'Version too new: %s (only want %s)' % (
-- version, dest)
-+ print('Version too new: %s (only want %s)' % (
-+ version, dest))
- upgraders.append((version, os.path.join(current_dir, fn)))
- if not upgraders:
- if self.options.verbose > 1:
-- print 'No upgraders found in %s' % current_dir
-+ print('No upgraders found in %s' % current_dir)
- return None, None
- upgraders.sort()
- return upgraders[-1]
-
- def update_sys_path(paths, verbose):
-- if isinstance(paths, basestring):
-+ if isinstance(paths, str):
- paths = [paths]
- for path in paths:
- path = os.path.abspath(path)
- if path not in sys.path:
- if verbose > 1:
-- print 'Adding %s to path' % path
-+ print('Adding %s to path' % path)
- sys.path.insert(0, path)
-
- if __name__ == '__main__':
---- sqlobject/maxdb/maxdbconnection.py.orig 2022-03-15 19:15:16 UTC
-+++ sqlobject/maxdb/maxdbconnection.py
-@@ -246,7 +246,7 @@ class MaxdbConnection(DBAPI):
- pkmap[col_name]=True
-
- if len(pkmap) == 0:
-- raise PrimaryKeyNotFounded, tableName
-+ raise PrimaryKeyNotFounded(tableName)
-
- for (field, nullAllowed, default, data_type, data_len,
- data_scale) in colData:
---- sqlobject/mysql/mysqlconnection.py.orig 2011-05-08 15:49:57 UTC
-+++ sqlobject/mysql/mysqlconnection.py
-@@ -69,7 +69,7 @@ class MySQLConnection(DBAPI):
- db=self.db, user=self.user, passwd=self.password, **self.kw)
- if self.module.version_info[:3] >= (1, 2, 2):
- conn.ping(True) # Attempt to reconnect. This setting is persistent.
-- except self.module.OperationalError, e:
-+ except self.module.OperationalError as e:
- conninfo = "; used connection string: host=%(host)s, port=%(port)s, db=%(db)s, user=%(user)s" % self.__dict__
- raise OperationalError(ErrorMessage(e, conninfo))
-
-@@ -90,9 +90,9 @@ class MySQLConnection(DBAPI):
- conn.autocommit(auto)
-
- def _executeRetry(self, conn, cursor, query):
-- if self.need_unicode and not isinstance(query, unicode):
-+ if self.need_unicode and not isinstance(query, str):
- try:
-- query = unicode(query, self.dbEncoding)
-+ query = str(query, self.dbEncoding)
- except UnicodeError:
- pass
-
-@@ -111,7 +111,7 @@ class MySQLConnection(DBAPI):
- for count in range(3):
- try:
- return cursor.execute(query)
-- except self.module.OperationalError, e:
-+ except self.module.OperationalError as e:
- if e.args[0] in (self.module.constants.CR.SERVER_GONE_ERROR, self.module.constants.CR.SERVER_LOST):
- if count == 2:
- raise OperationalError(ErrorMessage(e))
-@@ -119,27 +119,27 @@ class MySQLConnection(DBAPI):
- self.printDebug(conn, str(e), 'ERROR')
- else:
- raise OperationalError(ErrorMessage(e))
-- except self.module.IntegrityError, e:
-+ except self.module.IntegrityError as e:
- msg = ErrorMessage(e)
- if e.args[0] == self.module.constants.ER.DUP_ENTRY:
- raise DuplicateEntryError(msg)
- else:
- raise IntegrityError(msg)
-- except self.module.InternalError, e:
-+ except self.module.InternalError as e:
- raise InternalError(ErrorMessage(e))
-- except self.module.ProgrammingError, e:
-+ except self.module.ProgrammingError as e:
- raise ProgrammingError(ErrorMessage(e))
-- except self.module.DataError, e:
-+ except self.module.DataError as e:
- raise DataError(ErrorMessage(e))
-- except self.module.NotSupportedError, e:
-+ except self.module.NotSupportedError as e:
- raise NotSupportedError(ErrorMessage(e))
-- except self.module.DatabaseError, e:
-+ except self.module.DatabaseError as e:
- raise DatabaseError(ErrorMessage(e))
-- except self.module.InterfaceError, e:
-+ except self.module.InterfaceError as e:
- raise InterfaceError(ErrorMessage(e))
-- except self.module.Warning, e:
-+ except self.module.Warning as e:
- raise Warning(ErrorMessage(e))
-- except self.module.Error, e:
-+ except self.module.Error as e:
- raise Error(ErrorMessage(e))
-
- def _queryInsertID(self, conn, soInstance, id, names, values):
-@@ -194,7 +194,7 @@ class MySQLConnection(DBAPI):
- # which is not always True (for an embedded application, e.g.)
- self.query('DESCRIBE %s' % (tableName))
- return True
-- except ProgrammingError, e:
-+ except ProgrammingError as e:
- if e[0].code == 1146: # ER_NO_SUCH_TABLE
- return False
- raise
---- sqlobject/postgres/pgconnection.py.orig 2013-09-30 14:25:11 UTC
-+++ sqlobject/postgres/pgconnection.py
-@@ -142,7 +142,7 @@ class PostgresConnection(DBAPI):
- conn = self.module.connect(self.dsn)
- else:
- conn = self.module.connect(**self.dsn_dict)
-- except self.module.OperationalError, e:
-+ except self.module.OperationalError as e:
- raise OperationalError(ErrorMessage(e, "used connection string %r" % self.dsn))
-
- # For printDebug in _executeRetry
-@@ -162,29 +162,29 @@ class PostgresConnection(DBAPI):
- self.printDebug(conn, query, 'QueryR')
- try:
- return cursor.execute(query)
-- except self.module.OperationalError, e:
-+ except self.module.OperationalError as e:
- raise OperationalError(ErrorMessage(e))
-- except self.module.IntegrityError, e:
-+ except self.module.IntegrityError as e:
- msg = ErrorMessage(e)
- if e.pgcode == '23505':
- raise DuplicateEntryError(msg)
- else:
- raise IntegrityError(msg)
-- except self.module.InternalError, e:
-+ except self.module.InternalError as e:
- raise InternalError(ErrorMessage(e))
-- except self.module.ProgrammingError, e:
-+ except self.module.ProgrammingError as e:
- raise ProgrammingError(ErrorMessage(e))
-- except self.module.DataError, e:
-+ except self.module.DataError as e:
- raise DataError(ErrorMessage(e))
-- except self.module.NotSupportedError, e:
-+ except self.module.NotSupportedError as e:
- raise NotSupportedError(ErrorMessage(e))
-- except self.module.DatabaseError, e:
-+ except self.module.DatabaseError as e:
- raise DatabaseError(ErrorMessage(e))
-- except self.module.InterfaceError, e:
-+ except self.module.InterfaceError as e:
- raise InterfaceError(ErrorMessage(e))
-- except self.module.Warning, e:
-+ except self.module.Warning as e:
- raise Warning(ErrorMessage(e))
-- except self.module.Error, e:
-+ except self.module.Error as e:
- raise Error(ErrorMessage(e))
-
- def _queryInsertID(self, conn, soInstance, id, names, values):
---- sqlobject/sqlbuilder.py.orig 2013-10-05 12:02:45 UTC
-+++ sqlobject/sqlbuilder.py
-@@ -67,8 +67,8 @@ import threading
- import types
- import weakref
-
--import classregistry
--from converters import registerConverter, sqlrepr, quote_str, unquote_str
-+from . import classregistry
-+from .converters import registerConverter, sqlrepr, quote_str, unquote_str
-
-
- class VersionError(Exception):
-@@ -86,7 +86,7 @@ class SQLObjectState(object):
- safeSQLRE = re.compile(r'^[a-zA-Z_][a-zA-Z0-9_\.]*$')
- def sqlIdentifier(obj):
- # some db drivers return unicode column names
-- return isinstance(obj, basestring) and bool(safeSQLRE.search(obj.strip()))
-+ return isinstance(obj, str) and bool(safeSQLRE.search(obj.strip()))
-
-
- def execute(expr, executor):
-@@ -97,7 +97,7 @@ def execute(expr, executor):
-
-
- def _str_or_sqlrepr(expr, db):
-- if isinstance(expr, basestring):
-+ if isinstance(expr, str):
- return expr
- return sqlrepr(expr, db)
-
-@@ -181,9 +181,9 @@ class SQLExpression:
- return repr(self)
-
- def __cmp__(self, other):
-- raise VersionError, "Python 2.1+ required"
-+ raise VersionError("Python 2.1+ required")
- def __rcmp__(self, other):
-- raise VersionError, "Python 2.1+ required"
-+ raise VersionError("Python 2.1+ required")
-
- def startswith(self, s):
- return STARTSWITH(self, s)
-@@ -287,7 +287,7 @@ class SQLCall(SQLExpression):
- def components(self):
- return [self.expr] + list(self.args)
- def execute(self, executor):
-- raise ValueError, "I don't yet know how to locally execute functions"
-+ raise ValueError("I don't yet know how to locally execute functions")
-
- registerConverter(SQLCall, SQLExprConverter)
-
-@@ -316,7 +316,7 @@ class SQLConstant(SQLExpression):
- def __sqlrepr__(self, db):
- return self.const
- def execute(self, executor):
-- raise ValueError, "I don't yet know how to execute SQL constants"
-+ raise ValueError("I don't yet know how to execute SQL constants")
-
- registerConverter(SQLConstant, SQLExprConverter)
-
-@@ -391,7 +391,7 @@ class Table(SQLExpression):
- def __sqlrepr__(self, db):
- return _str_or_sqlrepr(self.tableName, db)
- def execute(self, executor):
-- raise ValueError, "Tables don't have values"
-+ raise ValueError("Tables don't have values")
-
- class SQLObjectTable(Table):
- FieldClass = SQLObjectField
-@@ -411,7 +411,7 @@ class SQLObjectTable(Table):
- elif attr in self.soClass.sqlmeta.columns:
- column = self.soClass.sqlmeta.columns[attr]
- return self._getattrFromColumn(column, attr)
-- elif attr+'ID' in [k for (k, v) in self.soClass.sqlmeta.columns.items() if v.foreignKey]:
-+ elif attr+'ID' in [k for (k, v) in list(self.soClass.sqlmeta.columns.items()) if v.foreignKey]:
- attr += 'ID'
- column = self.soClass.sqlmeta.columns[attr]
- return self._getattrFromColumn(column, attr)
-@@ -427,7 +427,7 @@ class SQLObjectTable(Table):
- class SQLObjectTableWithJoins(SQLObjectTable):
-
- def __getattr__(self, attr):
-- if attr+'ID' in [k for (k, v) in self.soClass.sqlmeta.columns.items() if v.foreignKey]:
-+ if attr+'ID' in [k for (k, v) in list(self.soClass.sqlmeta.columns.items()) if v.foreignKey]:
- column = self.soClass.sqlmeta.columns[attr+'ID']
- return self._getattrFromForeignKey(column, attr)
- elif attr in [x.joinMethodName for x in self.soClass.sqlmeta.joins]:
-@@ -616,7 +616,7 @@ class Select(SQLExpression):
- # None doesn't filter anything, it's just a no-op:
- return self
- clause = self.ops['clause']
-- if isinstance(clause, basestring):
-+ if isinstance(clause, str):
- clause = SQLConstant('(%s)' % clause)
- return self.newClause(AND(clause, filter_clause))
-
-@@ -697,7 +697,7 @@ class Select(SQLExpression):
- if self.ops['limit'] is not NoDefault:
- end = start + self.ops['limit']
- if start or end:
-- from dbconnection import dbConnectionForScheme
-+ from .dbconnection import dbConnectionForScheme
- select = dbConnectionForScheme(db)._queryAddLimitOffset(select, start, end)
- if self.ops['forUpdate']:
- select += " FOR UPDATE"
-@@ -711,7 +711,7 @@ class Insert(SQLExpression):
- self.table = table
- if valueList:
- if values:
-- raise TypeError, "You may only give valueList *or* values"
-+ raise TypeError("You may only give valueList *or* values")
- self.valueList = valueList
- else:
- self.valueList = [values]
-@@ -722,7 +722,7 @@ class Insert(SQLExpression):
- allowNonDict = True
- template = self.template
- if (template is NoDefault) and isinstance(self.valueList[0], dict):
-- template = self.valueList[0].keys()
-+ template = list(self.valueList[0].keys())
- allowNonDict = False
- if template is not NoDefault:
- insert += " (%s)" % ", ".join(template)
-@@ -732,10 +732,10 @@ class Insert(SQLExpression):
- for value in self.valueList:
- if isinstance(value, dict):
- if template is NoDefault:
-- raise TypeError, "You can't mix non-dictionaries with dictionaries in an INSERT if you don't provide a template (%s)" % repr(value)
-+ raise TypeError("You can't mix non-dictionaries with dictionaries in an INSERT if you don't provide a template (%s)" % repr(value))
- value = dictToList(template, value)
- elif not allowNonDict:
-- raise TypeError, "You can't mix non-dictionaries with dictionaries in an INSERT if you don't provide a template (%s)" % repr(value)
-+ raise TypeError("You can't mix non-dictionaries with dictionaries in an INSERT if you don't provide a template (%s)" % repr(value))
- listToJoin_app("(%s)" % ", ".join([sqlrepr(v, db) for v in value]))
- insert = "%s%s" % (insert, ", ".join(listToJoin))
- return insert
-@@ -746,8 +746,8 @@ def dictToList(template, dict):
- list = []
- for key in template:
- list.append(dict[key])
-- if len(dict.keys()) > len(template):
-- raise TypeError, "Extra entries in dictionary that aren't asked for in template (template=%s, dict=%s)" % (repr(template), repr(dict))
-+ if len(list(dict.keys())) > len(template):
-+ raise TypeError("Extra entries in dictionary that aren't asked for in template (template=%s, dict=%s)" % (repr(template), repr(dict)))
- return list
-
- class Update(SQLExpression):
-@@ -768,7 +768,7 @@ class Update(SQLExpression):
- update += ","
- update += " %s=%s" % (self.template[i], sqlrepr(self.values[i], db))
- else:
-- for key, value in self.values.items():
-+ for key, value in list(self.values.items()):
- if first:
- first = False
- else:
-@@ -788,7 +788,7 @@ class Delete(SQLExpression):
- def __init__(self, table, where=NoDefault):
- self.table = table
- if where is NoDefault:
-- raise TypeError, "You must give a where clause or pass in None to indicate no where clause"
-+ raise TypeError("You must give a where clause or pass in None to indicate no where clause")
- self.whereClause = where
- def __sqlrepr__(self, db):
- whereClause = self.whereClause
-@@ -846,7 +846,7 @@ def _IN(item, list):
- return SQLOp("IN", item, list)
-
- def IN(item, list):
-- from sresults import SelectResults # Import here to avoid circular import
-+ from .sresults import SelectResults # Import here to avoid circular import
- if isinstance(list, SelectResults):
- query = list.queryForSelect()
- query.ops['items'] = [list.sourceClass.q.id]
-@@ -880,7 +880,7 @@ def ISNOTNULL(expr):
- class ColumnAS(SQLOp):
- ''' Just like SQLOp('AS', expr, name) except without the parentheses '''
- def __init__(self, expr, name):
-- if isinstance(name, basestring):
-+ if isinstance(name, str):
- name = SQLConstant(name)
- SQLOp.__init__(self, 'AS', expr, name)
- def __sqlrepr__(self, db):
-@@ -919,11 +919,11 @@ class _LikeQuoted:
- return "CONCAT(%s)" % ", ".join(values)
- else:
- return " || ".join(values)
-- elif isinstance(s, basestring):
-+ elif isinstance(s, str):
- s = _quote_like_special(unquote_str(sqlrepr(s, db)), db)
- return quote_str("%s%s%s" % (self.prefix, s, self.postfix), db)
- else:
-- raise TypeError, "expected str, unicode or SQLExpression, got %s" % type(s)
-+ raise TypeError("expected str, unicode or SQLExpression, got %s" % type(s))
-
- def _quote_like_special(s, db):
- if db in ('postgres', 'rdbhost'):
-@@ -1021,9 +1021,9 @@ class SQLJoinConditional(SQLJoin):
- (Table1.q.col1, Table2.q.col2)
- """
- if not on_condition and not using_columns:
-- raise TypeError, "You must give ON condition or USING columns"
-+ raise TypeError("You must give ON condition or USING columns")
- if on_condition and using_columns:
-- raise TypeError, "You must give ON condition or USING columns but not both"
-+ raise TypeError("You must give ON condition or USING columns but not both")
- SQLJoin.__init__(self, table1, table2, op)
- self.on_condition = on_condition
- self.using_columns = using_columns
-@@ -1254,7 +1254,7 @@ class ImportProxy(SQLExpression):
- self.soClass = None
- classregistry.registry(registry).addClassCallback(clsName, lambda foreign, me: setattr(me, 'soClass', foreign), self)
-
-- def __nonzero__(self):
-+ def __bool__(self):
- return True
-
- def __getattr__(self, attr):
---- sqlobject/sqlite/sqliteconnection.py.orig 2014-04-12 20:42:31 UTC
-+++ sqlobject/sqlite/sqliteconnection.py
-@@ -1,7 +1,7 @@
- import base64
- import os
--import thread
--import urllib
-+import _thread
-+import urllib.request, urllib.parse, urllib.error
- from sqlobject.dbconnection import DBAPI, Boolean
- from sqlobject import col, sqlbuilder
- from sqlobject.dberrors import *
-@@ -121,7 +121,7 @@ class SQLiteConnection(DBAPI):
- path = "//" + path
- else:
- path = "///" + path
-- path = urllib.quote(path)
-+ path = urllib.parse.quote(path)
- return 'sqlite:%s' % path
-
- def getConnection(self):
-@@ -133,7 +133,7 @@ class SQLiteConnection(DBAPI):
- self._connectionNumbers[id(conn)] = self._connectionCount
- self._connectionCount += 1
- return conn
-- threadid = thread.get_ident()
-+ threadid = _thread.get_ident()
- if (self._pool is not None
- and threadid in self._threadPool):
- conn = self._threadPool[threadid]
-@@ -206,30 +206,30 @@ class SQLiteConnection(DBAPI):
- self.printDebug(conn, query, 'QueryR')
- try:
- return cursor.execute(query)
-- except self.module.OperationalError, e:
-+ except self.module.OperationalError as e:
- raise OperationalError(ErrorMessage(e))
-- except self.module.IntegrityError, e:
-+ except self.module.IntegrityError as e:
- msg = ErrorMessage(e)
- if msg.startswith('column') and msg.endswith('not unique') \
- or msg.startswith('UNIQUE constraint failed:'):
- raise DuplicateEntryError(msg)
- else:
- raise IntegrityError(msg)
-- except self.module.InternalError, e:
-+ except self.module.InternalError as e:
- raise InternalError(ErrorMessage(e))
-- except self.module.ProgrammingError, e:
-+ except self.module.ProgrammingError as e:
- raise ProgrammingError(ErrorMessage(e))
-- except self.module.DataError, e:
-+ except self.module.DataError as e:
- raise DataError(ErrorMessage(e))
-- except self.module.NotSupportedError, e:
-+ except self.module.NotSupportedError as e:
- raise NotSupportedError(ErrorMessage(e))
-- except self.module.DatabaseError, e:
-+ except self.module.DatabaseError as e:
- raise DatabaseError(ErrorMessage(e))
-- except self.module.InterfaceError, e:
-+ except self.module.InterfaceError as e:
- raise InterfaceError(ErrorMessage(e))
-- except self.module.Warning, e:
-+ except self.module.Warning as e:
- raise Warning(ErrorMessage(e))
-- except self.module.Error, e:
-+ except self.module.Error as e:
- raise Error(ErrorMessage(e))
-
- def _queryInsertID(self, conn, soInstance, id, names, values):
---- sqlobject/util/moduleloader.py.orig 2011-05-15 15:48:27 UTC
-+++ sqlobject/util/moduleloader.py
-@@ -15,7 +15,7 @@ def load_module_from_name(filename, module_name):
- if not os.path.exists(init_filename):
- try:
- f = open(init_filename, 'w')
-- except (OSError, IOError), e:
-+ except (OSError, IOError) as e:
- raise IOError(
- 'Cannot write __init__.py file into directory %s (%s)\n'
- % (os.path.dirname(filename), e))