diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index 02fe17d11..1e91e63a4 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,3 +1,6 @@ +2005-10-01 Alex Roitman + * src/plugins/Verify.py: Convert to new API. + 2005-09-30 Alex Roitman * src/docgen/KwordDoc.py: Remove unused latin_utf8 import. * src/plugins/FilterEditor.py: Convert to new API. diff --git a/gramps2/src/plugins/Verify.py b/gramps2/src/plugins/Verify.py index 27dd2910a..86ed336c9 100644 --- a/gramps2/src/plugins/Verify.py +++ b/gramps2/src/plugins/Verify.py @@ -48,18 +48,26 @@ from gnome import help_display import RelLib import Utils import Date - -def runTool(database,active_person,callback,parent=None): - Verify(database,active_person,parent) +import Tool #------------------------------------------------------------------------- # # Actual tool # #------------------------------------------------------------------------- -class Verify: - def __init__(self,database,active_person,parent): - self.db = database +class Verify(Tool.Tool): + + def __init__(self,db,person,options_class,name,callback=None,parent=None): + Tool.Tool.__init__(self,db,person,options_class,name) + + if parent: + self.init_gui(parent) + else: + err_text,warn_text = self.run_tool(cli=True) + self.print_results(err_text,warn_text) + + def init_gui(self,parent): + # Draw dialog and make it handle everything self.parent = parent if self.parent.child_windows.has_key(self.__class__): self.parent.child_windows[self.__class__].present(None) @@ -80,9 +88,40 @@ class Verify: self.window = self.top.get_widget('verify_settings') self.window.set_icon(self.parent.topWindow.get_icon()) Utils.set_titles(self.window, - self.top.get_widget('title'), - _('Database Verify')) + self.top.get_widget('title'), + _('Database Verify')) + self.top.get_widget("oldage").set_value( + self.options.handler.options_dict['oldage']) + self.top.get_widget("hwdif").set_value( + self.options.handler.options_dict['hwdif']) + self.top.get_widget("cspace").set_value( + self.options.handler.options_dict['cspace']) + self.top.get_widget("cbspan").set_value( + self.options.handler.options_dict['cbspan']) + self.top.get_widget("yngmar").set_value( + self.options.handler.options_dict['yngmar']) + self.top.get_widget("oldmar").set_value( + self.options.handler.options_dict['oldmar']) + self.top.get_widget("oldmom").set_value( + self.options.handler.options_dict['oldmom']) + self.top.get_widget("yngmom").set_value( + self.options.handler.options_dict['yngmom']) + self.top.get_widget("olddad").set_value( + self.options.handler.options_dict['olddad']) + self.top.get_widget("yngdad").set_value( + self.options.handler.options_dict['yngdad']) + self.top.get_widget("wedder").set_value( + self.options.handler.options_dict['wedder']) + self.top.get_widget("mxchildmom").set_value( + self.options.handler.options_dict['mxchildmom']) + self.top.get_widget("mxchilddad").set_value( + self.options.handler.options_dict['mxchilddad']) + self.top.get_widget("lngwdw").set_value( + self.options.handler.options_dict['lngwdw']) + self.top.get_widget("estimate").set_active( + self.options.handler.options_dict['estimate_age']) + self.add_itself_to_menu() self.window.show() @@ -127,38 +166,76 @@ class Verify: return year def on_apply_clicked(self,obj): + self.options.handler.options_dict['oldage'] = self.top.get_widget( + "oldage").get_value_as_int() + self.options.handler.options_dict['hwdif'] = self.top.get_widget( + "hwdif").get_value_as_int() + self.options.handler.options_dict['cspace'] = self.top.get_widget( + "cspace").get_value_as_int() + self.options.handler.options_dict['cbspan'] = self.top.get_widget( + "cbspan").get_value_as_int() + self.options.handler.options_dict['yngmar'] = self.top.get_widget( + "yngmar").get_value_as_int() + self.options.handler.options_dict['oldmar'] = self.top.get_widget( + "oldmar").get_value_as_int() + self.options.handler.options_dict['oldmom'] = self.top.get_widget( + "oldmom").get_value_as_int() + self.options.handler.options_dict['yngmom'] = self.top.get_widget( + "yngmom").get_value_as_int() + self.options.handler.options_dict['olddad'] = self.top.get_widget( + "olddad").get_value_as_int() + self.options.handler.options_dict['yngdad'] = self.top.get_widget( + "yngdad").get_value_as_int() + self.options.handler.options_dict['wedder'] = self.top.get_widget( + "wedder").get_value_as_int() + self.options.handler.options_dict['mxchildmom'] = self.top.get_widget( + "mxchildmom").get_value_as_int() + self.options.handler.options_dict['mxchilddad'] = self.top.get_widget( + "mxchilddad").get_value_as_int() + self.options.handler.options_dict['lngwdw'] = self.top.get_widget( + "lngwdw").get_value_as_int() + + self.options.handler.options_dict['estimate_age'] = \ + self.top.get_widget( + "estimate").get_active() + + err_text,warn_text = self.run_tool(cli=False) + # Save options + self.options.handler.save_options() + VerifyResults(err_text,warn_text,self.parent) + + def run_tool(self,cli=False): personList = self.db.get_person_handles(sort_handles=False) + oldage = self.options.handler.options_dict['oldage'] + hwdif = self.options.handler.options_dict['hwdif'] + cspace = self.options.handler.options_dict['cspace'] + cbspan = self.options.handler.options_dict['cbspan'] + yngmar = self.options.handler.options_dict['yngmar'] + oldmar = self.options.handler.options_dict['oldmar'] + oldmom = self.options.handler.options_dict['oldmom'] + yngmom = self.options.handler.options_dict['yngmom'] + olddad = self.options.handler.options_dict['olddad'] + yngdad = self.options.handler.options_dict['yngdad'] + wedder = self.options.handler.options_dict['wedder'] + mxchildmom = self.options.handler.options_dict['mxchildmom'] + mxchilddad = self.options.handler.options_dict['mxchilddad'] + lngwdw = self.options.handler.options_dict['lngwdw'] + estimate_age = self.options.handler.options_dict['estimate_age'] - oldage = self.top.get_widget("oldage").get_value_as_int() - hwdif = self.top.get_widget("hwdif").get_value_as_int() - cspace = self.top.get_widget("cspace").get_value_as_int() - cbspan = self.top.get_widget("cbspan").get_value_as_int() - yngmar = self.top.get_widget("yngmar").get_value_as_int() - oldmar = self.top.get_widget("oldmar").get_value_as_int() - oldmom = self.top.get_widget("oldmom").get_value_as_int() - yngmom = self.top.get_widget("yngmom").get_value_as_int() - olddad = self.top.get_widget("olddad").get_value_as_int() - yngdad = self.top.get_widget("yngdad").get_value_as_int() - wedder = self.top.get_widget("wedder").get_value_as_int() - lngwdw = self.top.get_widget("lngwdw").get_value_as_int() - mxchildmom = self.top.get_widget("mxchildmom").get_value_as_int() - mxchilddad = self.top.get_widget("mxchilddad").get_value_as_int() - lngwdw = self.top.get_widget("lngwdw").get_value_as_int() - - estimate_age = self.top.get_widget("estimate").get_active() - + # FIXME: This has to become an option as well! + # OR should be removed. What's the reason behind it? oldunm = 99 # maximum age at death for unmarried person error = cStringIO.StringIO() warn = cStringIO.StringIO() - progress = Utils.ProgressMeter(_('Verify the database'),'') - - progress.set_pass(_('Checking data'),self.db.get_number_of_people()) + if not cli: + progress = Utils.ProgressMeter(_('Verify the database'),'') + progress.set_pass(_('Checking data'), + self.db.get_number_of_people()) for person_handle in personList: - progress.step() person = self.db.get_person_from_handle(person_handle) idstr = "%s (%s)" % (person.get_primary_name().get_name(),person.get_gramps_id()) @@ -478,19 +555,28 @@ class Verify: and total_children > mxchildmom): warn.write(_("Too many children (%(num_children)d) for %(person_name)s.\n") % { 'num_children' : total_children, 'person_name' : idstr }) + if not cli: + progress.step() + + if not cli: + progress.close() - progress.close() - text = "" err_text = error.getvalue() warn_text = warn.getvalue() - if err_text.strip(): - text = _("ERRORS:\n") + err_text + "\n" - if warn_text.strip(): - text = text + _("WARNINGS:\n") + warn_text - error.close() warn.close() - VerifyResults(text,self.parent) + + return err_text.strip(),warn_text.strip() + + def print_results(self,err_text,warn_text): + if warn_text: + print "\nWARNINGS:" + print warn_text + if err_text: + print "\nERRORS:" + print err_text + if not (warn_text or err_text): + print "No warnings or errors during verification!" #------------------------------------------------------------------------- # @@ -498,9 +584,10 @@ class Verify: # #------------------------------------------------------------------------- class VerifyResults: - def __init__(self,text,parent): + def __init__(self,err_text,warn_text,parent): self.parent = parent - self.text = text + self.err_text = err_text + self.warn_text = warn_text self.win_key = self @@ -520,8 +607,10 @@ class VerifyResults: self.window = self.top.get_widget("verify_result") self.window.set_icon(self.parent.topWindow.get_icon()) - textwindow = self.top.get_widget("textwindow") - textwindow.get_buffer().set_text(self.text) + err_window = self.top.get_widget("err_window") + warn_window = self.top.get_widget("warn_window") + err_window.get_buffer().set_text(self.err_text) + warn_window.get_buffer().set_text(self.warn_text) self.add_result_to_menu() self.window.show() @@ -547,6 +636,71 @@ class VerifyResults: def present_result(self,obj): self.window.present() +#------------------------------------------------------------------------ +# +# +# +#------------------------------------------------------------------------ +class VerifyOptions(Tool.ToolOptions): + """ + Defines options and provides handling interface. + """ + + def __init__(self,name,person_id=None): + Tool.ToolOptions.__init__(self,name,person_id) + + def set_new_options(self): + # Options specific for this report + self.options_dict = { + 'oldage' : 90, + 'hwdif' : 30, + 'cspace' : 8, + 'cbspan' : 25, + 'yngmar' : 17, + 'oldmar' : 50, + 'oldmom' : 48, + 'yngmom' : 17, + 'yngdad' : 18, + 'olddad' : 65, + 'wedder' : 3, + 'mxchildmom' : 12, + 'mxchilddad' : 15, + 'lngwdw' : 30, + 'estimate_age' : 0, + } + self.options_help = { + 'oldage' : ("=num","Maximum age","Age in years"), + 'hwdif' : ("=num","Maximum husband-wife age difference", + "Age difference in years"), + 'cspace' : ("=num", + "Maximum number of years between children", + "Number of years"), + 'cbspan' : ("=num", + "Maximum span of years for all children", + "Span in years"), + 'yngmar' : ("=num","Minimum age to marry","Age in years"), + 'oldmar' : ("=num","Maximum age to marry","Age in years"), + 'oldmom' : ("=num","Maximum age to bear a child", + "Age in years"), + 'yngmom' : ("=num","Minimum age to bear a child", + "Age in years"), + 'yngdad' : ("=num","Minimum age to father a child", + "Age in years"), + 'olddad' : ("=num","Maximum age to father a child", + "Age in years"), + 'wedder' : ("=num","Maximum number of spouses for a person", + "Number of spouses"), + 'mxchildmom' : ("=num","Maximum number of children for a woman", + "Number of children"), + 'mxchilddad' : ("=num","Maximum number of children for a man", + "Number of chidlren"), + 'lngwdw' : ("=num","Maximum number of consecutive years " + "of widowhood","Number of years"), + 'estimate_age' : ("=0/1","Whether to estimate missing dates", + ["Do not estimate","Estimate dates"], + True), + } + #------------------------------------------------------------------------- # # @@ -555,8 +709,14 @@ class VerifyResults: from PluginMgr import register_tool register_tool( - runTool, - _("Verify the database"), - category=_("Utilities"), - description=_("Lists exceptions to assertions or checks about the database") + name = 'verify', + category = Tool.TOOL_UTILS, + tool_class = Verify, + options_class = VerifyOptions, + modes = Tool.MODE_GUI | Tool.MODE_CLI, + translated_name = _("Verify the database"), + author_name = "Donald N. Allingham", + author_email = "dallingham@users.sourceforge.net", + description = _("Lists exceptions to assertions or checks " + "about the database") )