move database code into new package

svn: r5598
This commit is contained in:
Richard Taylor 2005-12-21 11:27:05 +00:00
parent d850b72fcf
commit 9eb1f99b86
28 changed files with 380 additions and 98 deletions

View File

@ -1,3 +1,31 @@
2005-12-21 Richard Taylor <rjt-gramps@thegrindstone.me.uk>
* src/GrampsDb: new package for all the db related modules
* src/GedcomInfo.py moved to src/GrampsDb/_GedcomInfo.py
* src/GrampsBSDDB.py moved to src/GrampsDb/_GrampsBSDDB.py
* src/GrampsDBCallback.py moved to src/GrampsDb/_GrampsDBCallback.py
* src/GrampsDbBase.py moved to src/GrampsDb/_GrampsDbBase.py
* src/GrampsGEDDB.py moved to src/GrampsDb/_GrampsGEDDB.py
* src/GrampsInMemDB.py moved to src/GrampsDb/_GrampsInMemDB.py
* src/GrampsXMLDB.py moved to src/GrampsDb/_GrampsXMLDB.py
* src/ReadGedcom.py moved to src/GrampsDb/_ReadGedcom.py
* src/eadGrdb.py moved to src/GrampsDb/_ReadGrdb.py
* src/ReadXML.py moved to src/GrampsDb/_ReadXML.py
* src/WriteGedcom.py moved to src/GrampsDb/_WriteGedcom.py
* src/WriteGrdb.py moved to src/GrampsDb/_WriteGrdb.py
* src/WriteXML.py moved to src/GrampsDb/_WriteXML.py
* src/GrampsDb/__init__.py: new package export file
* src/GrampsDb/_GrampsDbExceptions.py: new module for GrampDb exceptions
* src/GrampsDb/_GrampsDbFactories.py: new module for factory methods
* test/RelLib: new test directory
* test/RelLib: new test directory
* test/GrampsDbBase_Test.py moved to test/GrampsDb/GrampsDbBase_Test.py
* test/GrampsDbTestBase.py moved to test/GrampsDb/GrampsDbTestBase.py
* test/RelLib_Test.py moved to test/RelLib/RelLib_Test.py
* src/ArgHandler.py src/DbPrompter.py src/DisplayState.py
src/Exporter.py src/RepositoryRefEdit.py src/ViewManager.py
src/gramps_main.py: modified to work with new GrampsDb package
* test/RunAllTests.py: find tests in subdirectories
2005-12-21 Richard Taylor <rjt-gramps@thegrindstone.me.uk> 2005-12-21 Richard Taylor <rjt-gramps@thegrindstone.me.uk>
* src/RelLib/_SourceRef.py: added import for Note class * src/RelLib/_SourceRef.py: added import for Note class

View File

@ -41,7 +41,7 @@ from gettext import gettext as _
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
import const import const
import ReadXML import GrampsDb
import GrampsMime import GrampsMime
import DbPrompter import DbPrompter
import QuestionDialog import QuestionDialog
@ -407,18 +407,17 @@ class ArgHandler:
Any errors will cause the os._exit(1) call. Any errors will cause the os._exit(1) call.
""" """
if format == 'grdb': if format == 'grdb':
import ReadGrdb
filename = os.path.normpath(os.path.abspath(filename)) filename = os.path.normpath(os.path.abspath(filename))
try: try:
ReadGrdb.importData(self.parent.db,filename,None) GrampsDb.gramps_db_reader_factory(const.app_gramps)(self.parent.db,filename,None)
except: except:
print "Error importing %s" % filename print "Error importing %s" % filename
os._exit(1) os._exit(1)
elif format == 'gedcom': elif format == 'gedcom':
import ReadGedcom from GrampsDb import GedcomParser
filename = os.path.normpath(os.path.abspath(filename)) filename = os.path.normpath(os.path.abspath(filename))
try: try:
g = ReadGedcom.GedcomParser(self.parent.db,filename,None) g = GedcomParser(self.parent.db,filename,None)
g.parse_gedcom_file() g.parse_gedcom_file()
g.resolve_refns() g.resolve_refns()
del g del g
@ -427,7 +426,7 @@ class ArgHandler:
os._exit(1) os._exit(1)
elif format == 'gramps-xml': elif format == 'gramps-xml':
try: try:
ReadXML.importData(self.parent.db,filename,None,self.parent.cl) GrampsDb.gramps_db_reader_factory(const.app_gramps_xml)(self.parent.db,filename,None,self.parent.cl)
except: except:
print "Error importing %s" % filename print "Error importing %s" % filename
os._exit(1) os._exit(1)
@ -469,7 +468,7 @@ class ArgHandler:
dbname = os.path.join(tmpdir_path,const.xmlFile) dbname = os.path.join(tmpdir_path,const.xmlFile)
try: try:
ReadXML.importData(self.parent.db,dbname,None) GrampsDb.gramps_db_reader_factory(const.app_gramps_xml)(self.parent.db,dbname,None)
except: except:
print "Error importing %s" % filename print "Error importing %s" % filename
os._exit(1) os._exit(1)
@ -496,16 +495,14 @@ class ArgHandler:
Any errors will cause the os._exit(1) call. Any errors will cause the os._exit(1) call.
""" """
if format == 'grdb': if format == 'grdb':
import WriteGrdb
try: try:
WriteGrdb.exportData(self.parent.db,filename) GrampsDb.gramps_db_writer_factory(const.app_gramps)(self.parent.db,filename)
except: except:
print "Error exporting %s" % filename print "Error exporting %s" % filename
os._exit(1) os._exit(1)
elif format == 'gedcom': elif format == 'gedcom':
import WriteGedcom
try: try:
gw = WriteGedcom.GedcomWriter(self.parent.db,None,1,filename) gw = GrampsDb.GedcomWriter(self.parent.db,None,1,filename)
ret = gw.export_data(filename) ret = gw.export_data(filename)
except: except:
print "Error exporting %s" % filename print "Error exporting %s" % filename
@ -514,8 +511,7 @@ class ArgHandler:
filename = os.path.normpath(os.path.abspath(filename)) filename = os.path.normpath(os.path.abspath(filename))
if filename: if filename:
try: try:
import WriteXML g = GrampsDb.XmlWriter(self.parent.db,None,1,1)
g = WriteXML.XmlWriter(self.parent.db,None,1,1)
ret = g.write(filename) ret = g.write(filename)
except: except:
print "Error exporting %s" % filename print "Error exporting %s" % filename

View File

@ -50,15 +50,9 @@ import Utils
import const import const
import QuestionDialog import QuestionDialog
import PluginMgr import PluginMgr
import GrampsBSDDB import GrampsDb
import GrampsXMLDB
import GrampsGEDDB
import GrampsKeys import GrampsKeys
import RecentFiles import RecentFiles
import ReadGrdb
import WriteGrdb
import WriteXML
import WriteGedcom
import GrampsDisplay import GrampsDisplay
from bsddb import db from bsddb import db
@ -353,18 +347,16 @@ class ImportDbPrompter:
if filetype == const.app_gramps: if filetype == const.app_gramps:
choose.destroy() choose.destroy()
ReadGrdb.importData(self.parent.db,filename) GrampsDb.gramps_db_reader_factory(filetype)(self.parent.db,filename)
self.parent.import_tool_callback() self.parent.import_tool_callback()
return True return True
elif filetype == const.app_gramps_xml: elif filetype == const.app_gramps_xml:
choose.destroy() choose.destroy()
import ReadXML GrampsDb.gramps_db_reader_factory(filetype)(self.parent.db,filename,self.parent.update_bar)
ReadXML.importData(self.parent.db,filename,self.parent.update_bar)
return True return True
elif filetype == const.app_gedcom: elif filetype == const.app_gedcom:
choose.destroy() choose.destroy()
import ReadGedcom GrampsDb.gramps_db_reader_factory(filetype)(self.parent.db,filename)
ReadGedcom.importData(self.parent.db,filename)
return True return True
(the_path,the_file) = os.path.split(filename) (the_path,the_file) = os.path.split(filename)
@ -443,7 +435,7 @@ class NewNativeDbPrompter:
close(self.parent) close(self.parent)
except: except:
pass pass
self.parent.db = GrampsBSDDB.GrampsBSDDB() self.parent.db = GrampsDb.gramps_db_factory(const.app_gramps)()
self.parent.read_file(filename) self.parent.read_file(filename)
# Add the file to the recent items # Add the file to the recent items
RecentFiles.recent_files(filename,const.app_gramps) RecentFiles.recent_files(filename,const.app_gramps)
@ -530,17 +522,17 @@ class NewSaveasDbPrompter:
_('File type "%s" is unknown to GRAMPS.\n\nValid types are: GRAMPS database, GRAMPS XML, GRAMPS package, and GEDCOM.') % filetype) _('File type "%s" is unknown to GRAMPS.\n\nValid types are: GRAMPS database, GRAMPS XML, GRAMPS package, and GEDCOM.') % filetype)
return False return False
if filetype == const.app_gramps: if filetype == const.app_gramps:
WriteGrdb.exportData(self.parent.db,filename,None,None) GrampsDb.gramps_db_writer_factory(filetype)(self.parent.db,filename,None,None)
close(self.parent) close(self.parent)
self.parent.db = GrampsBSDDB.GrampsBSDDB() self.parent.db = GrampsDb.gramps_db_factory(filetype)()
elif filetype == const.app_gramps_xml: elif filetype == const.app_gramps_xml:
WriteXML.exportData(self.parent.db,filename,None,None) GrampsDb.gramps_db_writer_factory(filetype)(self.parent.db,filename,None,None)
close(self.parent) close(self.parent)
self.parent.db = GrampsXMLDB.GrampsXMLDB() self.parent.db = GrampsDb.gramps_db_factory(filetype)()
elif filetype == const.app_gedcom: elif filetype == const.app_gedcom:
WriteGedcom.exportData(self.parent.db,filename,None,None) GrampsDb.gramps_db_writer_factory(filetype)(self.parent.db,filename,None,None)
close(self.parent) close(self.parent)
self.parent.db = GrampsGEDDB.GrampsGEDDB() self.parent.db = GrampsDb.gramps_db_factory(filetype)()
self.parent.read_file(filename) self.parent.read_file(filename)
# Add the file to the recent items # Add the file to the recent items
RecentFiles.recent_files(filename,const.app_gramps) RecentFiles.recent_files(filename,const.app_gramps)
@ -575,7 +567,7 @@ def open_native(parent,filename,filetype):
success = False success = False
if filetype == const.app_gramps: if filetype == const.app_gramps:
state.db = GrampsBSDDB.GrampsBSDDB() state.db = GrampsDb.gramps_db_factory(filetype)()
msgxml = gtk.glade.XML(const.gladeFile, "load_message","gramps") msgxml = gtk.glade.XML(const.gladeFile, "load_message","gramps")
msg_top = msgxml.get_widget('load_message') msg_top = msgxml.get_widget('load_message')
msg_label = msgxml.get_widget('message') msg_label = msgxml.get_widget('message')
@ -589,10 +581,10 @@ def open_native(parent,filename,filetype):
success = self.read_file(filename,update_msg) success = self.read_file(filename,update_msg)
msg_top.destroy() msg_top.destroy()
elif filetype == const.app_gramps_xml: elif filetype == const.app_gramps_xml:
state.db = GrampsXMLDB.GrampsXMLDB() state.db = GrampsDb.gramps_db_factory(filetype)()
success = self.read_file(filename) success = self.read_file(filename)
elif filetype == const.app_gedcom: elif filetype == const.app_gedcom:
state.db = GrampsGEDDB.GrampsGEDDB() state.db = GrampsDb.gramps_db_factory(filetype)()
success = self.read_file(filename) success = self.read_file(filename)
#if success: #if success:

View File

@ -40,8 +40,7 @@ import gtk
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
import GrampsDbBase import GrampsDb
import GrampsDBCallback
import GrampsKeys import GrampsKeys
import NameDisplay import NameDisplay
@ -50,7 +49,7 @@ import NameDisplay
# History manager # History manager
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class History(GrampsDBCallback.GrampsDBCallback): class History(GrampsDb.GrampsDBCallback):
__signals__ = { __signals__ = {
'changed' : (list,), 'changed' : (list,),
@ -58,7 +57,7 @@ class History(GrampsDBCallback.GrampsDBCallback):
} }
def __init__(self): def __init__(self):
GrampsDBCallback.GrampsDBCallback.__init__(self) GrampsDb.GrampsDBCallback.__init__(self)
self.history = [] self.history = []
self.mhistory = [] self.mhistory = []
self.index = -1 self.index = -1
@ -405,7 +404,7 @@ class ManagedWindow:
# Gramps Display State class # Gramps Display State class
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class DisplayState(GrampsDBCallback.GrampsDBCallback): class DisplayState(GrampsDb.GrampsDBCallback):
__signals__ = { __signals__ = {
} }
@ -414,7 +413,7 @@ class DisplayState(GrampsDBCallback.GrampsDBCallback):
self.dbstate = dbstate self.dbstate = dbstate
self.uimanager = uimanager self.uimanager = uimanager
self.window = window self.window = window
GrampsDBCallback.GrampsDBCallback.__init__(self) GrampsDb.GrampsDBCallback.__init__(self)
self.status = status self.status = status
self.status_id = status.get_context_id('GRAMPS') self.status_id = status.get_context_id('GRAMPS')
self.phistory = History() self.phistory = History()

View File

@ -365,8 +365,7 @@ class Exporter:
In the future, filter and other options may be added. In the future, filter and other options may be added.
""" """
try: try:
import WriteGrdb GrampsDb.gramps_db_writer_factory(const.app_gramps)(database,filename,person)
WriteGrdb.exportData(database,filename,person)
return 1 return 1
except IOError, msg: except IOError, msg:
QuestionDialog.ErrorDialog( _("Could not write file: %s") % filename, QuestionDialog.ErrorDialog( _("Could not write file: %s") % filename,

View File

@ -50,7 +50,7 @@ except NameError:
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from RelLib import * from RelLib import *
from GrampsDbBase import * from _GrampsDbBase import *
_MINVERSION = 5 _MINVERSION = 5
_DBVERSION = 9 _DBVERSION = 9

View File

@ -49,7 +49,7 @@ log = sys.stderr.write
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from RelLib import * from RelLib import *
import GrampsKeys import GrampsKeys
import GrampsDBCallback from _GrampsDBCallback import GrampsDBCallback
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -144,7 +144,7 @@ class GrampsCursor:
""" """
pass pass
class GrampsDbBase(GrampsDBCallback.GrampsDBCallback): class GrampsDbBase(GrampsDBCallback):
""" """
GRAMPS database object. This object is a base class for all GRAMPS database object. This object is a base class for all
database interfaces. database interfaces.
@ -196,7 +196,7 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
be created. be created.
""" """
GrampsDBCallback.GrampsDBCallback.__init__(self) GrampsDBCallback.__init__(self)
self.readonly = False self.readonly = False
self.rand = random.Random(time.time()) self.rand = random.Random(time.time())
@ -1671,7 +1671,7 @@ class Transaction:
return self.last - self.first + 1 return self.last - self.first + 1
return 0 return 0
class DbState(GrampsDBCallback.GrampsDBCallback): class DbState(GrampsDBCallback):
__signals__ = { __signals__ = {
'database-changed' : (GrampsDbBase,), 'database-changed' : (GrampsDbBase,),
@ -1680,7 +1680,7 @@ class DbState(GrampsDBCallback.GrampsDBCallback):
} }
def __init__(self): def __init__(self):
GrampsDBCallback.GrampsDBCallback.__init__(self) GrampsDBCallback.__init__(self)
self.db = GrampsDbBase() self.db = GrampsDbBase()
self.open = False self.open = False
self.active = None self.active = None

View File

@ -0,0 +1,32 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2004-2005 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id$
"""Exceptions generated by the GrampsDb package."""
class GrampsDbException(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)

View File

@ -0,0 +1,123 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2004-2005 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id$
"""
This module contains factory methods for accessing the different
GrampsDb backends. These methods should be used obtain the correct class
for a database backend.
The app_* constants in const.py can be used to indicate which backend is
required e.g.:
# To get the class for the grdb backend
db_class = GrampsDb.gramps_db_factory(db_type = const.app_gramps)
# To get a XML writer
GrampsDb.gramps_db_writer_factory(db_type = const.app_gramps_xml)
# To get a Gedcom reader
GrampsDb.gramps_db_reader_factory(db_type = const.app_gedcom)
"""
import const
from _GrampsDbExceptions import GrampsDbException
def gramps_db_factory(db_type):
"""Factory class for obtaining a Gramps database backend.
@param db_type: the type of backend required.
@type db_type: one of the app_* constants in const.py
Raises GrampsDbException if the db_type is not recognised.
"""
if db_type == const.app_gramps:
from _GrampsBSDDB import GrampsBSDDB
cls = GrampsBSDDB
elif db_type == const.app_gramps_xml:
from _GrampsXMLDB import GrampsXMLDB
cls = GrampsXMLDB
elif db_type == const.app_gedcom:
from _GrampsGEDDB import GrampsGEDDB
cls = GrampsGEDDB
else:
raise GrampsDbException("Attempt to create unknown "
"database backend class: "
"db_type = %s" % (str(db_type),))
return cls
def gramps_db_writer_factory(db_type):
"""Factory class for obtaining a Gramps database writers.
@param db_type: the type of backend required.
@type db_type: one of the app_* constants in const.py
Raises GrampsDbException if the db_type is not recognised.
"""
if db_type == const.app_gramps:
import _WriteGrdb as WriteGrdb
md = WriteGrdb.exportData
elif db_type == const.app_gramps_xml:
import _WriteXML as WriteXML
md = WriteXML.exportData
elif db_type == const.app_gedcom:
import _WriteGedcom as WriteGedcom
md = WriteGedcom.exportData
else:
raise GrampsDbException("Attempt to create a database "
"writer for unknown format: "
"db_type = %s" % (str(db_type),))
return md
def gramps_db_reader_factory(db_type):
"""Factory class for obtaining a Gramps database writers.
@param db_type: the type of backend required.
@type db_type: one of the app_* constants in const.py
Raises GrampsDbException if the db_type is not recognised.
"""
if db_type == const.app_gramps:
import _ReadGrdb as ReadGrdb
md = ReadGrdb.importData
elif db_type == const.app_gramps_xml:
import _ReadXML as ReadXML
md = ReadXML.importData
elif db_type == const.app_gedcom:
import _ReadGedcom as ReadGedcom
md = ReadGedcom.importData
else:
raise GrampsDbException("Attempt to create a database "
"reader for unknown format: "
"db_type = %s" % (str(db_type),))
return md

View File

@ -26,10 +26,10 @@ of GEDCOM files.
""" """
from RelLib import * from RelLib import *
from GrampsInMemDB import * from _GrampsInMemDB import *
import ReadGedcom import _ReadGedcom as ReadGedcom
import WriteGedcom import _WriteGedcom as WriteGedcom
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -33,7 +33,7 @@ from bsddb import dbshelve, db
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from RelLib import * from RelLib import *
from GrampsDbBase import * from _GrampsDbBase import *
import sets import sets
class GrampsInMemCursor(GrampsCursor): class GrampsInMemCursor(GrampsCursor):

View File

@ -26,10 +26,10 @@ of GRAMPS XML format.
""" """
from RelLib import * from RelLib import *
from GrampsInMemDB import * from _GrampsInMemDB import *
import ReadXML import _ReadXML as ReadXML
import WriteXML import _WriteXML as WriteXML
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -57,7 +57,7 @@ from ansel_utf8 import ansel_to_utf8
import Utils import Utils
import GrampsMime import GrampsMime
from bsddb import db from bsddb import db
from GedcomInfo import * from _GedcomInfo import *
from QuestionDialog import ErrorDialog, WarningDialog from QuestionDialog import ErrorDialog, WarningDialog
#------------------------------------------------------------------------- #-------------------------------------------------------------------------

View File

@ -37,7 +37,7 @@ import sets
# Gramps Modules # Gramps Modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
import GrampsBSDDB from _GrampsBSDDB import GrampsBSDDB
from QuestionDialog import ErrorDialog from QuestionDialog import ErrorDialog
import Errors import Errors
@ -50,7 +50,7 @@ def importData(database, filename, callback=None,cl=0,use_trans=True):
filename = os.path.normpath(filename) filename = os.path.normpath(filename)
other_database = GrampsBSDDB.GrampsBSDDB() other_database = GrampsBSDDB()
try: try:
other_database.load(filename,callback) other_database.load(filename,callback)
except: except:

View File

@ -49,7 +49,7 @@ import RelLib
import GenericFilter import GenericFilter
import const import const
import Date import Date
import GedcomInfo import _GedcomInfo as GedcomInfo
import Errors import Errors
import ansel_utf8 import ansel_utf8
import Utils import Utils

View File

@ -35,7 +35,7 @@ from gettext import gettext as _
# Gramps Modules # Gramps Modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
import GrampsBSDDB from _GrampsBSDDB import GrampsBSDDB
from QuestionDialog import ErrorDialog from QuestionDialog import ErrorDialog
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
@ -47,7 +47,7 @@ def exportData(database, filename, person=None, callback=None, cl=False):
filename = os.path.normpath(filename) filename = os.path.normpath(filename)
new_database = GrampsBSDDB.GrampsBSDDB() new_database = GrampsBSDDB()
try: try:
new_database.load(filename,callback) new_database.load(filename,callback)
except: except:

56
src/GrampsDb/__init__.py Normal file
View File

@ -0,0 +1,56 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2004-2005 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id$
"""
This package implements the GrampsDb database. It provides a number
of different backends for different storage mechanisms.
A number of importers and exporters are provided to convert between
the different backend formats.
To obtain a class that implements the backend required you should use the
gramps_db_factory method, likewise for writers use the gramps_db_writer_factory
method and for readers use the gramps_db_reader_factory method. For information
on using these factories see the _GrampsDbFactories.py file comments.
The package also contains GrampsDBCallback which provides signal/slot type
functionality to allow objects to hook into signals that are generated from
the database objects. Read the comments in _GrampsDBCallback.py for more
information.
"""
from _GrampsDbBase import DbState
from _GrampsDbFactories import \
gramps_db_factory, \
gramps_db_writer_factory, \
gramps_db_reader_factory
from _ReadGedcom import GedcomParser
from _WriteGedcom import GedcomWriter
from _WriteXML import XmlWriter
from _GrampsDbExceptions import GrampsDbException
from _GrampsDBCallback import GrampsDBCallback

View File

@ -50,7 +50,6 @@ import RelLib
import Date import Date
import DateEdit import DateEdit
import DateHandler import DateHandler
import GrampsDBCallback
import AutoComp import AutoComp

View File

@ -51,10 +51,7 @@ import DbPrompter
import const import const
import PluginMgr import PluginMgr
import GrampsKeys import GrampsKeys
import GrampsDbBase import GrampsDb
import GrampsBSDDB
import GrampsGEDDB
import GrampsXMLDB
import GrampsCfg import GrampsCfg
import Errors import Errors
import DisplayTrace import DisplayTrace
@ -556,7 +553,7 @@ class ViewManager:
self.state.db.close() self.state.db.close()
except: except:
pass pass
self.state.change_database(GrampsBSDDB.GrampsBSDDB()) self.state.change_database(GrampsDb.gramps_db_factory(app_gramps)())
self.read_file(filename) self.read_file(filename)
self.state.db.request_rebuild() self.state.db.request_rebuild()
self.change_page(None,None) self.change_page(None,None)
@ -580,7 +577,7 @@ class ViewManager:
success = False success = False
if filetype == const.app_gramps: if filetype == const.app_gramps:
self.state.change_database(GrampsBSDDB.GrampsBSDDB()) self.state.change_database(GrampsDb.gramps_db_factory(db_type = const.app_gramps)())
msgxml = gtk.glade.XML(const.gladeFile, "load_message","gramps") msgxml = gtk.glade.XML(const.gladeFile, "load_message","gramps")
msg_top = msgxml.get_widget('load_message') msg_top = msgxml.get_widget('load_message')
msg_label = msgxml.get_widget('message') msg_label = msgxml.get_widget('message')
@ -596,12 +593,12 @@ class ViewManager:
self.change_page(None,None) self.change_page(None,None)
msg_top.destroy() msg_top.destroy()
elif filetype == const.app_gramps_xml: elif filetype == const.app_gramps_xml:
self.state.change_database(GrampsXMLDB.GrampsXMLDB()) self.state.change_database(GrampsDb.gramps_db_factory(db_type = const.app_gramps_xml)())
success = self.read_file(filename) success = self.read_file(filename)
self.state.db.request_rebuild() self.state.db.request_rebuild()
self.change_page(None,None) self.change_page(None,None)
elif filetype == const.app_gedcom: elif filetype == const.app_gedcom:
self.state.change_database(GrampsGEDDB.GrampsGEDDB()) self.state.change_database(GrampsDb.gramps_db_factory(db_type = const.app_gedcom)())
success = self.read_file(filename) success = self.read_file(filename)
self.state.db.request_rebuild() self.state.db.request_rebuild()
self.change_page(None,None) self.change_page(None,None)
@ -781,20 +778,18 @@ class ViewManager:
if filetype == const.app_gramps: if filetype == const.app_gramps:
choose.destroy() choose.destroy()
ReadGrdb.importData(self.state.db,filename) GrampsDb.gramps_db_reader_factory(filetype)(self.state.db,filename)
self.parent.import_tool_callback() self.parent.import_tool_callback()
return True return True
elif filetype == const.app_gramps_xml: elif filetype == const.app_gramps_xml:
choose.destroy() choose.destroy()
import ReadXML
self.progress.show() self.progress.show()
ReadXML.importData(self.state.db,filename,self.pulse_progressbar) GrampsDb.gramps_db_reader_factory(filetype)(self.state.db,filename,self.pulse_progressbar)
self.progress.hide() self.progress.hide()
return True return True
elif filetype == const.app_gedcom: elif filetype == const.app_gedcom:
choose.destroy() choose.destroy()
import ReadGedcom GrampsDb.gramps_db_reader_factory(filetype)(self.state.db,filename)
ReadGedcom.importData(self.state.db,filename)
return True return True
(the_path,the_file) = os.path.split(filename) (the_path,the_file) = os.path.split(filename)

View File

@ -38,8 +38,7 @@ import PersonView
import RepositoryView import RepositoryView
import GrampsDisplay import GrampsDisplay
import RelLib import RelLib
import GrampsDbBase import GrampsDb
import GrampsBSDDB
import PedView import PedView
import MapView import MapView
import FamilyView import FamilyView
@ -155,7 +154,7 @@ class Gramps:
register_stock_icons() register_stock_icons()
state = GrampsDbBase.DbState() state = GrampsDb.DbState()
vm = ViewManager.ViewManager(state) vm = ViewManager.ViewManager(state)
vm.register_view(PersonView.PersonView) vm.register_view(PersonView.PersonView)
vm.register_view(FamilyView.FamilyView) vm.register_view(FamilyView.FamilyView)

View File

@ -14,12 +14,62 @@ try:
except NameError: except NameError:
from sets import Set as set from sets import Set as set
import GrampsBSDDB import const
import RelLib import RelLib
logger = logging.getLogger('Gramps.GrampsDbBase_Test') logger = logging.getLogger('Gramps.GrampsDbBase_Test')
from GrampsDbTestBase import GrampsDbBaseTest from GrampsDbTestBase import GrampsDbBaseTest
import GrampsDb
class FactoryTest(unittest.TestCase):
"""Test the GrampsDb Factory classes."""
def test_gramps_db_factory(self):
"""test than gramps_db_factory returns the correct classes."""
cls = GrampsDb.gramps_db_factory(db_type = const.app_gramps)
assert cls.__name__ == "GrampsBSDDB", \
"Returned class is %s " % str(cls.__class__.__name__)
cls = GrampsDb.gramps_db_factory(db_type = const.app_gramps_xml)
assert cls.__name__ == "GrampsXMLDB", \
"Returned class is %s " % str(cls.__class__.__name__)
cls = GrampsDb.gramps_db_factory(db_type = const.app_gedcom)
assert cls.__name__ == "GrampsGEDDB", \
"Returned class is %s " % str(cls.__class__.__name__)
self.assertRaises(GrampsDb.GrampsDbException, GrampsDb.gramps_db_factory, "gibberish")
def test_gramps_db_writer_factory(self):
"""Test that gramps_db_writer_factory returns the correct method."""
md = GrampsDb.gramps_db_writer_factory(db_type = const.app_gramps)
assert callable(md), "Returned method is %s " % str(md)
md = GrampsDb.gramps_db_writer_factory(db_type = const.app_gramps_xml)
assert callable(md), "Returned method is %s " % str(md)
md = GrampsDb.gramps_db_writer_factory(db_type = const.app_gedcom)
assert callable(md), "Returned method is %s " % str(md)
self.assertRaises(GrampsDb.GrampsDbException, GrampsDb.gramps_db_writer_factory, "gibberish")
def test_gramps_db_reader_factory(self):
"""Test that gramps_db_reader_factory returns the correct method."""
md = GrampsDb.gramps_db_reader_factory(db_type = const.app_gramps)
assert callable(md), "Returned method is %s " % str(md)
md = GrampsDb.gramps_db_reader_factory(db_type = const.app_gramps_xml)
assert callable(md), "Returned method is %s " % str(md)
md = GrampsDb.gramps_db_reader_factory(db_type = const.app_gedcom)
assert callable(md), "Returned method is %s " % str(md)
self.assertRaises(GrampsDb.GrampsDbException, GrampsDb.gramps_db_reader_factory, "gibberish")
class ReferenceMapTest (GrampsDbBaseTest): class ReferenceMapTest (GrampsDbBaseTest):
@ -180,6 +230,7 @@ class ReferenceMapTest (GrampsDbBaseTest):
def testSuite(): def testSuite():
suite = unittest.makeSuite(ReferenceMapTest,'test') suite = unittest.makeSuite(ReferenceMapTest,'test')
suite.addTests(unittest.makeSuite(FactoryTest,'test'))
return suite return suite
def perfSuite(): def perfSuite():

View File

@ -14,7 +14,8 @@ try:
except NameError: except NameError:
from sets import Set as set from sets import Set as set
import GrampsBSDDB import GrampsDb
import const
import RelLib import RelLib
logger = logging.getLogger('Gramps.GrampsDbTestBase') logger = logging.getLogger('Gramps.GrampsDbTestBase')
@ -27,7 +28,7 @@ class GrampsDbBaseTest(unittest.TestCase):
self._tmpdir = tempfile.mkdtemp() self._tmpdir = tempfile.mkdtemp()
self._filename = os.path.join(self._tmpdir,'test.grdb') self._filename = os.path.join(self._tmpdir,'test.grdb')
self._db = GrampsBSDDB.GrampsBSDDB() self._db = GrampsDb.gramps_db_factory(const.app_gramps)()
self._db.load(self._filename, self._db.load(self._filename,
None, # callback None, # callback
"w") "w")

View File

@ -7,7 +7,6 @@ import time
import traceback import traceback
import sys import sys
sys.path.append('../src')
try: try:
set() set()
@ -19,9 +18,8 @@ import RelLib
logger = logging.getLogger('Gramps.RelLib_Test') logger = logging.getLogger('Gramps.RelLib_Test')
from GrampsDbTestBase import GrampsDbBaseTest
class PrimaryObjectTest (GrampsDbBaseTest): class PrimaryObjectTest (unittest.TestCase):
"""Test methods on the PrimaryObject class""" """Test methods on the PrimaryObject class"""

View File

@ -5,9 +5,12 @@
import logging import logging
import os import os
import sys
import unittest import unittest
from optparse import OptionParser from optparse import OptionParser
sys.path.append('../src')
def make_parser(): def make_parser():
usage = "usage: %prog [options]" usage = "usage: %prog [options]"
parser = OptionParser(usage) parser = OptionParser(usage)
@ -19,12 +22,23 @@ def make_parser():
def getTestSuites(): def getTestSuites():
# Sorry about this line, but it is the easiest way of doing it.
# It just walks the filetree from '.' downwards and returns
# a tuple per directory of (dirpatch,filelist) if the directory
# contains any test files.
test_modules = [ i for i in os.listdir('.') if i[-8:] == "_Test.py" ] paths = [(f[0],f[2]) for f in os.walk('.') \
if len ([i for i in f[2] \
if i[-8:] == "_Test.py"]) ]
for (dir,test_modules) in paths:
sys.path.append(dir)
test_suites = [] test_suites = []
perf_suites = [] perf_suites = []
for module in test_modules: for module in test_modules:
if module[-8:] != "_Test.py":
break
mod = __import__(module[:-3]) mod = __import__(module[:-3])
test_suites.append(mod.testSuite()) test_suites.append(mod.testSuite())
try: try: