Changeset 6357 for TI01-discovery


Ignore:
Timestamp:
20/01/10 17:04:52 (9 years ago)
Author:
sdonegan
Message:

Updated so can handle multiple ordered elements - testIso.py updated to show all information

Location:
TI01-discovery/branches/ingestion-MEDIN/ingestAutomation-upgrade/OAIBatch
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TI01-discovery/branches/ingestion-MEDIN/ingestAutomation-upgrade/OAIBatch/ExtractISO.py

    r6312 r6357  
    6060                logging.info(" ****************** Completed rendering ISO xml into data structure! ****************** ") 
    6161                logging.info("") 
     62                 
    6263                return True 
    6364                 
     
    143144                                logging.info("Extracting xml using COMPLEX dependant method for xpath def: " + str(cnt))                         
    144145                                returnVal = self.returnDependantElementVal(thisData['baseXpath'],thisData['elValXpath'],thisData['depValXpath'],thisData['depVal'])                              
    145                                 valueList = valueList + returnVal 
     146                                valueList.append(returnVal) 
    146147                                                                 
    147148                        if 'xpath' in thisData.keys():           
    148149                                logging.info("Extracting xml using SIMPLE method for xpath def: " + str(cnt))                                            
    149                                 returnVal =  self.returnSimpleElementVal(thisData['xpath']) 
    150                                 valueList = valueList + returnVal 
     150                                returnVal =  self.returnSimpleElementVal(thisData['xpath'])                                                              
     151                                valueList.append(returnVal) 
    151152                                                                 
    152153                        #is there any ordering info required - if so, order the return list according to the ordering tuple 
     
    155156                                ordering = True                          
    156157                                orderingList = thisData 
    157                                 orderedVals = {} 
     158                                 
    158159                        else: 
    159160                                logging.info("Returning a simple list of values for xpath def: " + str (cnt)) 
    160161                                 
    161162                        cnt = cnt + 1 
    162                                                                  
    163                 if ordering:                                     
     163                         
     164                #if ordering is required, create a corresponding dictionary of ordered values                                    
     165                if ordering: 
    164166                         
    165167                        #logging.INFO("Ordering data by specified order information!") 
    166168                        logging.info("ordering information now!") 
    167                                                  
     169                         
     170                        '''FIRST need to group information together in correct order (i.e. elementtree groups all starts in one list, then all ends etc 
     171                        i.e. [[start1,start2],[end1,end2]] to [[start1,end1],[start2,end2]] 
     172                        ''' 
     173                         
    168174                        #check that number of number of elements in ordering list is not less than number of items in list to be ordered! 
    169                         if len(valueList) != len(orderingList): 
    170                                 logging.error("Ordering List length does not match length of list to be ordered! (NOTE: can only order where lengths match!)") 
    171                                 orderedVals = 'None' 
    172                                                  
    173                         #go through valueList and extract values in correct position and build dictionary 
    174                         for i in orderingList.keys(): 
    175                                  
    176                                 orderedVals[i] = valueList[orderingList[i]-1] # remember there's an offset as '0' not used in these vals 
    177                                  
    178                         #returnValList.append(returnVal) 
    179                          
    180                         return orderedVals 
     175                        #if multiple sets to be ordered, check numbers and return as dictionary 
     176                        checkCompLnth = len(valueList[0]) 
     177                        for list in valueList: 
     178                                if len(list) != checkCompLnth: 
     179                                        logging.error("Sub component lists are of unequal length - CANNOT order!!") 
     180                                        return 'None' 
     181                                 
     182                        #outer loop should be the number of elements in the sublists.. 
     183                        outer = [] 
     184                        for localPos in range(0,checkCompLnth): 
     185                                inner=[] 
     186                                #inner loop should be the number of lists corresponding to repeating subelements                         
     187                                for listPos in range(0,len(valueList)): 
     188                                         
     189                                                inner.append(valueList[listPos][localPos]) 
     190                                #append to outer loop 
     191                                outer.append(inner)                                                      
     192                         
     193                        for returnedList in outer: 
     194                                 
     195                                #create a disctionary for this round (will append it later to the return version) 
     196                                orderedValsSub = {} 
     197                                                                                 
     198                                if len(returnedList) != len(orderingList): 
     199                                        logging.error("Ordering List length does not match length of list to be ordered! (NOTE: can only order where lengths match!)") 
     200                                        returnValList.append('None') 
     201                                 
     202                                else:            
     203                                        #go through valueList and extract values in correct position and build dictionary 
     204                                        for i in orderingList.keys(): 
     205                                                 
     206                                                orderedValsSub[i] = returnedList[orderingList[i]-1] # remember there's an offset as '0' not used in these vals 
     207                                 
     208                                 
     209                                        returnValList.append(orderedValsSub) 
     210                         
     211                        return returnValList 
    181212                         
    182213                else: 
     
    235266                xpathNS = self.appendNameSpace(xpath)            
    236267                 
     268 
    237269                resElementVal = [] 
    238270                 
     
    243275                        logging.error("Could not find element for this xpath: " + xpath)                         
    244276                        return ['None'] 
    245                                  
     277                                                 
    246278                #use a text 'None' rather than a None type 
     279                 
     280                for elVal in rootEl: 
     281                        if elVal is None: 
     282                                resElementVal.append('None') 
     283                        else: 
     284                                resElementVal.append(elVal.text) 
     285                '''      
    247286                if rootEl[0].text is None:                                       
    248287                        resElementVal.append('None') 
     
    250289                        for el in rootEl:                                        
    251290                                resElementVal.append(el.text)            
    252                  
     291                ''' 
    253292                return resElementVal 
    254293                                 
  • TI01-discovery/branches/ingestion-MEDIN/ingestAutomation-upgrade/OAIBatch/testISO.py

    r6312 r6357  
    11from ExtractISO import ExtractISO 
    2 import logging,os 
     2import logging,os,pdb 
     3 
     4def accessIsoDataModel(struct,name): 
     5         
     6        for i in struct: 
     7                if type(i) is dict: 
     8                        for j in i.keys():               
     9                                print name + ": " + j + " = " + str(i[j]) 
     10                if type(i) is list: 
     11                        for j in i: 
     12                                print name + ": " + j 
     13                if len(struct) > 1: 
     14                        print "-------------------------------" 
    315 
    416logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(filename)s:%(lineno)d %(levelname)s %(message)s') 
    517 
    618#test dif2stubIso xml file - converted from dif via xquery 
    7 dif2stubIso_file = 'data/NEODC/stub_iso/neodc.nerc.ac.uk__stubISO__dataent_11658383444211836_DIF.xml' 
     19#dif2stubIso_file = 'data/NEODC/stub_iso/neodc.nerc.ac.uk__stubISO__dataent_11658383444211836_DIF_multiDate.xml' 
     20dif2stubIso_file = 'data/NEODC/stub_iso/neodc.nerc.ac.uk__stubISO__dataent_11658383444211836_DIF_multiCoord.xml' 
     21#dif2stubIso_file = 'data/NEODC/stub_iso/neodc.nerc.ac.uk__stubISO__dataent_11658383444211836_DIF.xml' 
    822 
    923isoData = ExtractISO(dif2stubIso_file,'dif2stubIso') 
     
    1832        sys.exit() 
    1933 
     34print "\nTesting for bounding dates (list of dictionaries) ..." 
     35name = "boundingDates" 
     36accessIsoDataModel(isoData.boundingDates, name) 
    2037 
     38print "\nTesting for datasetID (List)..." 
     39name = "datasetID" 
     40accessIsoDataModel(isoData.datasetID, name) 
    2141 
    22 print "\nTesting for datasetID..." 
    23 for i in isoData.datasetID: 
    24         print "keywords: " + i 
     42print "\nTesting for keywords (List)..." 
     43name = "keywords" 
     44accessIsoDataModel(isoData.keywords, name) 
    2545 
    26 print "\nTesting for keywords..." 
    27 for i in isoData.keywords: 
    28         print "datasetID: " + i 
    29          
    3046print "\nTesting for revision date (List)..." 
    31 for i in isoData.revisionDate: 
    32         print "revisionDate: " + i 
    33          
     47name = "revisionDate" 
     48accessIsoDataModel(isoData.revisionDate, name) 
     49 
    3450print "\nTesting for creation date (List) ..." 
    35 for i in isoData.createDate: 
    36         print "createDate: " + i 
     51name = "createDate" 
     52accessIsoDataModel(isoData.createDate, name) 
    3753         
    3854print "\nTesting for dataset name (List) ..." 
    39 for i in isoData.datasetName: 
    40         print "datasetName: " + i 
    41          
    42 print "\nTesting for bounding dates (dictionary) ..." 
    43 for i in isoData.boundingDates.keys(): 
    44         print "boundingDates: " + i + " = " + isoData.boundingDates[i] 
    45          
     55name = "datasetName" 
     56accessIsoDataModel(isoData.datasetName, name) 
     57                 
    4658print "\nTesting for original format (List) ..." 
    47 for i in isoData.originalFormat: 
    48         print "originalFormat: " + i     
     59name = "originalFormat" 
     60accessIsoDataModel(isoData.originalFormat, name) 
    4961         
    5062print "\nTesting for authors (List) ..." 
    51 for i in isoData.authors: 
    52         print "authors: " + i 
     63name = "authors" 
     64accessIsoDataModel(isoData.authors, name) 
    5365                 
    5466print "\nTesting for data centre name (List) ..." 
    55 for i in isoData.datacentreName: 
    56         print "datacentreName: " + i 
     67name = "datacentreName" 
     68accessIsoDataModel(isoData.datacentreName, name) 
    5769         
    5870print "\nTesting for parameters (List) ..." 
    59 for i in isoData.parameters: 
    60         print "parameters: " + i 
     71name = "parameters" 
     72accessIsoDataModel(isoData.parameters, name) 
    6173         
    62 print "\nTesting for data centre name (dictionary) ..." 
    63 for i in isoData.boundingBoxCoordinates.keys(): 
    64         print "boundingBoxCoordinates: " + i + " = " + isoData.boundingBoxCoordinates[i] 
     74print "\nTesting for data centre name (list of dictionaries) ..." 
     75name = "boundingBoxCoordinates" 
     76accessIsoDataModel(isoData.boundingBoxCoordinates, name) 
Note: See TracChangeset for help on using the changeset viewer.