Changeset 5177 for ndgCommon/trunk


Ignore:
Timestamp:
06/04/09 17:24:57 (10 years ago)
Author:
cbyrom
Message:

Extend moles data model and schema to include the various new
metadata requested - updating the import/export methods + simplifying
object set up by allowing the use of the input dict to specify fields
+ extend test data and test suite.

Location:
ndgCommon/trunk/ndg/common
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • ndgCommon/trunk/ndg/common/src/models/Atom.py

    r5170 r5177  
    257257        the atom data 
    258258        @keyword state:  AtomState object representing the state of the atom 
     259        @param inputs: a dict with vals to set directly against the object fields  
    259260        ''' 
    260261        logging.info("Initialising atom") 
     
    304305        self.t2 = None 
    305306 
    306         self.ME = ME.MolesEntity() 
     307        self.ME = ME.MolesEntity(**inputs) 
    307308         
    308309        # date when the atom was first ingested 
     
    324325        if xmlString: 
    325326            self.fromString(xmlString) 
     327             
     328            # NB, the string may override inputs values on the moles entity - so 
     329            # reapply these here 
     330            if inputs: 
     331                self.ME.__dict__.update(inputs) 
    326332 
    327333        # if inputs passed in as dict, add these now 
     
    342348                author.fromString(name) 
    343349                self.author = author 
    344              
    345             # also pass any moles data up to the moles entity object 
    346             if inputs.has_key('providerID'): 
    347                 self.ME.providerID = inputs.get('providerID') 
    348                  
    349             if inputs.has_key('abbreviation'): 
    350                 self.ME.abbreviation = inputs.get('abbreviation') 
    351350 
    352351        if self.atomTypeID: 
    353352            self.atomTypeName = self.VTD.TERM_DATA[self.atomTypeID].title 
    354  
    355353 
    356354        self.deploymentsURL = "" 
  • ndgCommon/trunk/ndg/common/src/models/MolesEntity.py

    r4810 r5177  
    1414    BROWSE_URL = "http://ndg.badc.rl.ac.uk:8080/view" 
    1515     
    16     def __init__(self): 
     16    def __init__(self, **inputs): 
    1717        ''' 
    1818        Constructor - initialise the atom variables 
     
    3030        self.metadataLanguage = 'English' 
    3131         
     32        self.updateFrequency = '' 
     33        self.lineage = '' 
     34        self.quality = '' 
     35 
     36        self.spatialResolution = None 
     37        self.verticalExtent = None 
     38         
    3239        # helper arrays to produce summary info for atom in templates 
    3340        self.activities = [] 
    3441        self.obs = [] 
    3542        self.dpts = [] 
    36         logging.info("MolesEntity initialised")       
     43        logging.info("MolesEntity initialised") 
     44         
     45        # if inputs passed in as dict, add these now 
     46        if inputs: 
     47            logging.info("Adding info to moles entity from input dict") 
     48            logging.debug(inputs) 
     49            self.__dict__.update(inputs) 
    3750 
    3851 
     
    7487            for party in self.responsibleParties: 
    7588                rpElement.append(party.toXML()) 
     89 
     90        if self.updateFrequency: 
     91            updateFrequencyEl = ET.SubElement(molesISO, "moles:updateFrequency") 
     92            updateFrequencyEl.text = self.updateFrequency 
     93 
     94        if self.lineage: 
     95            lineageEl = ET.SubElement(molesISO, "moles:lineage") 
     96            lineageEl.text = self.lineage 
     97 
     98        if self.quality: 
     99            qualityEl = ET.SubElement(molesISO, "moles:quality") 
     100            qualityEl.text = self.quality 
     101 
     102        if self.spatialResolution: 
     103            srEl = ET.SubElement(molesISO, "moles:spatialResolution") 
     104            srEl.text = self.spatialResolution 
     105 
     106        if self.verticalExtent: 
     107            veEl = ET.SubElement(molesISO, "moles:verticalExtent") 
     108            veEl.text = self.verticalExtent 
    76109 
    77110        if self.abbreviation: 
     
    113146                 
    114147        self.abbreviation = tree.findtext('{%s}molesISO/{%s}abbreviation' \ 
    115                                           %(ndgObject.MOLES_NS, ndgObject.MOLES_NS)) 
     148                                          %(ndgObject.MOLES_NS, ndgObject.MOLES_NS)) or "" 
    116149 
    117150        self.providerID = tree.findtext('{%s}molesISO/{%s}providerID' \ 
    118                                         %(ndgObject.MOLES_NS, ndgObject.MOLES_NS)) 
     151                                        %(ndgObject.MOLES_NS, ndgObject.MOLES_NS)) or "" 
    119152 
    120153        self.datasetLanguage = tree.findtext('{%s}molesISO/{%s}datasetLanguage' \ 
    121                                              %(ndgObject.MOLES_NS, ndgObject.MOLES_NS)) 
     154                                             %(ndgObject.MOLES_NS, ndgObject.MOLES_NS)) or "" 
    122155        self.metadataLanguage = tree.findtext('{%s}molesISO/{%s}metadataLanguage' \ 
    123                                               %(ndgObject.MOLES_NS, ndgObject.MOLES_NS)) 
     156                                              %(ndgObject.MOLES_NS, ndgObject.MOLES_NS)) or "" 
     157        self.updateFrequency = tree.findtext('{%s}molesISO/{%s}updateFrequency' \ 
     158                                              %(ndgObject.MOLES_NS, ndgObject.MOLES_NS)) or "" 
     159        self.lineage = tree.findtext('{%s}molesISO/{%s}lineage' \ 
     160                                     %(ndgObject.MOLES_NS, ndgObject.MOLES_NS)) or "" 
     161        self.quality = tree.findtext('{%s}molesISO/{%s}quality' \ 
     162                                     %(ndgObject.MOLES_NS, ndgObject.MOLES_NS)) or "" 
     163        self.spatialResolution = tree.findtext('{%s}molesISO/{%s}spatialResolution' \ 
     164                                     %(ndgObject.MOLES_NS, ndgObject.MOLES_NS)) or "" 
     165        self.verticalExtent = tree.findtext('{%s}molesISO/{%s}verticalExtent' \ 
     166                                     %(ndgObject.MOLES_NS, ndgObject.MOLES_NS)) or "" 
    124167 
    125168        createdDate = tree.findtext('{%s}molesISO/{%s}created' \ 
    126                                     %(ndgObject.MOLES_NS, ndgObject.MOLES_NS)) 
     169                                    %(ndgObject.MOLES_NS, ndgObject.MOLES_NS)) or "" 
    127170        if createdDate: 
    128171            logging.debug("Adding created date") 
  • ndgCommon/trunk/ndg/common/unittests/models/testmolesentity.py

    r5097 r5177  
    1919        termURI = VTD().getTermCurrentVocabURL(VTD.GRANULE_TERM) 
    2020        self.ME = ME.MolesEntity() 
    21         self.ME.abbreviation = tc.ABBREVIATION 
    22         self.ME.providerID = tc.VALID_PROVIDER_ID 
    23         self.ME.createdDate = tc.createdDate 
     21        self.inputs = {'abbreviation':tc.ABBREVIATION, 
     22                       'providerID':tc.VALID_PROVIDER_ID, 
     23                       'createdDate':tc.createdDate, 
     24                       'datasetLanguage':tc.DATASET_LANGUAGE, 
     25                       'updateFrequency':tc.UPDATE_FREQUENCY, 
     26                       'verticalExtent':tc.VERTICAL_EXTENT, 
     27                       'spatialResolution':tc.SPATIAL_RESOLUTION} 
     28        for key, val in self.inputs.items(): 
     29            setattr(self.ME, key, val) 
    2430         
    2531         
    2632    def testInit(self): 
     33        self.checkVals() 
     34         
     35    def testFromString(self): 
     36        self.ME.fromString(tc.MOLES_ENTITY_STRING) 
     37        self.checkVals() 
     38         
     39    def testFromAtomString(self): 
     40        atom = Atom(xmlString = tc.xmlString) 
     41        self.ME = atom.ME 
     42        self.checkVals() 
     43         
     44    def testFromInputs(self): 
     45        self.ME = ME.MolesEntity(**self.inputs) 
     46        self.checkVals() 
     47         
     48         
     49    def testFromAtomInputs(self): 
     50        self.ME = Atom(**self.inputs).ME 
     51        self.checkVals() 
     52 
     53    def checkVals(self): 
    2754        self.assertEqual(tc.ABBREVIATION, self.ME.abbreviation) 
    2855        self.assertEqual(tc.VALID_PROVIDER_ID, self.ME.providerID) 
    2956        self.assertEqual(tc.createdDate, self.ME.createdDate) 
    30          
    31          
    32     def testFromString(self): 
    33         self.ME.fromString(tc.MOLES_ENTITY_STRING) 
    34         self.assertEqual(tc.ABBREVIATION, self.ME.abbreviation) 
    35         self.assertEqual(tc.VALID_PROVIDER_ID, self.ME.providerID) 
    36         self.assertEqual(tc.createdDate, self.ME.createdDate) 
    37          
    38     def testFromAtomString(self): 
    39         atom = Atom(xmlString = tc.xmlString) 
    40         self.assertEqual(tc.ABBREVIATION, atom.ME.abbreviation) 
    41         self.assertEqual(tc.VALID_PROVIDER_ID, atom.ME.providerID) 
    42         self.assertEqual(tc.createdDate, atom.ME.createdDate) 
    43          
    44          
     57        self.assertEqual(tc.DATASET_LANGUAGE, self.ME.datasetLanguage) 
     58        self.assertEqual(tc.UPDATE_FREQUENCY, self.ME.updateFrequency) 
     59        self.assertEqual(tc.SPATIAL_RESOLUTION, self.ME.spatialResolution) 
     60        self.assertEqual(tc.VERTICAL_EXTENT, self.ME.verticalExtent) 
    4561 
    4662 
  • ndgCommon/trunk/ndg/common/unittests/testconstants.py

    r5147 r5177  
    1818 
    1919def getTestDataDir(dir): 
     20    print 'Looking for directory, %s' %dir 
    2021    if os.path.exists(dir): 
    2122        return dir 
     
    3031# NB, directories depend on whether we're running on unix/windows or 
    3132# whether we use nose to run the tests of python unit tests 
     33print os.getcwd() 
    3234parentDir = '..' + os.sep 
    3335TEST_DATA_DIR = getTestDataDir('testdata' + os.sep) 
     
    4042# - whilst the tests do clean up after themselves, it's probably best not to 
    4143# run tests using a production environment DB! 
    42 EXIST_DB = 'bora.badc.rl.ac.uk' 
     44#EXIST_DB = 'bora.badc.rl.ac.uk' 
    4345#EXIST_DB = 'chinook.badc.rl.ac.uk' 
    44 #EXIST_DB = 'localhost' 
     46EXIST_DB = 'localhost' 
    4547PG_DBCONFIG_FILE = TEST_DATA_DIR + 'pg.config' 
    4648EXIST_DBCONFIG_FILE = TEST_DATA_DIR + 'exist.config' 
     
    127129INVALID_COLLECTION = '/db/gooseberry' 
    128130createdDate = datetime.datetime.today().strftime("%Y-%m-%dT%H_%M_%S") 
    129  
     131DATASET_LANGUAGE = 'English' 
     132UPDATE_FREQUENCY = 'Not very often' 
     133SPATIAL_RESOLUTION = "quite detailed" 
     134VERTICAL_EXTENT = "higher than you might think" 
    130135MOLES_ENTITY_STRING = '<moles:entity type="granule"><moles:molesISO><moles:responsibleParties>' + \ 
    131136            '<moles:responsibleParty><moles:name>calum byrom</moles:name><moles:uri>www.cb.org</moles:uri><moles:role>Metadata maintainer</moles:role></moles:responsibleParty>' + \ 
    132137            '<moles:responsibleParty><moles:name>dom lowe</moles:name><moles:uri>www.badc.rl.ac.uk</moles:uri><moles:role>Metadata maintainer</moles:role></moles:responsibleParty>' + \ 
    133138            '</moles:responsibleParties><moles:datasetLanguage>English</moles:datasetLanguage>' + \ 
    134             '<moles:datasetLanguage>English</moles:datasetLanguage>' + \ 
     139            '<moles:datasetLanguage>' + DATASET_LANGUAGE + '</moles:datasetLanguage>' + \ 
    135140            '<moles:metadataLanguage>English</moles:metadataLanguage>' + \ 
    136141            '<moles:abbreviation>' + ABBREVIATION + '</moles:abbreviation>' + \ 
    137142            '<moles:providerID>' + VALID_PROVIDER_ID + '</moles:providerID>' + \ 
    138143            '<moles:metadataLanguage>English</moles:metadataLanguage>' + \ 
     144            '<moles:updateFrequency>' + UPDATE_FREQUENCY + '</moles:updateFrequency>' + \ 
     145            '<moles:spatialResolution>' + SPATIAL_RESOLUTION + '</moles:spatialResolution>' + \ 
     146            '<moles:verticalExtent>' + VERTICAL_EXTENT + '</moles:verticalExtent>' + \ 
    139147            '<moles:created>' + createdDate + '</moles:created>' + \ 
    140148            '</moles:molesISO>' + \ 
  • ndgCommon/trunk/ndg/common/xmldb/schema/moles2.0.xsd

    r4793 r5177  
    3333                        <xs:element name="created" type="xs:string" minOccurs="1" maxOccurs="1" /> 
    3434                        <xs:element name="responsibleParties" type="moles:responsiblePartiesType" maxOccurs="1" /> 
     35                        <xs:element name="updateFrequency" type="xs:string" maxOccurs="1" /> 
     36                        <xs:element name="lineage" type="xs:string" maxOccurs="1" /> 
     37                        <xs:element name="quality" type="xs:string" maxOccurs="1" /> 
     38                        <xs:element name="spatialResolution" type="xs:string" maxOccurs="1" /> 
     39                        <xs:element name="verticalExtent" type="xs:string" maxOccurs="1" /> 
    3540                </xs:choice> 
    3641        </xs:complexType> 
Note: See TracChangeset for help on using the changeset viewer.