|  | @@ -19,12 +19,10 @@ def getFileBrowser(db):
 | 
	
		
			
				|  |  |     import labkeyFileBrowser
 | 
	
		
			
				|  |  |     return labkeyFileBrowser.labkeyFileBrowser(db.net)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -def getVal(xmlRoot,aliasVal,xPath='',aliasReplace={}):
 | 
	
		
			
				|  |  | +def getVal(xmlRoot,aliasVal,xPath=''):
 | 
	
		
			
				|  |  |      q=aliasVal.split(':')
 | 
	
		
			
				|  |  |      xName=q[0]
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  | -    for x in aliasReplace:
 | 
	
		
			
				|  |  | -        xName=xName.replace(x,aliasReplace[x])
 | 
	
		
			
				|  |  |      if len(xPath)>0:
 | 
	
		
			
				|  |  |          if len(xName)>0:
 | 
	
		
			
				|  |  |              elementPath='/'.join([xPath,xName])
 | 
	
	
		
			
				|  | @@ -37,7 +35,15 @@ def getVal(xmlRoot,aliasVal,xPath='',aliasReplace={}):
 | 
	
		
			
				|  |  |          return xmlRoot.find(elementPath).get(attributeName)
 | 
	
		
			
				|  |  |      except AttributeError:
 | 
	
		
			
				|  |  |          return None
 | 
	
		
			
				|  |  | -    
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +def updateTxt(txt,replacePatterns):
 | 
	
		
			
				|  |  | +   for x in replacePatterns:
 | 
	
		
			
				|  |  | +      txt=txt.replace(x,replacePatterns[x])
 | 
	
		
			
				|  |  | +   return txt
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +def updateAliases(aliasValues,aliasReplace):
 | 
	
		
			
				|  |  | +   return {a:updateTxt(aliasValues[a],aliasReplace) for a in aliasValues}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  def parseJSON(x):
 | 
	
		
			
				|  |  |      print(f'Decoding [{x}]')
 | 
	
		
			
				|  |  |      try:
 | 
	
	
		
			
				|  | @@ -57,9 +63,13 @@ def readSetup(importXLSX,pars):
 | 
	
		
			
				|  |  |      return setupRows
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  | -        
 | 
	
		
			
				|  |  | +def getID(root):
 | 
	
		
			
				|  |  | +    return root.find('Patient/PatientID').get('val')
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +def getXMLRoot(xmlFile):
 | 
	
		
			
				|  |  | +   return lxml.etree.ElementTree(file=xmlFile).getroot()
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  | -def importXML(importXLSX,pars,xmlFile,dryRun=True):
 | 
	
		
			
				|  |  | +def importXML(importXLSX,pars,xmlRoot,dryRun=True):
 | 
	
		
			
				|  |  |      #def importData(pars,filename,getId=getId,modify=modify,convertLookup=convertLookup,dryRun=True,debug=True):
 | 
	
		
			
				|  |  |  #master routine that imports data based on pars, 
 | 
	
		
			
				|  |  |  #applies user supplied functions modify, convertLookup and get Id and 
 | 
	
	
		
			
				|  | @@ -91,28 +101,26 @@ def importXML(importXLSX,pars,xmlFile,dryRun=True):
 | 
	
		
			
				|  |  |      print(f'dateVars: {dateVars}')
 | 
	
		
			
				|  |  |      lookupMap={f:importXLSX.getLookupMap(pars,fields,f) for f in lookupVars}
 | 
	
		
			
				|  |  |      alias=importXLSX.invertMap(importXLSX.getAlias(fields))
 | 
	
		
			
				|  |  | +    alias=updateAliases(alias,aliasReplace)
 | 
	
		
			
				|  |  |      print(f'aliases: {alias}')
 | 
	
		
			
				|  |  |      row={}
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  | -    tree = lxml.etree.ElementTree(file=xmlFile)
 | 
	
		
			
				|  |  | -    print(tree.docinfo.xml_version)
 | 
	
		
			
				|  |  | -    root=tree.getroot()#Element
 | 
	
		
			
				|  |  |      #patient id can be either set in pars (takes precedence) or from xml record
 | 
	
		
			
				|  |  | -    pid=pars.get('id',root.find('Patient/PatientID').get('val'))
 | 
	
		
			
				|  |  | +    pid=pars.get('id',getID(xmlRoot))
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  |      row={'ParticipantId':pid,'SequenceNum':seqNumOffset+1}
 | 
	
		
			
				|  |  |      row.update(presetValues)
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  |      for f in fields:
 | 
	
		
			
				|  |  |          try:
 | 
	
		
			
				|  |  | -            row[f]=getVal(root,alias[f],xPath,aliasReplace)
 | 
	
		
			
				|  |  | +            row[f]=getVal(xmlRoot,alias[f],xPath)
 | 
	
		
			
				|  |  |          except KeyError:
 | 
	
		
			
				|  |  |              print(f'Alias for field {f} not found')
 | 
	
		
			
				|  |  |              continue
 | 
	
		
			
				|  |  |      print(row)
 | 
	
		
			
				|  |  |      db=importXLSX.getDB(pars)
 | 
	
		
			
				|  |  |      project=pars.get('project','DCIS/Study')
 | 
	
		
			
				|  |  | -    schema=pars.get('schema','demographics')
 | 
	
		
			
				|  |  | +    schema=pars.get('schema','study')
 | 
	
		
			
				|  |  |      query=pars.get('query','demographics')
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      selVal=['ParticipantId','SequenceNum']
 | 
	
	
		
			
				|  | @@ -156,17 +164,23 @@ def main(parameterFile):
 | 
	
		
			
				|  |  |  #needs project
 | 
	
		
			
				|  |  |     ds=db.selectRows(pars['project'],'lists','importXML',[keyFilter])
 | 
	
		
			
				|  |  |     r=ds['rows'][0]
 | 
	
		
			
				|  |  | -   filename=os.path.join(fhome,'temp','DCIS','data.xml')
 | 
	
		
			
				|  |  | +   xmlFile=os.path.join(fhome,'temp','DCIS','data.xml')
 | 
	
		
			
				|  |  |     url=db.net.connectionConfig['host']+r['_labkeyurl_fileUpload']
 | 
	
		
			
				|  |  |     fb=getFileBrowser(db)
 | 
	
		
			
				|  |  | -   fb.readFileToFile(url,filename)
 | 
	
		
			
				|  |  | +   fb.readFileToFile(url,xmlFile)
 | 
	
		
			
				|  |  | +   xmlRoot=getXMLRoot(xmlFile)
 | 
	
		
			
				|  |  |     #needs project
 | 
	
		
			
				|  |  |     setupRows=readSetup(importXLSX,pars)
 | 
	
		
			
				|  |  | -   setupRows=setupRows[0:1]
 | 
	
		
			
				|  |  | +   #setupRows=setupRows[17:18]
 | 
	
		
			
				|  |  |     for s in setupRows:
 | 
	
		
			
				|  |  |  #needs project and schema for queries 
 | 
	
		
			
				|  |  | -      importXML(importXLSX,pars|s,filename,dryRun=True)
 | 
	
		
			
				|  |  | +      importXML(importXLSX,pars|s,xmlRoot,dryRun=False)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +#make calling importXML updates
 | 
	
		
			
				|  |  | +   r['status']=1
 | 
	
		
			
				|  |  | +   r['ID']=getID(xmlRoot)
 | 
	
		
			
				|  |  | +   del r['fileUpload']
 | 
	
		
			
				|  |  | +   db.modifyRows('update',pars['project'],'lists','importXML',[r])
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  if __name__ == "__main__" :
 |