comparison RestDbInterface.py @ 28:9e4f9cfd1edc

start adding field structure to xml upload
author casties
date Fri, 27 Aug 2010 19:19:38 +0200
parents a2e4ca3f1cff
children 0b9f8cca6744
comparison
equal deleted inserted replaced
27:a2e4ca3f1cff 28:9e4f9cfd1edc
226 file = REQUEST.get("create_table_file",None) 226 file = REQUEST.get("create_table_file",None)
227 if file is None: 227 if file is None:
228 RESPONSE.setStatus(400) 228 RESPONSE.setStatus(400)
229 return 229 return
230 230
231 logging.debug("put with schema=%s table=%s file=%s"%(schema,tablename,file)) 231 fields = REQUEST.get("fields",None)
232 ret = self.createTableFromXML(schema, tablename, file) 232 logging.debug("put with schema=%s table=%s file=%s fields=%s"%(schema,tablename,file,repr(fields)))
233 ret = self.createTableFromXML(schema, tablename, file, fields)
233 # return the result as JSON 234 # return the result as JSON
234 format = REQUEST.get("format","JSON") 235 format = REQUEST.get("format","JSON")
235 if format == "JSON": 236 if format == "JSON":
236 RESPONSE.setHeader("Content-Type", "application/json") 237 RESPONSE.setHeader("Content-Type", "application/json")
237 json.dump(ret, RESPONSE) 238 json.dump(ret, RESPONSE)
416 sqlString = 'create table "%s"."%s" (%s)'%(schema,table,fieldString) 417 sqlString = 'create table "%s"."%s" (%s)'%(schema,table,fieldString)
417 logging.debug("createemptytable: SQL=%s"%sqlString) 418 logging.debug("createemptytable: SQL=%s"%sqlString)
418 self.executeSQL(sqlString,hasResult=False) 419 self.executeSQL(sqlString,hasResult=False)
419 return sqlFields 420 return sqlFields
420 421
421 def createTableFromXML(self,schema,table,data): 422 def createTableFromXML(self,schema,table,data, fields=None):
422 """create or replace a table with the given XML data""" 423 """create or replace a table with the given XML data"""
423 logging.debug("createTableFromXML schema=%s table=%s data=%s"%(schema,table,data)) 424 logging.debug("createTableFromXML schema=%s table=%s data=%s fields=%s"%(schema,table,data,fields))
424 tablename = sqlName(table) 425 tablename = sqlName(table)
425 self.importExcelXML(schema,tablename, data) 426 self.importExcelXML(schema, tablename, data, fields)
426 return {"tablename": tablename} 427 return {"tablename": tablename}
427 428
428 def importExcelXML(self,schema,table,xmldata,fieldsOnly=False): 429 def importExcelXML(self,schema,table,xmldata,fields=None,fieldsOnly=False):
429 ''' 430 '''
430 Import XML file in Excel format into the table 431 Import XML file in Excel format into the table
431 @param table: name of the table the xml shall be imported into 432 @param table: name of the table the xml shall be imported into
432 @param containerTagName: XML-Tag which describes a dataset
433 @param data: data to be imported (string or filehandle)
434 @param identify: (optional) field res. tag which identifies a entry uniquely for updating purposes.
435 @param RESPONSE: (optional)
436 ''' 433 '''
437 from xml.dom.pulldom import parseString,parse 434 from xml.dom.pulldom import parseString,parse
438 435
439 namespace = "urn:schemas-microsoft-com:office:spreadsheet" 436 namespace = "urn:schemas-microsoft-com:office:spreadsheet"
440 containerTagName = "Table" 437 containerTagName = "Table"
485 if fieldsOnly: 482 if fieldsOnly:
486 # return just field names 483 # return just field names
487 return xmlFields 484 return xmlFields
488 485
489 # create table 486 # create table
490 sqlFields = self.createEmptyTable(schema, table, xmlFields) 487 if fields is None:
488 sqlFields = self.createEmptyTable(schema, table, xmlFields)
491 numFields = len(sqlFields) 489 numFields = len(sqlFields)
492 fieldString = ", ".join(['"%s"'%f['name'] for f in sqlFields]) 490 fieldString = ", ".join(['"%s"'%f['name'] for f in sqlFields])
493 valString = ", ".join(["%s" for f in sqlFields]) 491 valString = ", ".join(["%s" for f in sqlFields])
494 sqlInsert = 'insert into "%s"."%s" (%s) values (%s)'%(schema,table,fieldString,valString) 492 sqlInsert = 'insert into "%s"."%s" (%s) values (%s)'%(schema,table,fieldString,valString)
495 #logging.debug("importexcelsql: sqlInsert=%s"%sqlInsert) 493 #logging.debug("importexcelsql: sqlInsert=%s"%sqlInsert)