From 715b14f81a99d2abf74009b9bdcdfde8da2d6057 Mon Sep 17 00:00:00 2001 From: Eric Blade Date: Fri, 11 Sep 2009 00:12:46 -0500 Subject: [PATCH] moved timeout_add that calls do_import outside of the for loop, so it's only created once per autoimport start, not once per site. fix addImportFile to ignore files that don't exist (not sure how they'd get there, but just in case), fixed exception looking for fpdb_simple.DuplicateError to look in it's actual location at Exceptions.DuplicateError --- pyfpdb/GuiAutoImport.py | 6 +++++- pyfpdb/fpdb_import.py | 9 +++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/pyfpdb/GuiAutoImport.py b/pyfpdb/GuiAutoImport.py index 77e7fbdc..9e99908b 100755 --- a/pyfpdb/GuiAutoImport.py +++ b/pyfpdb/GuiAutoImport.py @@ -34,6 +34,7 @@ import string class GuiAutoImport (threading.Thread): def __init__(self, settings, config, sql): """Constructor for GuiAutoImport""" + self.importtimer = 0 self.settings=settings self.config=config self.sql = sql @@ -196,11 +197,14 @@ class GuiAutoImport (threading.Thread): self.do_import() interval = int(self.intervalEntry.get_text()) - gobject.timeout_add(interval*1000, self.do_import) + if self.importtimer != 0: + gobject.source_remove(self.importtimer) + self.importtimer = gobject.timeout_add(interval*1000, self.do_import) else: print "auto-import aborted - global lock not available" else: # toggled off + gobject.source_remove(self.importtimer) self.settings['global_lock'].release() self.doAutoImportBool = False # do_import will return this and stop the gobject callback timer print "Stopping autoimport - global lock released." diff --git a/pyfpdb/fpdb_import.py b/pyfpdb/fpdb_import.py index 97237456..2e299c5f 100644 --- a/pyfpdb/fpdb_import.py +++ b/pyfpdb/fpdb_import.py @@ -40,6 +40,7 @@ import fpdb_db import Database import fpdb_parse_logic import Configuration +import Exceptions import logging, logging.config logging.config.fileConfig(os.path.join(sys.path[0],"logging.conf")) @@ -152,6 +153,8 @@ class Importer: #Add an individual file to filelist def addImportFile(self, filename, site = "default", filter = "passthrough"): #TODO: test it is a valid file -> put that in config!! + if filename in self.filelist or not os.path.exists(filename): + return self.filelist[filename] = [site] + [filter] if site not in self.siteIds: # Get id from Sites table in DB @@ -346,13 +349,14 @@ class Importer: #rulog.writelines("runUpdated ... ") for site in self.dirlist: self.addImportDirectory(self.dirlist[site][0], False, site, self.dirlist[site][1]) - + for file in self.filelist: if os.path.exists(file): stat_info = os.stat(file) #rulog.writelines("path exists ") if file in self.updatedsize: # we should be able to assume that if we're in size, we're in time as well if stat_info.st_size > self.updatedsize[file] or stat_info.st_mtime > self.updatedtime[file]: +# print "file",counter," updated", os.path.basename(file), stat_info.st_size, self.updatedsize[file], stat_info.st_mtime, self.updatedtime[file] self.import_file_dict(self.database, file, self.filelist[file][0], self.filelist[file][1], None) self.updatedsize[file] = stat_info.st_size self.updatedtime[file] = time() @@ -365,6 +369,7 @@ class Importer: self.updatedtime[file] = time() else: self.removeFromFileList[file] = True + self.addToDirList = filter(lambda x: self.addImportDirectory(x, True, self.addToDirList[x][0], self.addToDirList[x][1]), self.addToDirList) for file in self.removeFromFileList: @@ -546,7 +551,7 @@ class Importer: #pipe the Hands.id out to the HUD #print "sending hand to hud", handsId, "pipe =", self.caller.pipe_to_hud self.caller.pipe_to_hud.stdin.write("%s" % (handsId) + os.linesep) - except fpdb_simple.DuplicateError: + except Exceptions.DuplicateError: duplicates += 1 db.rollback() except (ValueError), fe: