take global lock while doing imports
This commit is contained in:
		
							parent
							
								
									6a69bf512e
								
							
						
					
					
						commit
						3352f608cf
					
				|  | @ -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: | ||||
|  | @ -187,8 +196,6 @@ class GuiAutoImport (threading.Thread): | |||
|             self.pipe_to_hud = None | ||||
|             self.startButton.set_label(u'  _Start Autoimport  ') | ||||
| 
 | ||||
|                  | ||||
| 
 | ||||
|     #end def GuiAutoImport.startClicked | ||||
| 
 | ||||
|     def get_vbox(self): | ||||
|  |  | |||
|  | @ -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() | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user