add initial cursor iter impl.
svn: r8052
This commit is contained in:
parent
63614a2740
commit
3a69a0145e
@ -1,3 +1,7 @@
|
|||||||
|
2007-02-04 Richard Taylor <rjt-gramps@thegrindstone.me.uk>
|
||||||
|
* src/GrampsDb/_GrampsDbBase.py: add initial cursor iter impl.
|
||||||
|
* src/GrampsDb/_CursorIterator.py: add initial cursor iter impl.
|
||||||
|
|
||||||
2007-02-04 Zsolt Foldvari <zfoldvar@users.sourceforge.net>
|
2007-02-04 Zsolt Foldvari <zfoldvar@users.sourceforge.net>
|
||||||
* src/GrampsLocale: set svn:ignore propery
|
* src/GrampsLocale: set svn:ignore propery
|
||||||
* src/BasicUtils: set svn:ignore propery
|
* src/BasicUtils: set svn:ignore propery
|
||||||
|
47
src/GrampsDb/_CursorIterator.py
Normal file
47
src/GrampsDb/_CursorIterator.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
|
||||||
|
class LongOpStatus(object):
|
||||||
|
def __init__(self):
|
||||||
|
self._cancel = False
|
||||||
|
|
||||||
|
def cancel(self):
|
||||||
|
self._cancel = True
|
||||||
|
|
||||||
|
def shouldCancel(self):
|
||||||
|
return self._cancel
|
||||||
|
|
||||||
|
class CursorIterator(object):
|
||||||
|
|
||||||
|
def __init__(self,db,cursor):
|
||||||
|
self._db = db
|
||||||
|
self._cursor = cursor
|
||||||
|
self._status = LongOpStatus()
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
try:
|
||||||
|
# Emit start signal
|
||||||
|
self._db.emit('long-op-start',(self._status,))
|
||||||
|
|
||||||
|
first = self._cursor.first()
|
||||||
|
if first:
|
||||||
|
yield first
|
||||||
|
|
||||||
|
next = self._cursor.next()
|
||||||
|
while next:
|
||||||
|
yield next
|
||||||
|
|
||||||
|
# check for cancel
|
||||||
|
#if self._status.shouldCancel():
|
||||||
|
# raise GrampsDbUserCancel
|
||||||
|
|
||||||
|
# emit heartbeat
|
||||||
|
self._db.emit('long-op-heartbeat')
|
||||||
|
next = self._cursor.next()
|
||||||
|
|
||||||
|
# emit stop signal
|
||||||
|
self._db.emit('long-op-end')
|
||||||
|
self._cursor.close()
|
||||||
|
raise StopIteration
|
||||||
|
except:
|
||||||
|
self._cursor.close()
|
||||||
|
self._db.emit('long-op-end')
|
||||||
|
raise
|
@ -52,6 +52,7 @@ log = logging.getLogger(".GrampsDb")
|
|||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
from RelLib import *
|
from RelLib import *
|
||||||
from _GrampsDBCallback import GrampsDBCallback
|
from _GrampsDBCallback import GrampsDBCallback
|
||||||
|
from _CursorIterator import CursorIterator
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -196,6 +197,9 @@ class GrampsDbBase(GrampsDBCallback):
|
|||||||
'repository-update' : (list, ),
|
'repository-update' : (list, ),
|
||||||
'repository-delete' : (list, ),
|
'repository-delete' : (list, ),
|
||||||
'repository-rebuild' : None,
|
'repository-rebuild' : None,
|
||||||
|
'long-op-start' : (object, ),
|
||||||
|
'long-op-heartbeat' : None,
|
||||||
|
'long-op-end' : None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -342,24 +346,45 @@ class GrampsDbBase(GrampsDBCallback):
|
|||||||
def get_person_cursor(self):
|
def get_person_cursor(self):
|
||||||
assert False, "Needs to be overridden in the derived class"
|
assert False, "Needs to be overridden in the derived class"
|
||||||
|
|
||||||
|
def get_person_cursor_iter(self):
|
||||||
|
return CursorIterator(self,self.get_person_cursor())
|
||||||
|
|
||||||
def get_family_cursor(self):
|
def get_family_cursor(self):
|
||||||
assert False, "Needs to be overridden in the derived class"
|
assert False, "Needs to be overridden in the derived class"
|
||||||
|
|
||||||
|
def get_family_cursor_iter(self):
|
||||||
|
return CursorIterator(self,self.get_family_cursor())
|
||||||
|
|
||||||
def get_event_cursor(self):
|
def get_event_cursor(self):
|
||||||
assert False, "Needs to be overridden in the derived class"
|
assert False, "Needs to be overridden in the derived class"
|
||||||
|
|
||||||
|
def get_event_cursor_iter(self):
|
||||||
|
return CursorIterator(self,self.get_event_cursor())
|
||||||
|
|
||||||
def get_place_cursor(self):
|
def get_place_cursor(self):
|
||||||
assert False, "Needs to be overridden in the derived class"
|
assert False, "Needs to be overridden in the derived class"
|
||||||
|
|
||||||
|
def get_place_cursor_iter(self):
|
||||||
|
return CursorIterator(self,self.get_place_cursor())
|
||||||
|
|
||||||
def get_source_cursor(self):
|
def get_source_cursor(self):
|
||||||
assert False, "Needs to be overridden in the derived class"
|
assert False, "Needs to be overridden in the derived class"
|
||||||
|
|
||||||
|
def get_source_cursor_iter(self):
|
||||||
|
return CursorIterator(self,self.get_source_cursor())
|
||||||
|
|
||||||
def get_media_cursor(self):
|
def get_media_cursor(self):
|
||||||
assert False, "Needs to be overridden in the derived class"
|
assert False, "Needs to be overridden in the derived class"
|
||||||
|
|
||||||
|
def get_media_cursor_iter(self):
|
||||||
|
return CursorIterator(self,self.get_media_cursor())
|
||||||
|
|
||||||
def get_repository_cursor(self):
|
def get_repository_cursor(self):
|
||||||
assert False, "Needs to be overridden in the derived class"
|
assert False, "Needs to be overridden in the derived class"
|
||||||
|
|
||||||
|
def get_repository_cursor_iter(self):
|
||||||
|
return CursorIterator(self,self.get_repository_cursor())
|
||||||
|
|
||||||
def open_undodb(self):
|
def open_undodb(self):
|
||||||
if not self.readonly:
|
if not self.readonly:
|
||||||
self.undolog = "%s.undo" % self.full_name
|
self.undolog = "%s.undo" % self.full_name
|
||||||
|
Loading…
x
Reference in New Issue
Block a user