--- ZSQLExtend/importFMPXML.py 2008/09/05 19:05:57 1.27 +++ ZSQLExtend/importFMPXML.py 2009/02/10 17:54:00 1.29 @@ -22,7 +22,7 @@ except: fm_ns = 'http://www.filemaker.com/fmpxmlresult' -version_string = "V0.6.1 ROC 2.7.2008" +version_string = "V0.6.3 ROC 10.2.2009" def unicodify(text, withNone=False): """decode str (utf-8 or latin-1 representation) into unicode object""" @@ -160,6 +160,7 @@ class xml_handler: self.replace_table = getattr(options,"replace_table",None) self.backup_table = getattr(options,"backup_table",None) self.read_before_update = getattr(options,"read_before_update",None) + self.debug_data = getattr(options,"debug_data",None) self.logger.debug("dsn: "+repr(getattr(options,"dsn",None))) self.logger.debug("table: "+repr(self.table)) @@ -172,6 +173,7 @@ class xml_handler: self.logger.debug("replace_table: "+repr(self.replace_table)) self.logger.debug("backup_table: "+repr(self.backup_table)) self.logger.debug("read_before_update: "+repr(self.read_before_update)) + self.logger.debug("debug_data: "+repr(self.debug_data)) self.dbIDs = {} self.rowcnt = 0 @@ -436,9 +438,17 @@ class xml_handler: # synchronize by id_field if self.id_field: if self.id_type == 'integer': - id_val = int(self.xml_data[self.xml_id]) + try: + id_val = int(self.xml_data[self.xml_id]) + except: + pass else: id_val = self.xml_data[self.xml_id] + + if not id_val: + # abort update + self.logger.error("ERROR: unable to sync! emtpy id in row %s"%self.rowcnt) + return if id_val in self.dbIDs: self.dbIDs[id_val] += 1 @@ -468,7 +478,8 @@ class xml_handler: # update existing row (by id_field) if self.read_before_update: # read data - self.logger.debug("update check: %s = %s"%(id_val, args)) + if self.debug_data: + self.logger.debug("update check: %s = %s"%(id_val, args)) oldrow = SimpleSearch(self.db, self.selQuery, [id_val], ascii=self.ascii_db) #i = 0 #for v in oldrow[0]: @@ -476,19 +487,22 @@ class xml_handler: # i += 1 if tuple(oldrow[0]) != tuple(args): # data has changed -- update - self.logger.debug("really update: %s = %s"%(id_val, args)) + if self.debug_data: + self.logger.debug("really update: %s = %s"%(id_val, args)) args.append(id_val) # last arg is id SimpleSearch(self.db, self.updQuery, args, ascii=self.ascii_db) else: # always update - self.logger.debug("update: %s = %s"%(id_val, args)) + if self.debug_data: + self.logger.debug("update: %s = %s"%(id_val, args)) args.append(id_val) # last arg is id SimpleSearch(self.db, self.updQuery, args, ascii=self.ascii_db) else: # create new row - self.logger.debug("insert: %s"%args) + if self.debug_data: + self.logger.debug("insert: %s"%args) SimpleSearch(self.db, self.addQuery, args, ascii=self.ascii_db) #self.logger.info(" row:"+"%d (%s)"%(self.rowcnt,id_val)) @@ -618,6 +632,9 @@ if __name__ == "__main__": opars.add_option("-d", "--debug", default=False, action="store_true", dest="debug", help="debug mode (more output)") + opars.add_option("--debug-data", default=False, action="store_true", + dest="debug_data", + help="debug mode for data (even more output)") (options, args) = opars.parse_args()