pickle.dumps(db(query).select() now always works and loads restore the full object (almost)
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.0.9 (2012-09-29 22:33:02) dev
|
Version 2.0.9 (2012-09-29 23:20:28) dev
|
||||||
|
|||||||
+21
-25
@@ -1947,7 +1947,7 @@ class BaseAdapter(ConnectionPool):
|
|||||||
db._referee_name % dict(
|
db._referee_name % dict(
|
||||||
table=rfield.tablename,field=rfield.name)
|
table=rfield.tablename,field=rfield.name)
|
||||||
if referee_link and not referee_link in colset:
|
if referee_link and not referee_link in colset:
|
||||||
colset[referee_link] = Set(db,rfield == id)
|
colset[referee_link] = LazySet(rfield,id)
|
||||||
else:
|
else:
|
||||||
if not '_extra' in new_row:
|
if not '_extra' in new_row:
|
||||||
new_row['_extra'] = Row()
|
new_row['_extra'] = Row()
|
||||||
@@ -6445,15 +6445,6 @@ class Row(object):
|
|||||||
del d[k]
|
del d[k]
|
||||||
return d
|
return d
|
||||||
|
|
||||||
def Row_unpickler(data):
|
|
||||||
return Row(cPickle.loads(data))
|
|
||||||
|
|
||||||
def Row_pickler(data):
|
|
||||||
return Row_unpickler, (cPickle.dumps(data.as_dict(datetime_to_str=False)),)
|
|
||||||
|
|
||||||
copy_reg.pickle(Row, Row_pickler, Row_unpickler)
|
|
||||||
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Everything below should be independent of the specifics of the database
|
# Everything below should be independent of the specifics of the database
|
||||||
# and should work for RDBMs and some NoSQL databases
|
# and should work for RDBMs and some NoSQL databases
|
||||||
@@ -6685,8 +6676,6 @@ class DAL(object):
|
|||||||
|
|
||||||
if hasattr(self,'_adapter'): return
|
if hasattr(self,'_adapter'): return
|
||||||
|
|
||||||
print 'in init'
|
|
||||||
|
|
||||||
if not decode_credentials:
|
if not decode_credentials:
|
||||||
credential_decoder = lambda cred: cred
|
credential_decoder = lambda cred: cred
|
||||||
else:
|
else:
|
||||||
@@ -8849,10 +8838,12 @@ class Set(object):
|
|||||||
|
|
||||||
class RecordUpdater(object):
|
class RecordUpdater(object):
|
||||||
def __init__(self, colset, table, id):
|
def __init__(self, colset, table, id):
|
||||||
self.colset, self.table, self.id = colset, table, id
|
self.colset, self.db, self.tablename, self.id = \
|
||||||
|
colset, table._db, table._tablename, id
|
||||||
|
|
||||||
def __call__(self, **fields):
|
def __call__(self, **fields):
|
||||||
colset, table, id = self.colset, self.table, self.id
|
colset, db, tablename, id = self.colset, self.db, self.tablename, self.id
|
||||||
|
table = db[tablename]
|
||||||
newfields = fields or dict(colset)
|
newfields = fields or dict(colset)
|
||||||
for fieldname in newfields.keys():
|
for fieldname in newfields.keys():
|
||||||
if not fieldname in table.fields or table[fieldname].type=='id':
|
if not fieldname in table.fields or table[fieldname].type=='id':
|
||||||
@@ -8863,9 +8854,23 @@ class RecordUpdater(object):
|
|||||||
|
|
||||||
class RecordDeleter(object):
|
class RecordDeleter(object):
|
||||||
def __init__(self, table, id):
|
def __init__(self, table, id):
|
||||||
self.table, self.id = table,id
|
self.db, self.tablename, self.id = table._db, table._tablename, id
|
||||||
def __call__(self):
|
def __call__(self):
|
||||||
return self.table._db(self.table._id==self.id).delete()
|
return self.db(self.db[self.tablename]._id==self.id).delete()
|
||||||
|
|
||||||
|
class LazySet(object):
|
||||||
|
def __init__(self, field, id):
|
||||||
|
self.db, self.tablename, self.fieldname, self.id = \
|
||||||
|
field.db, field._tablename, field.name, id
|
||||||
|
def _getset(self):
|
||||||
|
query = self.db[self.tablename][self.fieldname]==self.id
|
||||||
|
return Set(self.db,query)
|
||||||
|
def select(self,*a,**b):
|
||||||
|
return self._getset().select(*a,**b)
|
||||||
|
def delete(self,*a,**b):
|
||||||
|
return self._getset().update(*a,**b)
|
||||||
|
def __call__(self,*a,**b):
|
||||||
|
return self._getset()(*a,**b)
|
||||||
|
|
||||||
|
|
||||||
class VirtualCommand(object):
|
class VirtualCommand(object):
|
||||||
@@ -9242,15 +9247,6 @@ class Rows(object):
|
|||||||
import gluon.contrib.simplejson as simplejson
|
import gluon.contrib.simplejson as simplejson
|
||||||
return simplejson.dumps(items)
|
return simplejson.dumps(items)
|
||||||
|
|
||||||
# def Rows_unpickler(data):
|
|
||||||
# return cPickle.loads(data)
|
|
||||||
#
|
|
||||||
# def Rows_pickler(data):
|
|
||||||
# return Rows_unpickler, \
|
|
||||||
# (cPickle.dumps(data.as_list(storage_to_dict=False,
|
|
||||||
# datetime_to_str=False)),)
|
|
||||||
# copy_reg.pickle(Rows, Rows_pickler, Rows_unpickler)
|
|
||||||
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# dummy function used to define some doctests
|
# dummy function used to define some doctests
|
||||||
|
|||||||
Reference in New Issue
Block a user