Added rebuild_cache; use base64 string to encode/decode
svn: r18288
This commit is contained in:
parent
17f1796f1c
commit
f47691367c
@ -27,6 +27,7 @@
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
import cPickle
|
||||
import base64
|
||||
import web
|
||||
import gen
|
||||
from gen.db import DbReadBase, DbWriteBase
|
||||
@ -187,7 +188,7 @@ class DbDjango(DbWriteBase, DbReadBase):
|
||||
|
||||
def make_family(self, family):
|
||||
if family.cache:
|
||||
data = cPickle.loads(str(family.cache))
|
||||
data = cPickle.loads(base64.decodestring(family.cache))
|
||||
obj = gen.lib.Family.create(data)
|
||||
else:
|
||||
data = self.dji.get_family(family)
|
||||
@ -196,7 +197,7 @@ class DbDjango(DbWriteBase, DbReadBase):
|
||||
|
||||
def make_person(self, person):
|
||||
if person.cache:
|
||||
data = cPickle.loads(str(person.cache))
|
||||
data = cPickle.loads(base64.decodestring(person.cache))
|
||||
obj = gen.lib.Person.create(data)
|
||||
else:
|
||||
data = self.dji.get_person(person)
|
||||
|
@ -28,6 +28,8 @@
|
||||
#------------------------------------------------------------------------
|
||||
import time
|
||||
import sys
|
||||
import cPickle
|
||||
import base64
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
@ -1396,3 +1398,78 @@ class DjangoInterface(object):
|
||||
self.add_media_ref_list(event, media_list)
|
||||
self.add_source_ref_list(event, source_list)
|
||||
|
||||
def rebuild_caches(self, callback=None):
|
||||
"""
|
||||
Call this to rebuild the caches for all primary models.
|
||||
"""
|
||||
if not callable(callback):
|
||||
callback = lambda (percent): None # dummy
|
||||
|
||||
callback(0)
|
||||
count = 0.0
|
||||
total = (self.Note.all().count() +
|
||||
self.Person.all().count() +
|
||||
self.Event.all().count() +
|
||||
self.Family.all().count() +
|
||||
self.Repository.all().count() +
|
||||
self.Place.all().count() +
|
||||
self.Media.all().count() +
|
||||
self.Source.all().count())
|
||||
|
||||
for item in self.Person.all():
|
||||
raw = self.get_person(item)
|
||||
item.cache = base64.encodestring(cPickle.dumps(raw))
|
||||
item.save()
|
||||
callback(100 * count/total)
|
||||
count += 1
|
||||
|
||||
for item in self.Family.all():
|
||||
raw = self.get_family(item)
|
||||
item.cache = base64.encodestring(cPickle.dumps(raw))
|
||||
item.save()
|
||||
callback(100 * count/total)
|
||||
count += 1
|
||||
|
||||
for item in self.Source.all():
|
||||
raw = self.get_source(item)
|
||||
item.cache = base64.encodestring(cPickle.dumps(raw))
|
||||
item.save()
|
||||
callback(100 * count/total)
|
||||
count += 1
|
||||
|
||||
for item in self.Event.all():
|
||||
raw = self.get_event(item)
|
||||
item.cache = base64.encodestring(cPickle.dumps(raw))
|
||||
item.save()
|
||||
callback(100 * count/total)
|
||||
count += 1
|
||||
|
||||
for item in self.Repository.all():
|
||||
raw = self.get_repository(item)
|
||||
item.cache = base64.encodestring(cPickle.dumps(raw))
|
||||
item.save()
|
||||
callback(100 * count/total)
|
||||
count += 1
|
||||
|
||||
for item in self.Place.all():
|
||||
raw = self.get_place(item)
|
||||
item.cache = base64.encodestring(cPickle.dumps(raw))
|
||||
item.save()
|
||||
callback(100 * count/total)
|
||||
count += 1
|
||||
|
||||
for item in self.Media.all():
|
||||
raw = self.get_media(item)
|
||||
item.cache = base64.encodestring(cPickle.dumps(raw))
|
||||
item.save()
|
||||
callback(100 * count/total)
|
||||
count += 1
|
||||
|
||||
for item in self.Note.all():
|
||||
raw = self.get_note(item)
|
||||
item.cache = base64.encodestring(cPickle.dumps(raw))
|
||||
item.save()
|
||||
callback(100 * count/total)
|
||||
count += 1
|
||||
|
||||
callback(100)
|
||||
|
Loading…
Reference in New Issue
Block a user