diff --git a/src/plugins/gramplet/PopulateGramplet.gpr.py b/src/plugins/gramplet/PopulateGramplet.gpr.py deleted file mode 100644 index b096df8cb..000000000 --- a/src/plugins/gramplet/PopulateGramplet.gpr.py +++ /dev/null @@ -1,41 +0,0 @@ -# -# Gramps - a GTK+/GNOME based genealogy program -# -# Copyright (C) 2009 Benny Malengier -# -# 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$ - -#------------------------------------------------------------------------ -# -# Register Gramplet -# -#------------------------------------------------------------------------ -register(GRAMPLET, - id="Populate", - name=_("Populate data"), - description = _("Gramplet to populate database"), - version="2.0.0", - gramps_target_version="3.4", - status = STABLE, - fname="PopulateGramplet.py", - height=200, - gramplet = 'PopulateGramplet', - gramplet_title=_("Populate data"), - ) - - diff --git a/src/plugins/gramplet/PopulateGramplet.py b/src/plugins/gramplet/PopulateGramplet.py deleted file mode 100644 index 0168c8f93..000000000 --- a/src/plugins/gramplet/PopulateGramplet.py +++ /dev/null @@ -1,131 +0,0 @@ -# Gramps - a GTK+/GNOME based genealogy program -# -# Copyright (C) 2011 Tim G L Lyons -# -# 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$ - -""" -Gramplet that populates the database with sources and citations. -""" - -#------------------------------------------------------------------------ -# -# Python modules -# -#------------------------------------------------------------------------ -import logging -LOG = logging.getLogger(".citation") - -#------------------------------------------------------------------------ -# -# GRAMPS modules -# -#------------------------------------------------------------------------ -from gen.plug import Gramplet -from gen.ggettext import sgettext as _ -import DateHandler -from QuickReports import run_quick_report_by_name -import gen.lib -from gen.db import DbTxn - -#------------------------------------------------------------------------ -# -# Gramplet class -# -#------------------------------------------------------------------------ -class PopulateGramplet(Gramplet): - """ - Gramplet that populates the database with sources and citations. - """ - def init(self): - """ - Constructs the GUI, consisting of a message, an entry, and - a Run button. - """ - import gtk - # GUI setup: - self.set_tooltip(_("Enter a date, click Run")) - vbox = gtk.VBox() - hbox = gtk.HBox() - # label, entry - description = gtk.TextView() - description.set_wrap_mode(gtk.WRAP_WORD) - description.set_editable(False) - buffer = description.get_buffer() - buffer.set_text(_("Enter a valid number of sources and citations." - " This will create the requested number of sources," - " and for each source, will create the requested" - " number of citations.")) - label_sources = gtk.Label() - label_sources.set_text(_("Number of sources") + ":") - self.num_sources = gtk.Entry() - label_citations = gtk.Label() - label_citations.set_text(_("Number of citations") + ":") - self.num_citations = gtk.Entry() - button = gtk.Button(_("Run")) - button.connect("clicked", self.run) - ##self.filter = - hbox.pack_start(label_sources, False) - hbox.pack_start(self.num_sources, True) - hbox.pack_start(label_citations, False) - hbox.pack_start(self.num_citations, True) - vbox.pack_start(description, True) - vbox.pack_start(hbox, False) - vbox.pack_start(button, False) - self.gui.get_container_widget().remove(self.gui.textview) - self.gui.get_container_widget().add_with_viewport(vbox) - vbox.show_all() - - def post_init(self): - self.disconnect("active-changed") - - def run(self, obj): - """ - Method that is run when you click the Run button. - The date is retrieved from the entry box, parsed as a date, - and then handed to the quick report. - """ - num_sources_text = self.num_sources.get_text() - num_sources = int(num_sources_text) - num_citations_text = self.num_citations.get_text() - num_citations = int(num_citations_text) - - LOG.debug("sources %04d citations %04d" % (num_sources, - num_citations)) - - source = gen.lib.Source() - citation = gen.lib.Citation() - db = self.gui.dbstate.db - - db.disable_signals() - with DbTxn('Populate citations', db) as trans: - for i in range(num_sources): - source.gramps_id = None - source.handle = None - source.title = "Source %04d" % (i + 1) - source_handle = db.add_source(source, trans) - - for j in range(num_citations): - citation.gramps_id = None - citation.handle = None - citation.source_handle = source_handle - citation.page = "Page %04d" % (j + 1) - db.add_citation(citation, trans) - LOG.debug("sources and citations added") - db.enable_signals() - db.request_rebuild() - diff --git a/src/plugins/tool/PopulateSources.py b/src/plugins/tool/PopulateSources.py new file mode 100644 index 000000000..08ee69b37 --- /dev/null +++ b/src/plugins/tool/PopulateSources.py @@ -0,0 +1,188 @@ +# +# Gramps - a GTK+/GNOME based genealogy program +# +# Copyright (C) 2011 Tim G L Lyons +# +# 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$ + +"""Tools/Debug/Populate sources and citations""" + +#------------------------------------------------------------------------ +# +# Python modules +# +#------------------------------------------------------------------------ +import logging +LOG = logging.getLogger(".citation") + +#------------------------------------------------------------------------- +# +# gnome/gtk +# +#------------------------------------------------------------------------- +import gtk + +#------------------------------------------------------------------------- +# +# gramps modules +# +#------------------------------------------------------------------------- +from gui.utils import ProgressMeter +from gui.plug import tool +from QuestionDialog import OkDialog +import ManagedWindow +import gen.lib +from gen.db import DbTxn +from gen.ggettext import sgettext as _ + +class PopulateSources(tool.Tool, ManagedWindow.ManagedWindow): + """ + Gramplet that populates the database with sources and citations. + """ + + def __init__(self, dbstate, uistate, options_class, name, callback=None): + self.label = _('Populate sources and citations tool') + ManagedWindow.ManagedWindow.__init__(self, uistate, [], self.__class__) + self.set_window(gtk.Window(), gtk.Label(), '') + tool.Tool.__init__(self, dbstate, options_class, name) + + dialog = self.display() + response = dialog.run() + dialog.destroy() + + if response == gtk.RESPONSE_ACCEPT: + self.on_ok_clicked() + OkDialog(_('Data generated'), + _("The requested sources and citations were generated")) + + self.close() + + def display(self): + """ + Constructs the GUI, consisting of a message, and fields to enter the + required number of sources and citations + """ + + # retrieve options + num_sources = self.options.handler.options_dict['sources'] + num_citations = self.options.handler.options_dict['citations'] + + # GUI setup: + dialog = gtk.Dialog(_("Populate sources and citations tool"), + self.uistate.window, + gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT, + (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, + gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) + label = gtk.Label(_("Enter a valid number of sources and citations." + " This will create the requested number of sources," + " and for each source, will create the requested" + " number of citations.")) + label.set_line_wrap(True) + + hbox1 = gtk.HBox() + label_sources = gtk.Label(_("Number of sources") + ":") + self.sources_entry = gtk.Entry() + self.sources_entry.set_text("%d" % num_sources) + hbox1.pack_start(label_sources, False) + hbox1.pack_start(self.sources_entry, True) + + hbox2 = gtk.HBox() + label_citations = gtk.Label(_("Number of citations") + ":") + self.citations_entry = gtk.Entry() + self.citations_entry.set_text("%d" % num_citations) + hbox2.pack_start(label_citations, False) + hbox2.pack_start(self.citations_entry, True) + + vbox = gtk.VBox() + vbox.pack_start(label, True) + vbox.pack_start(hbox1, False) + vbox.pack_start(hbox2, False) + + dialog.vbox.set_spacing(10) + dialog.vbox.pack_start(vbox) + dialog.show_all() + return dialog + + def on_ok_clicked(self): + """ + Method that is run when you click the OK button. The numbers of sources + and citations are retrieved from the entry box and used to govern the + amount of data generated + """ + + num_sources_text = self.sources_entry.get_text() + num_sources = int(num_sources_text) + num_citations_text = self.citations_entry.get_text() + num_citations = int(num_citations_text) + + self.progress = ProgressMeter( + _('Generating data'), '') + self.progress.set_pass(_('Generating data'), + num_sources*num_citations) + LOG.debug("sources %04d citations %04d" % (num_sources, + num_citations)) + + source = gen.lib.Source() + citation = gen.lib.Citation() + + self.db.disable_signals() + with DbTxn('Populate sources and citations', self.db) as trans: + for i in range(num_sources): + source.gramps_id = None + source.handle = None + source.title = "Source %04d" % (i + 1) + source_handle = self.db.add_source(source, trans) + + for j in range(num_citations): + citation.gramps_id = None + citation.handle = None + citation.source_handle = source_handle + citation.page = "Page %04d" % (j + 1) + self.db.add_citation(citation, trans) + self.progress.step() + LOG.debug("sources and citations added") + self.db.enable_signals() + self.db.request_rebuild() + self.progress.close() + + self.options.handler.options_dict['sources'] = num_sources + self.options.handler.options_dict['citations'] = num_citations + # Save options + self.options.handler.save_options() + +class PopulateSourcesOptions(tool.ToolOptions): + """ + Defines options and provides handling interface. + """ + + def __init__(self, name, person_id=None): + tool.ToolOptions.__init__(self, name, person_id) + + # Options specific for this report + self.options_dict = { + 'sources' : 2, + 'citations' : 2, + } + self.options_help = { + 'sources' : ("=num", + "Number of sources to generate", + "Integer number"), + 'citations' : ("=num", + "Number of citations to generate for each source", + "Integer number") + } diff --git a/src/plugins/tool/toolsdebug.gpr.py b/src/plugins/tool/toolsdebug.gpr.py index e2ea368b0..badd20f05 100644 --- a/src/plugins/tool/toolsdebug.gpr.py +++ b/src/plugins/tool/toolsdebug.gpr.py @@ -97,3 +97,26 @@ optionclass = 'TestcaseGeneratorOptions', tool_modes = [TOOL_MODE_GUI, TOOL_MODE_CLI] ) +#------------------------------------------------------------------------ +# +# Generate Testcases for Sources and citations +# +#------------------------------------------------------------------------ + +register(TOOL, +id = 'populatesources', +name = "Populate Sources and Citations", +description = ("This tool generates sources and citations ofr each source in " + "order to populate the database for testing with significant " + "numbers of sources and citations"), +version = '1.0', +gramps_target_version = '3.4', +status = UNSTABLE, +fname = 'PopulateSources.py', +authors = ["Tim Lyons"], +authors_email = [""], +category = TOOL_DEBUG, +toolclass = 'PopulateSources', +optionclass = 'PopulateSourcesOptions', +tool_modes = [TOOL_MODE_GUI, TOOL_MODE_CLI] + )