Changeset 7889


Ignore:
Timestamp:
17/02/11 10:17:57 (9 years ago)
Author:
sdonegan
Message:

Several updates to improve file handling and extra xpath for BODC records in DMS

Location:
TI01-discovery-Ingest/trunk/v4.3.0/ingestAutomation-upgrade/OAIBatch
Files:
5 edited

Legend:

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

    r7869 r7889  
    11 
    22from xml.etree import ElementTree as ET 
    3 import logging,urllib,os,sys,inspect 
     3import logging,urllib,os,sys,inspect,string 
    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..) 
    55import ndg.common.src.lib.utilities as ndgUtilities 
     
    163163                self.revisionDate = self.getElementVal(self.isoModel.metadataRevisionDate()) 
    164164                 
     165                #BODC using timestamp, so must isolate whatever value is available               
     166                self.singleRevisionDate = self.revisionDate[self.findTheListData(self.revisionDate)][0] 
     167                 
    165168                self.createDate = self.getElementVal(self.isoModel.metadataCreationDate()) 
    166169                                 
    167170                self.datasetName = self.getElementVal(self.isoModel.dataSetName()) 
    168171                                 
     172                 
    169173                self.boundingDates = self.getElementVal(self.isoModel.boundingDates()) 
    170174                 
    171175                self.boundingDatesRange = self.boundingDateRange(self.boundingDates) 
     176                 
     177                 
    172178                                         
    173179                self.originalFormat = self.getElementVal(self.isoModel.originalFormat()) 
     
    227233                        self.parameters_text = self.parametersOb.getDelimitedStringFromList(self.parametersOb.listVals) 
    228234                        self.parameters_tsvector = self.parameters_text 
    229                  
    230235                 
    231236                 
     
    353358                        self.lineage_text = None 
    354359                        self.lineage_tsvector = None 
    355                  
     360                ''' 
    356361                try: 
    357362                        self.publicAccessLimitations = self.getElementVal(self.isoModel.publicAccessLimitations()) 
    358363                        self.publicAccessLimitations_text = self.publicAccessLimitations 
    359364                        self.publicAccessLimitations_tsvector = self.publicAccessLimitations 
     365                        self.publicAccessLimitationsList = self.listify(self.publicAccessLimitations_text) 
    360366                except: 
    361367                        self.publicAccessLimitations = None 
    362368                        self.publicAccessLimitations_text = None 
    363369                        self.publicAccessLimitations_tsvector = None 
    364                  
    365                  
     370                        self.publicAccessLimitationsList = None 
     371                '''      
     372                 
     373                try:     
     374                        self.publicAccessLimitations= self.getElementVal(self.isoModel.publicAccessLimitations())        
     375                        self.publicAccessLimitationsList = self.listify(self.publicAccessLimitations) 
     376                except: 
     377                        self.publicAccessLimitations = None 
     378                 
     379                if self.publicAccessLimitations == 'None' or self.publicAccessLimitations is None: 
     380                        logging.warn("No Public access limitation info for record!") 
     381                        self.publicAccessLimitations_text = ''  
     382                        self.publicAccessLimitations_tsvector = '' 
     383                else:            
     384                        self.publicAccessLimitationsOb = IsoIngestListUtilities(self.publicAccessLimitations,True)                        
     385                        self.publicAccessLimitations_text = self.publicAccessLimitationsOb.getDelimitedStringFromList(self.publicAccessLimitationsOb.listVals) 
     386                        self.publicAccessLimitations_tsvector = self.inspireThemes_text          
     387                                 
    366388                try: 
    367389                        self.dataOriginator= self.getElementVal(self.isoModel.dataOriginator()) 
     
    431453         
    432454        ''' 
    433         Method to check date formats to ensure correct insertion into database - if doesnt match minimum YYYY-MM-DD format then is false,  
    434         so date should be set to None in calling method.  Will adjust self.processingMsg too for return info 
    435         ''' 
    436         def checkDate(self,inputDate): 
     455        Method to pad out a date required for proper updating postgres timestamps if only have a stump of a date (i.e. YYYY or YYYY-MM) 
     456         
     457        NOTE: only pads out dates if it needs to! (checkDate checks the values!) - use checkDate for validation- if bad date just returns input but with warning 
     458         
     459        Uses template YYYY-MM-DDTHH:MM:SS if anything other then pad to minimum YYYY-MM-DD 
     460         
     461        ''' 
     462        def padDate(self,inputDate,rangeStart=None): 
    437463                 
    438464                if inputDate is None: 
    439                         return False 
    440                  
    441                  
     465                        #just pass it on through 
     466                        return None 
     467                                 
     468                if rangeStart is None: 
     469                        padMax = True 
     470                else: 
     471                        padMax = rangeStart 
     472                         
     473                inputDate=inputDate.strip() 
     474                                         
    442475                dateStrArr = inputDate.split('-') 
    443                  
     476                                 
    444477                #check if long date string or short - if long, will have a T in! (should do..) 
    445478                #just stick with date values now.. 
     
    447480                        logging.info("*********************************** LONG VALUE DATE STRING ALERT!") 
    448481                        dateStrArr = dateStrArr[:3] 
    449                                  
     482                        timeStrArr = dateStrArr[4:] 
     483                                                         
    450484                if len(dateStrArr)< 3: 
    451                         msg = "Invalid date format (%s) - insufficient length!\n" %inputDate 
    452                         logging.warn(msg) 
    453                         self.processingMsg = self.processingMsg + msg 
    454                         return False 
    455                  
     485                         
     486                        #acceptible to have YYYY, or YYYY-MM as well now... 
     487                        if len(dateStrArr)==0: 
     488                                logging.warn("Invalid Date! (%s)" %inputdate) 
     489                                return inputDate 
     490                         
     491                        elif len(dateStrArr) == 1: 
     492                                logging.info("looks like just a year supplied..") 
     493                                yearStr = dateStrArr[0] 
     494                                 
     495                                if len(yearStr) != 4: 
     496                                        logging.warn("Invalid Date! (%s)" %inputDate) 
     497                                        return inputDate 
     498                                #temp fudge 
     499                                logging.info("No Month or day data- pad for postgres!") 
     500                                 
     501                                #pad values as appropriate 
     502                                if padMax:                               
     503                                        monthStr = "01" 
     504                                        dayStr = "01" 
     505                                else: 
     506                                        monthStr = "12" 
     507                                        dayStr = "31" 
     508                                         
     509                                outputDate = "%s-%s-%s" %(yearStr,monthStr,dayStr) 
     510                                logging.info("Have padded input of %s to %s" %(inputDate,outputDate)) 
     511                                 
     512                                return outputDate 
     513                                 
     514                        elif len(dateStrArr)==2: 
     515                                msg = "checking what could be a year:%s month:%s" %(dateStrArr[0],dateStrArr[1]) 
     516                                yearStr = dateStrArr[0] 
     517                                monthStr = dateStrArr[1] 
     518                                 
     519                                if len(yearStr) != 4: 
     520                                        logging.warn("Bad year value...(%s)" %yearStr) 
     521                                        return False 
     522                                 
     523                                #pad values as appropriate 
     524                                if padMax:       
     525                                        dayStr = "01" 
     526                                else: 
     527                                        if monthStr in ['01','03','05','07','08','10','12']: 
     528                                                dayStr = "31" 
     529                                        elif monthStr in ['04','06','09','11']: 
     530                                                dayStr = "30" 
     531                                        else: 
     532                                                dayStr = '28' 
     533                                                 
     534                                outputDate = "%s-%s-%s" %(yearStr,monthStr,dayStr) 
     535                                logging.info("Have padded input of %s to %s" %(inputDate,outputDate)) 
     536                                 
     537                                return outputDate 
     538                                 
    456539                else: 
    457                         yearStr = dateStrArr[0] 
    458                         monthStr = dateStrArr[1] 
    459                         dayStr = dateStrArr[2] 
    460                                  
    461                 #check days, months etc - Years can be anything... just do simple test for now 
     540                        logging.info("No padding required (%s)" %inputDate) 
     541                        return inputDate 
     542                         
     543         
     544        ''' 
     545        Method to check date values to ensure correct insertion into database - if doesnt match minimum YYYY-MM-DD format then is false,  
     546        so date should be set to None in calling method.  Will adjust self.processingMsg too for return info 
     547         
     548        NOTE: update to just check values - padDate method must be called first to ensure date format is minimum of YYYY-MM-DD 
     549         
     550        ''' 
     551        def checkDate(self,inputDate): 
     552                 
     553                #rangeStartOrEnd - to aid in padding out dates - will choose minimum pad values if true, maximum if false 
     554                #returnValue - if had to pad values, and want a changed value back thgis must be true            
     555                 
     556                #strip any leading or trailing spaces 
     557                inputDate = inputDate.strip() 
     558                 
     559                if 'T' in inputDate: 
     560                        if len(inputDate.split('T'))==2: 
     561                                dateStrArr = inputDate.split('T')[0] 
     562                                timeStrArr = inputDate.split('T')[0] 
     563                                 
     564                                dateStrArr = dateStrArr.split('-') 
     565                                if len(dateStrArr)!=3: 
     566                                        msg = "Invalid input format date (%s)" %inputDate 
     567                                        return False 
     568                         
     569                                else:                                    
     570                                        yearStr = dateStrArr[0] 
     571                                        monthStr = dateStrArr[1] 
     572                                        dayStr = dateStrArr[2] 
     573                                 
     574                        else: 
     575                                #still need to do some basic date structure checking as padDate only fills out where it can, if still bad 
     576                                #this method should ultimately say whether good or bad date 
     577                                msg = "Invalid input format date (%s)" %inputDate 
     578                                return False 
     579                 
     580                elif ' ' in inputDate: 
     581                        if len(inputDate.split(' '))==2: 
     582                                dateStrArr = inputDate.split(' ')[0] 
     583                                timeStrArr = inputDate.split(' ')[0] 
     584                                 
     585                                dateStrArr = dateStrArr.split('-') 
     586                                if len(dateStrArr)!=3: 
     587                                        msg = "Invalid input format date (%s)" %inputDate 
     588                                        return False 
     589                         
     590                                else:                                    
     591                                        yearStr = dateStrArr[0] 
     592                                        monthStr = dateStrArr[1] 
     593                                        dayStr = dateStrArr[2] 
     594                                 
     595                        else: 
     596                                #still need to do some basic date structure checking as padDate only fills out where it can, if still bad 
     597                                #this method should ultimately say whether good or bad date 
     598                                msg = "Invalid input format date (%s)" %inputDate 
     599                                return False 
     600         
     601                else: 
     602                        #should now have YYYY-MM-DD if padDate used properly 
     603                        dateStrArr = inputDate.split('-') 
     604                         
     605                        if len(dateStrArr)!=3: 
     606                                        msg = "Invalid input format date (%s)" %inputDate 
     607                                        return False 
     608                         
     609                        else:                                    
     610                                yearStr = dateStrArr[0] 
     611                                monthStr = dateStrArr[1] 
     612                                dayStr = dateStrArr[2] 
     613                 
     614                #check days, months etc - Years can be anything... just do simple test for now           
    462615                if int(monthStr) > 12 or int(monthStr) < 1: 
    463616                        msg = "Invalid Month value (%s) \n" %monthStr 
     
    531684                        returnDates['start'] = boundingDatesList[0]['start'] 
    532685                        returnDates['end'] = boundingDatesList[0]['end'] 
    533                          
    534                          
    535                          
    536                         #check date validity 
    537                         for date in returnDates.keys():                                  
    538                                 if not self.checkDate(returnDates[date]): 
    539                                         returnDates[date] = 'None' 
    540                          
    541                         #convert None to 'None' 
     686                                                 
     687                        #check date validity & convert None to 'None' as necessary 
    542688                        for date in returnDates.keys(): 
    543                                 if returnDates[date] is None: 
    544                                         returnDates[date] = 'None' 
    545                                  
     689                                if date=='start':                        
     690                                        if returnDates[date] is not None: 
     691                                                 
     692                                                #pad if possible.. 
     693                                                returnDates[date] = self.padDate(returnDates[date],rangeStart=True) 
     694                                                                                                                         
     695                                                if not self.checkDate(returnDates[date]): 
     696                                                        returnDates[date] = 'None' 
     697                                        else: 
     698                                                returnDates[date] = 'None' 
     699                                                         
     700                                elif date=='end': 
     701                                         
     702                                        if returnDates[date] is not None: 
     703                                                 
     704                                                #pad if possible.. 
     705                                                returnDates[date] = self.padDate(returnDates[date],rangeStart=False) 
     706                                                                                                                         
     707                                                if not self.checkDate(returnDates[date]): 
     708                                                        returnDates[date] = 'None' 
     709                                        else: 
     710                                                returnDates[date] = 'None' 
     711                                                                                 
    546712                        return returnDates 
    547713                 
     
    9311097                        #if there's a value for the actual xpath we want, go and get the dependant value 
    9321098                        if thisEl != 'None': 
    933                                          
    934                                 elVal = thisEl[0].text #NOTE take first one as we expect this to be the value we want 
    935                                  
    936                                 #catch any nones here.. 
    937                                 #if elVal is None: 
    938                                 #       import pdb 
    939                                 #       pdb.set_trace() 
    940                                 #       return 'None' 
     1099                                 
     1100                                #update to handle multiple values dependant on a single element value.. (based on bodc having multiple keywords in a single MD_keywords for Inspire themes                                       
     1101                                #elVal = thisEl[0].text #NOTE take first one as we expect this to be the value we want 
    9411102                                                                         
    942                                 thisEldepXpth = self.appendNameSpace(depXpath)                                   
    943                                 thisDepEl = self.doFindall(el,thisEldepXpth)                                                             
    944                                  
    945                                 if thisDepEl != 'None': 
    946                                          
    947                                                                                  
    948                                         depVal = thisDepEl[0].text 
     1103                                for elValIt in thisEl: 
     1104                                         
     1105                                        elVal = elValIt.text 
     1106                                 
     1107                                        thisEldepXpth = self.appendNameSpace(depXpath)                                   
     1108                                        thisDepEl = self.doFindall(el,thisEldepXpth)                                                             
     1109                                 
     1110                                        if thisDepEl != 'None': 
     1111                                                                                                                         
     1112                                                depVal = thisDepEl[0].text # still need a single dependant value 
    9491113                                                                         
    950                                         if depVal == depValReqd: 
    951                                                  
    952                                                 if showValue is True: 
    953                                                         logging.info("") 
    954                                                         logging.info("          Element Value: " + elVal) 
    955                                                         logging.info("") 
    956                                                  
    957                                                 resDependantVal.append(elVal) 
     1114                                                if depVal == depValReqd: 
     1115                                                 
     1116                                                        if showValue is True: 
     1117                                                                logging.info("") 
     1118                                                                logging.info("          Element Value: " + elVal) 
     1119                                                                logging.info("") 
     1120                                                                                                                 
     1121                                                        resDependantVal.append(elVal) 
    9581122                                                 
    9591123                                                                                                                                                 
     
    10421206        def isoNameSpaces(self): 
    10431207                 
    1044                 isoNs = {'gmd':'http://www.isotc211.org/2005/gmd','gco':'http://www.isotc211.org/2005/gco', 
    1045                                 'gmx':'http://www.isotc211.org/2005/gmx','gml':'http://www.opengis.net/gml', 
    1046                                 'none':'','gts':'http://www.isotc211.org/2005/gts','gsr':'http://www.isotc211.org/2005/gsr', 
    1047                                 'gss':'http://www.isotc211.org/2005/gss','srv':'http://www.isotc211.org/2005/srv' 
     1208                isoNs = {'gmd':'http://www.isotc211.org/2005/gmd', 
     1209                                'gco':'http://www.isotc211.org/2005/gco', 
     1210                                'gmx':'http://www.isotc211.org/2005/gmx', 
     1211                                'gml':'http://www.opengis.net/gml/3.2', 
     1212                                'none':'','gts':'http://www.isotc211.org/2005/gts', 
     1213                                'gsr':'http://www.isotc211.org/2005/gsr', 
     1214                                'gss':'http://www.isotc211.org/2005/gss', 
     1215                                'srv':'http://www.isotc211.org/2005/srv' 
    10481216                                } 
    10491217                 
  • TI01-discovery-Ingest/trunk/v4.3.0/ingestAutomation-upgrade/OAIBatch/NERC_DMS_0_7.py

    r7725 r7889  
    206206                ''' 
    207207                 
    208                 lineage = (self.lineage.__name__,{1:{'xpath':'gmd:distributionInfo/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:lineage/gmd:LI_Lineage/gmd:statement/gco:CharacterString'}}) 
     208                lineage = (self.lineage.__name__,{1:{'xpath':'gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:lineage/gmd:LI_Lineage/gmd:statement/gco:CharacterString'}}) 
    209209                 
    210210                return lineage 
     
    218218                ''' 
    219219                 
    220                 publicAccess = (self.publicAccessLimitations.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints/gmd:accessConstraints/gmd:MD_RestrictionCode'}}) 
     220                publicAccess = (self.publicAccessLimitations.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints/gmd:accessConstraints/gmd:MD_RestrictionCode'}}, 
     221                                                                                                                          {2:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints/gmd:useLimitation/gco:CharacterString'}}) 
    221222                 
    222223                return publicAccess 
     
    276277                                                                                                        'elValXpath':'gmd:keyword/gco:CharacterString', 
    277278                                                                                                        'depValXpath':'gmd:thesaurusName/gmd:CI_Citation/gmd:title/gco:CharacterString', 
    278                                                                                                         'depVal':'GEMET - INSPIRE themes, version 1.0'}}) 
     279                                                                                                        'depVal':'GEMET - INSPIRE themes, version 1.0'}}, 
     280                                                                                          {2:{'baseXpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:descriptiveKeywords/gmd:MD_Keywords', 
     281                                                                                                        'elValXpath':'gmd:keyword/gco:CharacterString', 
     282                                                                                                        'depValXpath':'gmd:thesaurusName/gmd:CI_Citation/gmd:title/gco:CharacterString', 
     283                                                                                                        'depVal':'INSPIRE themes'}} 
     284                                                                                                        ) 
    279285                 
    280286                return themes 
     
    308314                                                                                                        'elValXpath':'gmd:code/gco:CharacterString', 
    309315                                                                                                        'depValXpath':'gmd:authority/gmd:CI_Citation/gmd:title/gco:CharacterString', 
    310                                                                                                         'depVal':'SeaDataNet vertical extent keywords'}}) 
     316                                                                                                        'depVal':'SeaDataNet vertical extent keywords'}}, 
     317                                                                                                         
     318                                                                                                        {2:{'baseXpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:descriptiveKeywords/gmd:MD_Keywords', 
     319                                                                                                        'elValXpath':'gmd:keyword/gco:CharacterString', 
     320                                                                                                        'depValXpath':'gmd:thesaurusName/gmd:CI_Citation/gmd:title/gco:CharacterString', 
     321                                                                                                        'depVal':'Vertical Coverages'}} 
     322                                                                                                        ) 
    311323                 
    312324                 
     
    392404                 
    393405                #for medin - revisionDate is same as updateDate 
    394                 revisionDate = (self.metadataRevisionDate.__name__,{1:{'xpath':'gmd:dateStamp/gco:Date'}}) 
     406                revisionDate = (self.metadataRevisionDate.__name__,{1:{'xpath':'gmd:dateStamp/gco:Date'}}, 
     407                                                                                                                        {2:{'xpath':'gmd:dateStamp/gco:DateTime'}}) 
    395408                 
    396409                return revisionDate 
  • TI01-discovery-Ingest/trunk/v4.3.0/ingestAutomation-upgrade/OAIBatch/PostgresDAO.py

    r7725 r7889  
    44C Byrom Apr 08 
    55''' 
    6 import sys, os, logging, datetime 
     6import sys, os, logging, datetime, re 
    77#from SpatioTemporalData import * 
    88from ndg.common.src.clients.reldb.postgres.postgresclient import PostgresClient as pgc 
     
    144144        # firstly store the actual documents contained by the record - i.e. the original doc + 
    145145        # the various transforms required 
     146         
    146147        self._insertOriginalRecord() 
    147148        self._insertMetadataRecords() 
     
    510511                     
    511512        ''' 
    512         
     513         
     514        #Get rid of any xml comment characters - causing problems 
     515        originalXMLdoc = re.sub("<!--.*-->","",self._record.originalFormat) 
     516         
     517         
    513518        sqlCmd = "SELECT create_document('" + self._record.shortFilename + "', '" + \ 
    514519            self._record.discovery_id + "', '" + self.dpwsID + "', '" + self._record.docType + "', '" + \ 
    515             self._record.originalFormat + "', '" + self._record.getAuthorsInfo() + "', '" + \ 
     520            originalXMLdoc + "', '" + self._record.getAuthorsInfo() + "', '" + \ 
    516521            self._record.escapeSpecialCharacters(self._record.getParametersInfo()) + "', '" + self._record.getScopeInfo() + "', '" + \ 
    517522            self._record.dataset_name + "', '" + self._record.datacentre_name + "', '" + \ 
  • TI01-discovery-Ingest/trunk/v4.3.0/ingestAutomation-upgrade/OAIBatch/PostgresRecord.py

    r7725 r7889  
    7373         
    7474        #self.dataset_lastEdit = datasetLastEditUpdateDate 
    75         self.dataset_lastEdit = self.isoDataModel.revisionDate[0][0] 
     75        #self.dataset_lastEdit = self.isoDataModel.revisionDate[0][0] 
     76        self.dataset_lastEdit = self.isoDataModel.singleRevisionDate 
    7677             
    7778        #self.datasetStartNom = datasetStartDateNom 
     
    191192                                 
    192193                                thisString = ndgUtilities.encodeIntoHTMLNumericalCodes(inputString) 
    193                                  
     194                                                                 
    194195                                #Need to escape these now 
    195196                                thisString = re.sub(r'\\u', '\\\\\u', thisString) 
     197                                thisString = re.sub(r'\\x', '\\\\\\x', thisString) 
    196198                                 
    197                                  
     199                 
     200                 
    198201                         
    199202                return thisString,convertMsg 
     
    317320        #simple method to generate a space delimited list of authors from isoObject         
    318321        #13/05/10 - note this now moved to ExtractISO - and the list handling methods in Utilities.py         
    319         self.authors = self.isoDataModel.authors_text # Note this is using a unique list of authors so NO duplication 
    320                 
     322        self.authors, message = self.characterEncoding(self.isoDataModel.authors_text) # Note this is using a unique list of authors so NO duplication 
     323        
     324        #if anything has changed need to escape those utf-8 changed chars 
     325        self.authors = self.escapeSpecialCharacters(self.authors) 
     326         
     327        if message != '': 
     328                logging.warn("Authors entry error resolved: %s" %message) 
     329         
    321330        return self.authors 
    322331        
     
    349358         
    350359        #TODO - put this in configuration file! 
    351         acceptedScopeVals = ['NERC_DDC','DDDP','MEDIN','NDGO0001'] 
     360        acceptedScopeVals = ['NERC_DDC','DDDP','MEDIN','NDGO0001','NDGO0003'] 
    352361         
    353362        scopeVals = self.isoDataModel.keywordsList 
     
    362371                                keyword = 'MEDIN' 
    363372                                 
     373                        if keyword == 'NDG00003': 
     374                                keyword = 'NERC_DDC' 
     375                         
     376                                 
    364377                        scope += " " + keyword 
    365                  
     378                
    366379        self.scope = re.sub(r'_', 'UNDERSCORE', scope) 
    367380         
  • TI01-discovery-Ingest/trunk/v4.3.0/ingestAutomation-upgrade/OAIBatch/abstractdocumentingester.py

    r7869 r7889  
    220220                                                                self.isoDataModel,self._xq, self._datacentre_format, self._xqueryConversionsExceptions,  
    221221                                                                self._xqueryConversions,self._saxonJarFile, self._xqueryDocTypes, self.originalXMLdoc, self._currentMedinStandard, stubIso = self.isoXML, difXML = self.difXML, isoXML = self.isoXML)                    
     222                                 
     223                                #check whether NERC keyword is in the scope - if not- REJECT! 
     224                                if 'NERCUNDERSCOREDDC' not in record.getScopeInfo(): 
     225                                        logging.error("No NERC keyword present") 
     226                                        raise ValueError ("NERC keyword is NOT present in record!") 
    222227                                 
    223228                                # Now create the data access object to interface to the DB                       
Note: See TracChangeset for help on using the changeset viewer.