Ignore:
Timestamp:
12/11/10 15:10:35 (9 years ago)
Author:
sdonegan
Message:

Updates to allow proper handling of NERC DMS format and uprated dif2iso conversion

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI01-discovery-Ingest/trunk/v4.3.0/ingestAutomation-upgrade/OAIBatch/ExtractISO.py

    r7457 r7725  
    33import logging,urllib,os,sys,inspect 
    44from Utilities import IsoIngestListUtilities # so can use those useful getSingleVal and getMultipleVal methods for discerning lists etc (esp useful when using the isoVal to dbColumn methods..) 
     5import ndg.common.src.lib.utilities as ndgUtilities 
     6import random 
    57 
     8 
     9''' 
     10ExtractISO handler class designed to deal with NERC DMS series of ISO profile metadata (for NERC Revitilisation work) 
     11''' 
     12error='' 
     13message=''       
    614 
    715class ExtractISO: 
     
    127135                #get all the required information from the chosen xpath definition class 
    128136                self.datasetID = self.getElementVal(self.isoModel.datasetID()) 
     137                 
    129138                if self.datasetID == 'None': 
    130139                        self.processingMsg = 'No entry for Dataset ID so record not valid and cannot/will not Ingest!' 
    131140                        logging.error(self.processingMsg) 
     141                         
     142                        #to aid proper filename reporting must give it a quasi id as will give "None" filename! 
     143                        id = [str(random.randrange(1000,20000,3)) + '_ingestIempID'] # remember must be in that double list format! 
     144                        logging.info("Using random integer: %s for ID to complete reporting process..." %id) 
     145                        self.datasetID = [id] 
    132146                        self.validDoc = False 
    133147                 
    134148                else: 
     149                         
    135150                        #noticed some MEDIN centres allowing space characters in a unique id.. change to single underscore! (remember only 1 allowed!) 
    136                         self.datasetID[0][0] = self.datasetID[0][0].replace(" ", "_") 
     151                        self.datasetID[self.findTheListData(self.datasetID)][0] = self.datasetID[self.findTheListData(self.datasetID)][0].replace(" ", "_") 
    137152                 
    138153                 
     
    143158                        self.validDoc = False 
    144159                 
    145                 self.datasetAbstract = self.getElementVal(self.isoModel.dataSetAbstract()) 
     160                self.datasetAbstract = self.getElementVal(self.isoModel.dataSetAbstract())                       
    146161                 
    147162                self.revisionDate = self.getElementVal(self.isoModel.metadataRevisionDate()) 
     
    156171                                         
    157172                self.originalFormat = self.getElementVal(self.isoModel.originalFormat()) 
    158                  
    159                  
     173                                 
    160174                try: 
    161175                        self.dataFormats = self.getElementVal(self.isoModel.dataFormats()) 
     
    202216                 
    203217                self.keywordsList = self.listify(self.keywords) 
     218                 
    204219                 
    205220                if self.keywords == 'None': 
     
    264279                #updated for NERC API v4.3.0 
    265280                 
    266                 #resource locator 
     281                #resource locator                
    267282                try: 
    268283                        self.resourceLocator = self.getElementVal(self.isoModel.resourceLocator()) 
    269                         self.resourceLocator_text = self.lineage 
    270                         self.resourceLocator_tsvector = self.lineage 
     284                        self.resourceLocator_text = self.resourceLocator 
     285                        self.resourceLocator_tsvector = self.resourceLocator 
    271286                except: 
    272287                        self.resourceLocator = None 
     
    274289                        self.resourceLocator_tsvector = None 
    275290                         
    276                 #resourceLocator in the db is a boolean field - it either has a data resource or it doesnt 
    277                  
     291                #resourceLocator in the db is a boolean field - it either has a data resource or it doesnt               
    278292                if self.resourceLocator is None or self.resourceLocator =='': 
    279293                        self.resourceLocatorBool = False 
     
    298312                        self.inspireThemes_tsvector = self.inspireThemes_text 
    299313                 
    300                 #vertical extent (sub class of keywords)                 
    301                  
     314                #vertical extent (sub class of keywords)        OPTIONAL for NERC DMS                    
    302315                try: 
    303316                        self.verticalExtent = self.getElementVal(self.isoModel.verticalExtentKeyword())  
     
    358371                        self.dataOriginator_tsvector = None 
    359372                         
    360                          
     373                 
    361374                #check presence of originator - Mandatory! 
    362375                if self.dataOriginator == 'None' or self.dataOriginator is None: 
    363                         self.processingMsg = 'No entry for Data Originator so record not valid and cannot/will not Ingest!' 
    364                         logging.error(self.processingMsg) 
     376                        #self.processingMsg = 'No entry for Data Originator!' 
     377                        #logging.error(self.processingMsg) 
    365378                        #self.validDoc = False 
     379                        self.dataOriginator_text = 'null' 
     380                        self.dataOriginator_tsvector = 'null' 
    366381                 
    367382                else:                    
     
    509524                if boundingDatesList == 'None': 
    510525                        return 'None' 
    511                  
    512                          
    513                          
     526                                         
    514527                #remember, need to sort out whether there was a start and end date in the first place, or just one so can copy values over 
    515528                if len(boundingDatesList) == 1: 
     
    517530                        returnDates['start'] = boundingDatesList[0]['start'] 
    518531                        returnDates['end'] = boundingDatesList[0]['end'] 
    519                          
    520532                         
    521533                         
     
    563575                 
    564576                ''' 
    565                 MEDIN Profile v2.3 (date? - MEDIN upgrade dev) 
     577                ISO Profile version (date? - MEDIN upgrade dev) 
    566578                ''' 
    567579                 
    568580                logging.info("Format chosen: " + format) 
    569                  
    570                  
    571581                 
    572582                #Dynamically import module of correct profile... 
     
    10271037                 
    10281038                isoNs = {'gmd':'http://www.isotc211.org/2005/gmd','gco':'http://www.isotc211.org/2005/gco', 
    1029                                 'gmx':'http://www.isotc211.org/2005/gmx','gml':'http://www.opengis.net/gml/3.2', 
     1039                                'gmx':'http://www.isotc211.org/2005/gmx','gml':'http://www.opengis.net/gml', 
    10301040                                'none':'','gts':'http://www.isotc211.org/2005/gts','gsr':'http://www.isotc211.org/2005/gsr', 
    1031                                 'gss':'http://www.isotc211.org/2005/gss' 
     1041                                'gss':'http://www.isotc211.org/2005/gss','srv':'http://www.isotc211.org/2005/srv' 
    10321042                                } 
    10331043                 
     
    11581168                 
    11591169                return nameSpaceAppendedPath 
     1170         
     1171         
     1172        ''' 
     1173        Method to find which of the lists actually has data in it 
     1174        ''' 
     1175        def findTheListData(self,xpathExtraction): 
     1176                 
     1177                cnt = 0 
     1178                mapping = [] 
     1179                 
     1180                         
     1181                for subList in xpathExtraction: 
     1182                        subListLen = len(subList) 
     1183                        if subListLen > 0: 
     1184                                #found where the data is, return sublist                                 
     1185                                mapping.append(cnt)      
     1186                        cnt += 1                         
     1187                                                                 
     1188                #how many values are there 
     1189                if len(mapping) == 1: 
     1190                        return mapping[0] 
     1191                else: 
     1192                        logging.warn("More than 1 value available - for now, have taken the first!") 
     1193                        return mapping[0] 
     1194                 
     1195                 
     1196         
     1197         
     1198         
Note: See TracChangeset for help on using the changeset viewer.