Import: Show progress bar during bulk import

This commit is contained in:
gimick 2010-09-04 12:30:43 +01:00
parent 26eca40b31
commit 3fd2b2f838
3 changed files with 59 additions and 6 deletions

View File

@ -142,10 +142,12 @@ class GuiBulkImport():
"""returns the vbox of this thread""" """returns the vbox of this thread"""
return self.vbox return self.vbox
def __init__(self, settings, config, sql = None): def __init__(self, settings, config, parent, sql = None):
self.settings = settings self.settings = settings
self.config = config self.config = config
self.importer = fpdb_import.Importer(self, self.settings, config, sql) self.parent = parent
self.importer = fpdb_import.Importer(self, self.settings, config,parent, sql)
self.vbox = gtk.VBox(False, 0) self.vbox = gtk.VBox(False, 0)
self.vbox.show() self.vbox.show()
@ -385,7 +387,7 @@ def main(argv=None):
print _('-q is deprecated. Just use "-f filename" instead') print _('-q is deprecated. Just use "-f filename" instead')
# This is because -q on its own causes an error, so -f is necessary and sufficient for cmd line use # This is because -q on its own causes an error, so -f is necessary and sufficient for cmd line use
if not options.filename: if not options.filename:
i = GuiBulkImport(settings, config) i = GuiBulkImport(settings, config, None)
main_window = gtk.Window() main_window = gtk.Window()
main_window.connect('destroy', destroy) main_window.connect('destroy', destroy)
main_window.add(i.vbox) main_window.add(i.vbox)
@ -393,7 +395,7 @@ def main(argv=None):
gtk.main() gtk.main()
else: else:
#Do something useful #Do something useful
importer = fpdb_import.Importer(False,settings, config) importer = fpdb_import.Importer(False,settings, config, self.parent)
# importer.setDropIndexes("auto") # importer.setDropIndexes("auto")
importer.setDropIndexes(_("don't drop")) importer.setDropIndexes(_("don't drop"))
importer.setFailOnError(options.failOnError) importer.setFailOnError(options.failOnError)

View File

@ -996,7 +996,7 @@ class fpdb:
def tab_bulk_import(self, widget, data=None): def tab_bulk_import(self, widget, data=None):
"""opens a tab for bulk importing""" """opens a tab for bulk importing"""
new_import_thread = GuiBulkImport.GuiBulkImport(self.settings, self.config, self.sql) new_import_thread = GuiBulkImport.GuiBulkImport(self.settings, self.config, self.window, self.sql)
self.threads.append(new_import_thread) self.threads.append(new_import_thread)
bulk_tab=new_import_thread.get_vbox() bulk_tab=new_import_thread.get_vbox()
self.add_and_display_tab(bulk_tab, _("Bulk Import")) self.add_and_display_tab(bulk_tab, _("Bulk Import"))

View File

@ -70,12 +70,13 @@ else:
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
class Importer: class Importer:
def __init__(self, caller, settings, config, sql = None): def __init__(self, caller, settings, config, parent, sql = None):
"""Constructor""" """Constructor"""
self.settings = settings self.settings = settings
self.caller = caller self.caller = caller
self.config = config self.config = config
self.sql = sql self.sql = sql
self.parent = parent
#log = Configuration.get_logger("logging.conf", "importer", log_dir=self.config.dir_log) #log = Configuration.get_logger("logging.conf", "importer", log_dir=self.config.dir_log)
self.filelist = {} self.filelist = {}
@ -301,7 +302,16 @@ class Importer:
totpartial = 0 totpartial = 0
toterrors = 0 toterrors = 0
tottime = 0 tottime = 0
progresscount = 0
progressgoal = len(self.filelist)
ProgressDialog = ProgressBar(self.parent)
for file in self.filelist: for file in self.filelist:
progresscount += 1
ProgressDialog.progress_update(progresscount,progressgoal)
(stored, duplicates, partial, errors, ttime) = self.import_file_dict(db, file (stored, duplicates, partial, errors, ttime) = self.import_file_dict(db, file
,self.filelist[file][0], self.filelist[file][1], q) ,self.filelist[file][0], self.filelist[file][1], q)
totstored += stored totstored += stored
@ -313,6 +323,8 @@ class Importer:
print _("sending finish message queue length ="), q.qsize() print _("sending finish message queue length ="), q.qsize()
db.send_finish_msg(q) db.send_finish_msg(q)
del ProgressDialog
return (totstored, totdups, totpartial, toterrors) return (totstored, totdups, totpartial, toterrors)
# end def importFiles # end def importFiles
@ -528,5 +540,44 @@ class Importer:
logfile.write("\n") logfile.write("\n")
logfile.close() logfile.close()
class ProgressBar:
def __del__(self):
self.progress.destroy()
def progress_update(self, fraction, sum):
progresspercent = float(fraction) / (float(sum) + 1.0)
x = sometext.center(100)
self.pbar.set_fraction(progresspercent)
self.pbar.set_text(str(fraction) + " / " + str(sum))
def __init__(self, parent):
self.progress = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.progress.set_resizable(False)
self.progress.set_modal(True)
self.progress.set_transient_for(parent)
self.progress.set_decorated(False)
vbox = gtk.VBox(False, 5)
vbox.set_border_width(10)
self.progress.add(vbox)
vbox.show()
align = gtk.Alignment(0.5, 0.5, 0, 0)
vbox.pack_start(align, True, True, 2)
align.show()
self.pbar = gtk.ProgressBar()
align.add(self.pbar)
self.pbar.show()
self.progress.show()
if __name__ == "__main__": if __name__ == "__main__":
print _("CLI for fpdb_import is now available as CliFpdb.py") print _("CLI for fpdb_import is now available as CliFpdb.py")