diff --git a/VERSION b/VERSION index 4acb0bb2..545705e2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.2.1 (2012-10-23 11:13:22) stable +Version 2.2.1 (2012-10-23 11:29:56) stable diff --git a/gluon/dal.py b/gluon/dal.py index 9e8a7b42..fafe0727 100644 --- a/gluon/dal.py +++ b/gluon/dal.py @@ -170,16 +170,20 @@ import glob import traceback import platform -python_version = sys.version_info[0] -if python_version == 2: +PYTHON_VERSION = sys.version_info[0] +if PYTHON_VERSION == 2: import cPickle as pickle import cStringIO as StringIO import copy_reg as copyreg + hashlib_md5 = hashlib.md5 + bytes, unicode = str, unicode else: import pickle from io import StringIO as StringIO import copyreg long = int + hashlib_md5 = lambda s: hashlib.md5(bytes(s,'utf8')) + bytes, unicode = bytes, str CALLABLETYPES = (types.LambdaType, types.FunctionType, types.BuiltinFunctionType, @@ -1592,7 +1596,7 @@ class BaseAdapter(ConnectionPool): else: (cache_model, time_expire) = cache key = self.uri + '/' + sql + '/rows' - if len(key)>200: key = hashlib.md5(key).hexdigest() + if len(key)>200: key = hashlib_md5(key).hexdigest() def _select_aux2(): self.execute(sql) return self._fetchall() @@ -1615,7 +1619,7 @@ class BaseAdapter(ConnectionPool): del attributes['cache'] (cache_model, time_expire) = cache key = self.uri + '/' + sql - if len(key)>200: key = hashlib.md5(key).hexdigest() + if len(key)>200: key = hashlib_md5(key).hexdigest() args = (sql,fields,attributes) return cache_model( key, @@ -1769,8 +1773,8 @@ class BaseAdapter(ConnectionPool): obj = obj.isoformat()[:10] else: obj = str(obj) - if not isinstance(obj,str): - obj = str(obj) + if not isinstance(obj,bytes): + obj = bytes(obj) try: obj.decode(self.db_codec) except: @@ -2097,8 +2101,11 @@ class SQLiteAdapter(BaseAdapter): else: dbpath = uri.split('://',1)[1] if dbpath[0] != '/': - dbpath = pjoin( - self.folder.decode(path_encoding).encode('utf8'), dbpath) + if PYTHON_VERSION == 2: + dbpath = pjoin( + self.folder.decode(path_encoding).encode('utf8'), dbpath) + else: + dbpath = pjoin(self.folder, dbpath) if not 'check_same_thread' in driver_args: driver_args['check_same_thread'] = False if not 'detect_types' in driver_args: @@ -6633,7 +6640,7 @@ class DAL(object): db = super(DAL, cls).__new__(cls) THREAD_LOCAL.db_instances_zombie[db_uid] = db else: - db_uid = kwargs.get('db_uid',hashlib.md5(repr(uri)).hexdigest()) + db_uid = kwargs.get('db_uid',hashlib_md5(repr(uri)).hexdigest()) if db_uid in THREAD_LOCAL.db_instances_zombie: db = THREAD_LOCAL.db_instances_zombie[db_uid] del THREAD_LOCAL.db_instances_zombie[db_uid] @@ -6798,7 +6805,7 @@ class DAL(object): db_codec=db_codec) migrate = fake_migrate = False adapter = self._adapter - self._uri_hash = hashlib.md5(adapter.uri).hexdigest() + self._uri_hash = hashlib_md5(adapter.uri).hexdigest() self._tables = SQLCallableList() self.check_reserved = check_reserved if self.check_reserved: @@ -8792,7 +8799,7 @@ class Set(object): cache_model, time_expire = cache sql = self._count(distinct=distinct) key = db._uri + '/' + sql - if len(key)>200: key = hashlib.md5(key).hexdigest() + if len(key)>200: key = hashlib_md5(key).hexdigest() return cache_model( key, (lambda self=self,distinct=distinct: \ diff --git a/gluon/tests/test_dal.py b/gluon/tests/test_dal.py index b639c5e7..d92ac0e6 100644 --- a/gluon/tests/test_dal.py +++ b/gluon/tests/test_dal.py @@ -13,7 +13,10 @@ else: import unittest import datetime -import cStringIO +try: + import cStringIO as StringIO +except: + from io import StringIO from dal import DAL, Field, Table, SQLALL ALLOWED_DATATYPES = [ @@ -555,11 +558,11 @@ class TestImportExportFields(unittest.TestCase): id = db.person.insert(name=str(k)) db.pet.insert(friend=id,name=str(k)) db.commit() - stream = cStringIO.StringIO() + stream = StringIO.StringIO() db.export_to_csv_file(stream) db(db.pet).delete() db(db.person).delete() - stream = cStringIO.StringIO(stream.getvalue()) + stream = StringIO.StringIO(stream.getvalue()) db.import_from_csv_file(stream) assert db(db.person.id==db.pet.friend)(db.person.name==db.pet.name).count()==10 db.pet.drop() @@ -579,9 +582,9 @@ class TestImportExportUuidFields(unittest.TestCase): id = db.person.insert(name=str(k),uuid=str(k)) db.pet.insert(friend=id,name=str(k)) db.commit() - stream = cStringIO.StringIO() + stream = StringIO.StringIO() db.export_to_csv_file(stream) - stream = cStringIO.StringIO(stream.getvalue()) + stream = StringIO.StringIO(stream.getvalue()) db.import_from_csv_file(stream) assert db(db.person).count()==10 assert db(db.person.id==db.pet.friend)(db.person.name==db.pet.name).count()==20 diff --git a/gluon/utils.py b/gluon/utils.py index 10fb2457..04bcb649 100644 --- a/gluon/utils.py +++ b/gluon/utils.py @@ -38,7 +38,7 @@ try: except ImportError: try: from .aes import AES - except ImportError: + except (ImportError, ValueError): from contrib.aes import AES try: