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

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

tidying up comments etc

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
5class molesElement(object):
6    def __init__(self, **kwargs):
7        for kw in kwargs:
8            setattr(self,kw,kwargs[kw])
9    def toXML(self,molesFrag):
10        for attr in self.__dict__:
11            if isinstance(self.__dict__[attr], molesElement):
12                frag=ET.Element(attr)
13                self.__dict__[attr].toXML(frag)
14                molesFrag.append(frag)
15            elif isinstance(self.__dict__[attr], list):
16                for item in self.__dict__[attr]:
17                    if isinstance(item, molesElement):
18                        frag=ET.Element(attr)
19                        item.toXML(frag)
20                        molesFrag.append(frag)
21                    else:
22                        frag=ET.Element(attr)
23                        frag.text=item
24            else:
25                frag=ET.Element(attr)
26                frag.text=self.__dict__[attr]
27                molesFrag.append(frag)
28        return molesFrag
29
30class dgMetadata(molesElement):   
31    def __init__(self, **kwargs):
32        molesElement.__init__(self, **kwargs)
33    def toXML(self):
34        molesFrag=ET.Element('dgMetadata')
35        molesElement.toXML(self,molesFrag)
36        return molesFrag
37
38
39class MolesDoc(object):
40    def __init__(self):
41        pass
42   
43    def _create_a_class(self,name, base_class):
44        aNewClass=type(name, (base_class,),{})
45        return aNewClass
46
47    def _createClasses(self):
48        #if you want more classes just add their names to this list
49        classList= \
50        ['dataModelID', \
51        'dgDataGranule', \
52        'dgDataEntity', \
53        'dgMetadataRecord', \
54        'dgMetadataID', 
55        'dgCoverage', \
56        'dgSpatioTemporalCoverage', \
57        'dgSpatialCoverage', \
58        'dgTemporalCoverage', \
59        'dgBoundingBox', \
60        'DateRange', \
61        'dgDataSummary',\
62        'dgParameterSummary',\
63        'dgRangeDataParameter',\
64        'dgStdParameterMeasured',\
65        'dgStandardUnit',\
66        'dgValidTermID']
67
68        for className in classList:
69            newClass=self._create_a_class(className, molesElement)
70            setattr(self,className,newClass)
71
72# def main():
73#     #example how to create classes:
74#     M=MolesDoc()
75#     M._createClasses()
76#     
77#     '''create your moles doc by setting attributes of "M.className"
78#     the classNames used must be declared in molesWriter.MolesDoc.classList'''
79#     dgMID=M.dgMetadataID(schemeIdentifier='NDG-B0', repositoryIdentifier='badc.nerc.ac.uk', localIdentifier='COAPEC_HadCM3_500Yr')
80#     dmID= M.dataModelID(schemeIdentifier='NDG-A0', repositoryIdentifier='badc.nerc.ac.uk', localIdentifier='COAPEC_500YrRun_wholerun_annual_atmos')
81#     dmID2= M.dataModelID(schemeIdentifier='NDG-A0', repositoryIdentifier='badc.nerc.ac.uk', localIdentifier='COAPEC_500YrRun_wholerun_annual_oceanls')
82#     DG1 = M.dgDataGranule(dataModelID=dmID)
83#     DG2 = M.dgDataGranule(dataModelID=dmID2)
84#     dgDE= M.dgDataEntity(dgDataGranule=[DG1,DG2])
85#     dgMR=M.dgMetadataRecord(dgMetadataID=dgMID, dgDataEntity=dgDE)
86#     dgMeta=dgMetadata(dgMetadataRecord=dgMR)
87#
88#     #print it out.
89#     molestree=dgMeta.toXML()
90#     moles=csml.parser_extra.PrettyPrint(molestree)
91#     print moles
92#
93# if __name__=='__main__':
94#     main()
Note: See TracBrowser for help on using the repository browser.