Changeset 4419 for exist


Ignore:
Timestamp:
11/11/08 10:08:14 (11 years ago)
Author:
cbyrom
Message:

Add method to atom to allow ingest of CSML data + add inputs check for
dbclient method.

Location:
exist/trunk/python/ndgUtils/models
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • exist/trunk/python/ndgUtils/models/Atom.py

    r4347 r4419  
    2020from ndgUtils.vocabtermdata import VocabTermData as VTD 
    2121from ndgUtils.models import MolesEntity as ME 
     22import csml.parser as CsmlParser 
    2223 
    2324 
     
    932933                newVals = [] 
    933934                for val in attributeValue: 
    934                     newVals.append(objectify(escapeSpecialCharacters(val)), attributeName) 
     935                    newVals.append(self.objectify(escapeSpecialCharacters(val), attributeName)) 
    935936                attributeValue = newVals 
    936937                     
    937938            else: 
    938                 attributeValue = objectify(escapeSpecialCharacters(attributeValue), attributeName) 
     939                attributeValue = self.objectify(escapeSpecialCharacters(attributeValue), attributeName) 
    939940 
    940941        # handle the special case of authors; only one author is allowed per atom 
     
    11161117        return False 
    11171118 
     1119         
     1120     
     1121def addCSMLData(csml, aggregateCoverage=False): 
     1122    ''' 
     1123    Parse CSML data and add extracted info to the atom 
     1124    @param csml: csml file contents - or path to csml file 
     1125    @keyword aggregateCoverage: if set to True, only coverage data that extends the 
     1126    atom coverage data will be added 
     1127    ''' 
     1128    logging.info("Creating CSML data model") 
     1129    csmlDoc = CsmlParser.Dataset(file=self._csmlFile) 
     1130     
     1131    logging.info("Extracting info from CSML file") 
     1132    logging.debug("Got dataset ID: %s" %csmlDoc.id) 
     1133    self.setDatasetID(csmlDoc.id) 
     1134     
     1135    title = csmlDoc.name.CONTENT 
     1136    logging.debug("Got dataset name (title): '%s'" %title) 
     1137    # NB, if a title is specified (and not as the default value), it automatically is used in  
     1138    # place of anything in the granulite file 
     1139    if title and title != "NAME OF DATASET GOES HERE": 
     1140        logging.info("Title, '%s', extracted from CSML file" %title) 
     1141        if self.title: 
     1142            logging.info("- NB, this will override the title specified in the granulite file ('%s')" \ 
     1143                         %self.title) 
     1144        self.title = title 
     1145             
     1146    bbox1 = csmlDoc.getBoundingBox() 
     1147    bbox2 = csmlDoc.getCSMLBoundingBox() 
     1148    time = bbox2.getTimeLimits() 
     1149 
     1150    # now check for other parameters to add to granule 
     1151    # Firstly, extract the bounding envelope 
     1152    if bbox1: 
     1153        w, e = self.moveBox(bbox1[0],bbox1[2]) 
     1154        n, s = (bbox1[3], bbox1[1]) 
     1155 
     1156        if not aggregateCoverage or (not self.maxY or float(n) > float(self.maxY)): 
     1157            self.maxY = n 
     1158             
     1159        if not aggregateCoverage or (not self.minY or float(s) < float(self.minY)): 
     1160            self.minY = s 
     1161         
     1162        if not aggregateCoverage or (not self.minX or float(w) < float(self.minX)): 
     1163            self.minX = w 
     1164 
     1165        if not aggregateCoverage or (not self.maxX or float(e) > float(self.maxX)): 
     1166            self.maxX = e 
     1167         
     1168        logging.debug("Got bounding box data from file: (%s, %s) , (%s, %s)" \ 
     1169                      %(w, s, e, n)) 
     1170         
     1171        logging.debug("Updated atom bounding box data: (%s, %s) , (%s, %s)" \ 
     1172                      %(self.minX, self.minY, self.maxX, self.maxY)) 
     1173    else: 
     1174        logging.debug("No valid bounding box data found") 
     1175 
     1176    if time: 
     1177        t1 = formatDateYYYYMMDD(time[0]) 
     1178        if not aggregateCoverage or \ 
     1179            (not self.t1 or datetime.datetime.strptime(t1, YEAR_FORMAT) < \ 
     1180                datetime.datetime.strptime(self.t1, YEAR_FORMAT)): 
     1181            self.t1 = t1 
     1182 
     1183        t2 = time[1] 
     1184        if t2 and t2 != 'None': 
     1185            t2 = formatDateYYYYMMDD(t2) 
     1186            if not aggregateCoverage or \ 
     1187                (not self.t2 or datetime.datetime.strptime(t2, YEAR_FORMAT) > \ 
     1188                    datetime.datetime.strptime(self.t2, YEAR_FORMAT)): 
     1189                self.t2 = t2 
     1190         
     1191        logging.debug("Got time range: %s -> %s" %(self.t1, self.t2)) 
     1192    else: 
     1193        logging.debug("No valid time range data found") 
     1194 
     1195    #create parameter summaries: 
     1196    #set up list to hold the parameters data 
     1197    parameters = [] 
     1198    for feature in csmlDoc.featureCollection.featureMembers: 
     1199        if hasattr(feature.parameter, 'href'): 
     1200            paramTriple = "" 
     1201            if hasattr(feature, 'description'): 
     1202                paramTriple = feature.description.CONTENT 
     1203                paramTriple += " | " + feature.parameter.href 
     1204                 
     1205                term = "" 
     1206                if hasattr(feature, 'name'): 
     1207                    term = feature.name.CONTENT 
     1208 
     1209                paramTriple += " | " + term 
     1210                 
     1211                logging.debug("Got parameter info: %s" %paramTriple) 
     1212                parameters.append(paramTriple) 
     1213     
     1214    # update the atom with the extracted parameters 
     1215    logging.info("Adding CSML parameters to granule atom") 
     1216    self.addParameters(parameters) 
     1217    logging.info("Finished adding CSML data") 
  • exist/trunk/python/ndgUtils/models/existdbclient.py

    r4414 r4419  
    9393        # Check this file exists 
    9494        if not os.path.isfile(configFile): 
    95             errorMessage = "ERROR: Could not find the DB config file, %s; please make sure this " \ 
     95            errorMessage = "Could not find the DB config file, %s; please make sure this " \ 
    9696                     "is available from the running directory" %configFile 
    9797            logging.error(errorMessage) 
  • exist/trunk/python/ndgUtils/models/utilities.py

    r4414 r4419  
    11import os, sys, logging, re, cgi 
    22from ndgUtils.ETxmlView import subAI 
    3 #import csml.csmlscan as CsmlScan 
     3import csml.csmlscan as CsmlScan 
    44from xml.sax.saxutils import escape 
    55''' 
     
    9595    @raise ValueError: if string not in ISO8601 format - or cannot be parsed into this format 
    9696    ''' 
     97    if not datestring: 
     98        return '' 
     99     
    97100    d = regExp.match(datestring) 
    98101    if not d: 
     
    219222    def get(self): 
    220223        return self.paramSummaries 
    221          
    222  
Note: See TracChangeset for help on using the changeset viewer.