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

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

ongoing changes to csml2moles.py - convenient time to commit

RevLine 
[1597]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
[1606]6class molesElement(object):
[1597]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
47class dgMetadata(molesElement):   
48    def __init__(self, **kwargs):
49        molesElement.__init__(self, **kwargs)
50    def toXML(self):
51        molesFrag=ET.Element('dgMetadata')
52        molesElement.toXML(self,molesFrag)
53        return molesFrag
54
[1606]55
56class MolesDoc(object):
57    def __init__(self):
58        pass
59   
60    def _create_a_class(self,name, base_class):
61        aNewClass=type(name, (base_class,),{})
62        return aNewClass
63
64    def _createClasses(self):
[1608]65        #if you want more classes just add their names to this list
66        classList=[\
67        'dataModelID', \
68        'dgDataGranule', \
69        'dgDataEntity', \
70        'dgMetadataRecord', \
71        'dgMetadataID', \
72        ]
[1606]73
[1608]74        for className in classList:
75            newClass=self._create_a_class(className, molesElement)
76            setattr(self,className,newClass)
77
[1597]78def main():
[1606]79    #create classes:
80    M=MolesDoc()
81    M._createClasses()
82   
[1608]83    '''create your moles doc by setting attributes of "M.className"
84    the classNames used must be declared in molesWriter.MolesDoc.classList'''
[1606]85    dgMID=M.dgMetadataID(schemeIdentifier='NDG-B0', repositoryIdentifier='badc.nerc.ac.uk', localIdentifier='COAPEC_HadCM3_500Yr')
86    dmID= M.dataModelID(schemeIdentifier='NDG-A0', repositoryIdentifier='badc.nerc.ac.uk', localIdentifier='COAPEC_500YrRun_wholerun_annual_atmos')
87    dmID2= M.dataModelID(schemeIdentifier='NDG-A0', repositoryIdentifier='badc.nerc.ac.uk', localIdentifier='COAPEC_500YrRun_wholerun_annual_oceanls')
88    DG1 = M.dgDataGranule(dataModelID=dmID)
89    DG2 = M.dgDataGranule(dataModelID=dmID2)
90    dgDE= M.dgDataEntity(dgDataGranule=[DG1,DG2])
91    dgMR=M.dgMetadataRecord(dgMetadataID=dgMID, dgDataEntity=dgDE)
[1597]92    dgMeta=dgMetadata(dgMetadataRecord=dgMR)
93
94    #print it out.
95    molestree=dgMeta.toXML()
96    moles=csml.parser_extra.PrettyPrint(molestree)
97    print moles
98
99if __name__=='__main__':
100    main()
Note: See TracBrowser for help on using the repository browser.