diff --git a/pyfpdb/GuiAutoImport.py b/pyfpdb/GuiAutoImport.py index fb278f17..3095512c 100755 --- a/pyfpdb/GuiAutoImport.py +++ b/pyfpdb/GuiAutoImport.py @@ -154,31 +154,40 @@ class GuiAutoImport (threading.Thread): # results to the same pipe. This means that self.path should be a a list of dirs # to watch. if widget.get_active(): # toggled on - self.doAutoImportBool = True - widget.set_label(u' _Stop Autoimport ') - if self.pipe_to_hud is None: - if os.name == 'nt': - command = "python HUD_main.py" + " " + self.settings['cl_options'] - bs = 0 # windows is not happy with line buffing here - self.pipe_to_hud = subprocess.Popen(command, bufsize = bs, stdin = subprocess.PIPE, - universal_newlines=True) - else: - command = os.path.join(sys.path[0], 'HUD_main.py') - cl = [command, ] + string.split(self.settings['cl_options']) - self.pipe_to_hud = subprocess.Popen(cl, bufsize = 1, stdin = subprocess.PIPE, - universal_newlines=True) + # - Does the lock acquisition need to be more sophisticated for multiple dirs? + # (see comment above about what to do if pipe already open) + # - Ideally we want to release the lock if the auto-import is killed by some + # kind of exception - is this possible? + if self.settings['global_lock'].acquire(False): # returns false immediately if lock not acquired + print "\nGlobal lock taken ..." + self.doAutoImportBool = True + widget.set_label(u' _Stop Autoimport ') + if self.pipe_to_hud is None: + if os.name == 'nt': + command = "python HUD_main.py" + " " + self.settings['cl_options'] + bs = 0 # windows is not happy with line buffing here + self.pipe_to_hud = subprocess.Popen(command, bufsize = bs, stdin = subprocess.PIPE, + universal_newlines=True) + else: + command = os.path.join(sys.path[0], 'HUD_main.py') + cl = [command, ] + string.split(self.settings['cl_options']) + self.pipe_to_hud = subprocess.Popen(cl, bufsize = 1, stdin = subprocess.PIPE, + universal_newlines=True) - # Add directories to importer object. - for site in self.input_settings: - self.importer.addImportDirectory(self.input_settings[site][0], True, site, self.input_settings[site][1]) - print "Adding import directories - Site: " + site + " dir: "+ str(self.input_settings[site][0]) - self.do_import() + # Add directories to importer object. + for site in self.input_settings: + self.importer.addImportDirectory(self.input_settings[site][0], True, site, self.input_settings[site][1]) + print "Adding import directories - Site: " + site + " dir: "+ str(self.input_settings[site][0]) + self.do_import() - interval=int(self.intervalEntry.get_text()) - gobject.timeout_add(interval*1000, self.do_import) + interval=int(self.intervalEntry.get_text()) + gobject.timeout_add(interval*1000, self.do_import) + else: + print "auto-import aborted - global lock not available" else: # toggled off + self.settings['global_lock'].release() self.doAutoImportBool = False # do_import will return this and stop the gobject callback timer - print "Stopping autoimport" + print "Stopping autoimport - global lock released." if self.pipe_to_hud.poll() is not None: print "HUD already terminated" else: @@ -186,8 +195,6 @@ class GuiAutoImport (threading.Thread): self.pipe_to_hud.communicate('\n') # waits for process to terminate self.pipe_to_hud = None self.startButton.set_label(u' _Start Autoimport ') - - #end def GuiAutoImport.startClicked diff --git a/pyfpdb/GuiBulkImport.py b/pyfpdb/GuiBulkImport.py index 77dee9b7..7c08497e 100755 --- a/pyfpdb/GuiBulkImport.py +++ b/pyfpdb/GuiBulkImport.py @@ -49,37 +49,47 @@ class GuiBulkImport(): self.importer.RunImportThreaded() def load_clicked(self, widget, data=None): -# get the dir to import from the chooser - self.inputFile = self.chooser.get_filename() + # Does the lock acquisition need to be more sophisticated for multiple dirs? + # (see comment above about what to do if pipe already open) + if self.settings['global_lock'].acquire(False): # returns false immediately if lock not acquired + try: + print "\nGlobal lock taken ..." + # get the dir to import from the chooser + self.inputFile = self.chooser.get_filename() -# get the import settings from the gui and save in the importer - self.importer.setHandCount(int(self.spin_hands.get_text())) - self.importer.setMinPrint(int(self.spin_hands.get_text())) - self.importer.setQuiet(self.chk_st_st.get_active()) - self.importer.setFailOnError(self.chk_fail.get_active()) - self.importer.setThreads(int(self.spin_threads.get_text())) - self.importer.setHandsInDB(self.n_hands_in_db) - cb_model = self.cb_dropindexes.get_model() - cb_index = self.cb_dropindexes.get_active() - if cb_index: - self.importer.setDropIndexes(cb_model[cb_index][0]) + # get the import settings from the gui and save in the importer + self.importer.setHandCount(int(self.spin_hands.get_text())) + self.importer.setMinPrint(int(self.spin_hands.get_text())) + self.importer.setQuiet(self.chk_st_st.get_active()) + self.importer.setFailOnError(self.chk_fail.get_active()) + self.importer.setThreads(int(self.spin_threads.get_text())) + self.importer.setHandsInDB(self.n_hands_in_db) + cb_model = self.cb_dropindexes.get_model() + cb_index = self.cb_dropindexes.get_active() + if cb_index: + self.importer.setDropIndexes(cb_model[cb_index][0]) + else: + self.importer.setDropIndexes("auto") + sitename = self.cbfilter.get_model()[self.cbfilter.get_active()][0] + self.lab_info.set_text("Importing") + + self.importer.addBulkImportImportFileOrDir(self.inputFile, site = sitename) + self.importer.setCallHud(False) + starttime = time() + (stored, dups, partial, errs, ttime) = self.importer.runImport() + ttime = time() - starttime + if ttime == 0: + ttime = 1 + print 'GuiBulkImport.import_dir done: Stored: %d \tDuplicates: %d \tPartial: %d \tErrors: %d in %s seconds - %d/sec'\ + % (stored, dups, partial, errs, ttime, stored / ttime) + self.importer.clearFileList() + + self.lab_info.set_text("Import finished") + except: + pass + self.settings['global_lock'].release() else: - self.importer.setDropIndexes("auto") - sitename = self.cbfilter.get_model()[self.cbfilter.get_active()][0] - self.lab_info.set_text("Importing") - - self.importer.addBulkImportImportFileOrDir(self.inputFile, site = sitename) - self.importer.setCallHud(False) - starttime = time() - (stored, dups, partial, errs, ttime) = self.importer.runImport() - ttime = time() - starttime - if ttime == 0: - ttime = 1 - print 'GuiBulkImport.import_dir done: Stored: %d \tDuplicates: %d \tPartial: %d \tErrors: %d in %s seconds - %d/sec'\ - % (stored, dups, partial, errs, ttime, stored / ttime) - self.importer.clearFileList() - - self.lab_info.set_text("Import finished") + print "bulk-import aborted - global lock not available" def get_vbox(self): """returns the vbox of this thread""" @@ -88,8 +98,7 @@ class GuiBulkImport(): def __init__(self, settings, config): self.settings = settings self.config = config - self.importer = fpdb_import.Importer(self, self.settings, - config) + self.importer = fpdb_import.Importer(self, self.settings, config) self.vbox = gtk.VBox(False, 0) self.vbox.show()