source: TI02-CSML/trunk/csml2MolesStuff/molesWriter.py @ 1609

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI02-CSML/trunk/csml2MolesStuff/molesWriter.py@1609
Revision 1609, 4.1 KB checked in by domlowe, 13 years ago (diff)

coverage aggregation and basic data granule creation working

Line 
1#prototype MOLES  generation code. Dominic Lowe, BADC  18 October 2006
2
3import cElementTree as ET
4import csml.parser_extra #note this is only used for pretty printing - there's no dependency on the CSML parser
5
6class molesElement(object):
7    def __init__(self, **kwargs):
8        for kw in kwargs:
9            setattr(self,kw,kwargs[kw])   
10    def toXML(self,molesFrag):
11        for attr in self.__dict__:
12            print attr
13            if isinstance(self.__dict__[attr], molesElement):
14                subelem = self.__dict__[attr]
15                frag=ET.Element(attr)
16                for attrib in subelem.__dict__:
17                    if isinstance(subelem.__dict__[attrib], molesElement):
18                        subfrag=ET.Element(attrib)
19                        subelem.__dict__[attrib].toXML(subfrag)
20                        frag.append(subfrag)
21                    else:
22                        subfrag=ET.Element(attrib)
23                        subfrag.text=subelem.__dict__[attrib]
24                        frag.append(subfrag)
25                molesFrag.append(frag)
26            elif isinstance(self.__dict__[attr], list):
27                for item in self.__dict__[attr]:
28                    if isinstance(item, molesElement):
29                        subelem = item
30                        frag=ET.Element(attr)
31                        for attrib in subelem.__dict__:
32                            if isinstance(subelem.__dict__[attrib], molesElement):
33                                subfrag=ET.Element(attrib)
34                                subelem.__dict__[attrib].toXML(subfrag)
35                                frag.append(subfrag)
36                            else:
37                                frag.text=attrib
38                        molesFrag.append(frag)   
39                    else:
40                        frag=ET.Element(attr)
41                        frag.text=self.__dict__[attr]           
42                        molesFrag.append(frag)
43            else:
44                frag=ET.Element(attr)
45                frag.text=self.__dict__[attr]           
46                molesFrag.append(frag)
47        return molesFrag
48
49
50class dgMetadata(molesElement):   
51    def __init__(self, **kwargs):
52        molesElement.__init__(self, **kwargs)
53    def toXML(self):
54        molesFrag=ET.Element('dgMetadata')
55        molesElement.toXML(self,molesFrag)
56        return molesFrag
57
58
59class MolesDoc(object):
60    def __init__(self):
61        pass
62   
63    def _create_a_class(self,name, base_class):
64        aNewClass=type(name, (base_class,),{})
65        return aNewClass
66
67    def _createClasses(self):
68        #if you want more classes just add their names to this list
69        classList= \
70        ['dataModelID', \
71        'dgDataGranule', \
72        'dgDataEntity', \
73        'dgMetadataRecord', \
74        'dgMetadataID', 
75        'dgCoverage', \
76        'dgSpatioTemporalCoverage', \
77        'dgSpatialCoverage', \
78        'dgTemporalCoverage', \
79        'dgBoundingBox', \
80        'DateRange']
81
82        for className in classList:
83            newClass=self._create_a_class(className, molesElement)
84            setattr(self,className,newClass)
85
86def main():
87    #create classes:
88    M=MolesDoc()
89    M._createClasses()
90   
91    '''create your moles doc by setting attributes of "M.className"
92    the classNames used must be declared in molesWriter.MolesDoc.classList'''
93    dgMID=M.dgMetadataID(schemeIdentifier='NDG-B0', repositoryIdentifier='badc.nerc.ac.uk', localIdentifier='COAPEC_HadCM3_500Yr')
94    dmID= M.dataModelID(schemeIdentifier='NDG-A0', repositoryIdentifier='badc.nerc.ac.uk', localIdentifier='COAPEC_500YrRun_wholerun_annual_atmos')
95    dmID2= M.dataModelID(schemeIdentifier='NDG-A0', repositoryIdentifier='badc.nerc.ac.uk', localIdentifier='COAPEC_500YrRun_wholerun_annual_oceanls')
96    DG1 = M.dgDataGranule(dataModelID=dmID)
97    DG2 = M.dgDataGranule(dataModelID=dmID2)
98    dgDE= M.dgDataEntity(dgDataGranule=[DG1,DG2])
99    dgMR=M.dgMetadataRecord(dgMetadataID=dgMID, dgDataEntity=dgDE)
100    dgMeta=dgMetadata(dgMetadataRecord=dgMR)
101
102    #print it out.
103    molestree=dgMeta.toXML()
104    moles=csml.parser_extra.PrettyPrint(molestree)
105    print moles
106
107if __name__=='__main__':
108    main()
Note: See TracBrowser for help on using the repository browser.