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

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

prototype moles generation code to be used in csml2moles

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:
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            if isinstance(self.__dict__[attr], molesElement):
13                subelem = self.__dict__[attr]
14                frag=ET.Element(attr)
15                for attrib in subelem.__dict__:
16                    if isinstance(subelem.__dict__[attrib], molesElement):
17                        subfrag=ET.Element(attrib)
18                        subelem.__dict__[attrib].toXML(subfrag)
19                        frag.append(subfrag)
20                    else:
21                        frag.text=attrib
22                molesFrag.append(frag)
23            elif isinstance(self.__dict__[attr], list):
24                for item in self.__dict__[attr]:
25                    if isinstance(item, molesElement):
26                        subelem = item
27                        frag=ET.Element(attr)
28                        for attrib in subelem.__dict__:
29                            if isinstance(subelem.__dict__[attrib], molesElement):
30                                subfrag=ET.Element(attrib)
31                                subelem.__dict__[attrib].toXML(subfrag)
32                                frag.append(subfrag)
33                            else:
34                                frag.text=attrib
35                        molesFrag.append(frag)   
36                    else:
37                        frag=ET.Element(attr)
38                        frag.text=self.__dict__[attr]           
39                        molesFrag.append(frag)
40            else:
41                frag=ET.Element(attr)
42                frag.text=self.__dict__[attr]           
43                molesFrag.append(frag)
44        return molesFrag
45
46           
47#all the other classes inherit from the molesElement class - only the names change. Must be a use for MetaClasses here...
48class dgMetadataID(molesElement):
49    pass
50
51class dgMetadataRecord(molesElement):   
52    pass
53                   
54class dataModelID(molesElement):
55    pass
56               
57class dgDataGranule(molesElement):
58    pass
59
60class dgDataEntity(molesElement):
61    pass
62             
63class dgMetadata(molesElement):   
64    def __init__(self, **kwargs):
65        molesElement.__init__(self, **kwargs)
66    def toXML(self):
67        molesFrag=ET.Element('dgMetadata')
68        molesElement.toXML(self,molesFrag)
69        return molesFrag
70
71def main():
72    #create your moles doc by setting attributes.
73    dgMID=dgMetadataID(schemeIdentifier='NDG-B0', repositoryIdentifier='badc.nerc.ac.uk', localIdentifier='COAPEC_HadCM3_500Yr')
74    dmID= dataModelID(schemeIdentifier='NDG-A0', repositoryIdentifier='badc.nerc.ac.uk', localIdentifier='COAPEC_500YrRun_wholerun_annual_atmos')
75    dmID2= dataModelID(schemeIdentifier='NDG-A0', repositoryIdentifier='badc.nerc.ac.uk', localIdentifier='COAPEC_500YrRun_wholerun_annual_oceanls')
76    DG1 = dgDataGranule(dataModelID=dmID)
77    DG2 = dgDataGranule(dataModelID=dmID2)
78    dgDE= dgDataEntity(dgDataGranule=[DG1,DG2])
79    dgMR=dgMetadataRecord(dgMetadataID=dgMID, dgDataEntity=dgDE)
80    dgMeta=dgMetadata(dgMetadataRecord=dgMR)
81
82    #print it out.
83    molestree=dgMeta.toXML()
84    moles=csml.parser_extra.PrettyPrint(molestree)
85    print moles
86
87if __name__=='__main__':
88    main()
Note: See TracBrowser for help on using the repository browser.