--- ZSQLExtend/importFMPXML.py 2007/04/05 14:20:08 1.10 +++ ZSQLExtend/importFMPXML.py 2007/04/18 15:09:52 1.11 @@ -450,8 +450,44 @@ class xml_handler: return - - +def importFMPXML(options): + """SAX handler to import FileMaker XML file (FMPXMLRESULT format) into the table. + @param options: dict of options + @param options.dsn: database connection string + @param options.table: name of the table the xml shall be imported into + @param options.filename: xmlfile filename + @param options.update_fields: (optional) list of fields to update; default is to create all fields + @param options.id_field: (optional) field which uniquely identifies an entry for updating purposes. + @param options.sync_mode: (optional) really synchronise, i.e. delete entries not in XML file + @param options.lc_names: (optional) lower case and clean up field names from XML + @param options.keep_fields: (optional) don't add fields to SQL database + @param options.ascii_db: (optional) assume ascii encoding in db + @param options.replace_table: (optional) delete and re-insert data + """ + + + if getattr(options,'update_fields',None): + uf = {} + for f in options.update_fields.split(','): + (n,t) = f.split(':') + uf[n] = TableColumn(n,t) + + options.update_fields = uf + + if getattr(options,'id_field',None) and getattr(options,'replace_table',None): + logging.error("ABORT: sorry, you can't do both sync (id_field) and replace") + sys.exit(1) + + parser = sax.make_parser() + #The "consumer" is our own handler + consumer = xml_handler(options) + #Initialize Tenorsax with handler + handler = saxtools.tenorsax(consumer) + #Resulting tenorsax instance is the SAX handler + parser.setContentHandler(handler) + parser.setFeature(sax.handler.feature_namespaces, 1) + parser.parse(options.filename) + if __name__ == "__main__": from optparse import OptionParser @@ -510,44 +546,8 @@ if __name__ == "__main__": format='%(asctime)s %(levelname)s %(message)s', datefmt='%H:%M:%S') + importFMPXML(options) + -def importFMPXML(options): - """SAX handler to import FileMaker XML file (FMPXMLRESULT format) into the table. - @param options: dict of options - @param options.dsn: database connection string - @param options.table: name of the table the xml shall be imported into - @param options.filename: xmlfile filename - @param options.update_fields: (optional) list of fields to update; default is to create all fields - @param options.id_field: (optional) field which uniquely identifies an entry for updating purposes. - @param options.sync_mode: (optional) really synchronise, i.e. delete entries not in XML file - @param options.lc_names: (optional) lower case and clean up field names from XML - @param options.keep_fields: (optional) don't add fields to SQL database - @param options.ascii_db: (optional) assume ascii encoding in db - @param options.replace_table: (optional) delete and re-insert data - """ - - - if getattr(options,'update_fields',None): - uf = {} - for f in options.update_fields.split(','): - (n,t) = f.split(':') - uf[n] = TableColumn(n,t) - - options.update_fields = uf - - if getattr(options,'id_field',None) and getattr(options,'replace_table',None): - logging.error("ABORT: sorry, you can't do both sync (id_field) and replace") - sys.exit(1) - - parser = sax.make_parser() - #The "consumer" is our own handler - consumer = xml_handler(options) - #Initialize Tenorsax with handler - handler = saxtools.tenorsax(consumer) - #Resulting tenorsax instance is the SAX handler - parser.setContentHandler(handler) - parser.setFeature(sax.handler.feature_namespaces, 1) - parser.parse(options.filename) -