source: TI02-CSML/trunk/csml2MolesStuff/molesReadWrite.py @ 1672

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

really removing it this time

Line 
1#Dominic Lowe, BADC  18 October 2006
2
3import cElementTree as ET
4
5class molesElement(object):
6    def __init__(self, ns, **kwargs):
7        self.ns=ns
8        self.__dict__.update(kwargs)
9       
10    def _combineattributes(self,attname, newChild):
11        att = getattr(self,attname)
12        if isinstance(att,molesElement):
13            setattr(self,attname,[att, newChild])
14        else:
15            att.append(newChild)
16            setattr(self, attname,att)
17           
18    def toXML(self,molesFrag):
19        for attr in self.__dict__:
20            if attr=='ns':
21                pass
22            elif isinstance(self.__dict__[attr], molesElement):
23                frag=ET.Element(attr)
24                self.__dict__[attr].toXML(frag)
25                molesFrag.append(frag)
26            elif isinstance(self.__dict__[attr], list):
27                for item in self.__dict__[attr]:
28                    if isinstance(item, molesElement):
29                        frag=ET.Element(attr)
30                        item.toXML(frag)
31                        molesFrag.append(frag)
32                    else:
33                        frag=ET.Element(attr)
34                        frag.text=item
35            else:
36                frag=ET.Element(attr)
37                frag.text=self.__dict__[attr]
38                molesFrag.append(frag)
39        return molesFrag
40           
41    def fromXML(self,molesFrag):
42        children = molesFrag.getchildren()
43        if children ==[]:
44            setattr(self,molesElement.tag, molesElement.text)
45        if children!=[]:
46            for child in children:
47                if child.getchildren()!=[]:
48                    newClass=type(child.tag, (molesElement,),{})
49                    newChild=newClass(self.ns)
50                    newChild.fromXML(child)
51                    kw=child.tag
52                    if hasattr(self, child.tag):
53                        self._combineattributes(child.tag, newChild)
54                    else:
55                        setattr(self,child.tag, newChild)
56                else:
57                    setattr(self,child.tag, child.text)
58       
59                   
60class dgMetadata(molesElement):   
61    def __init__(self,ns, **kwargs):
62        molesElement.__init__(self,ns, **kwargs)
63       
64    def toXML(self):
65        molesFrag=ET.Element('dgMetadata')
66        molesElement.toXML(self,molesFrag)
67        return molesFrag
68
69
70class MolesDoc(object):
71    def __init__(self):
72        self._createClasses()
73   
74    def _create_a_class(self,name, base_class):
75        aNewClass=type(name, (base_class,),{})
76        return aNewClass
77
78    def _createClasses(self):
79        #if you want more classes just add their names to this list
80        classList= \
81        ['dataModelID', \
82        'dgDataGranule', \
83        'dgDataEntity', \
84        'dgMetadataRecord', \
85        'dgMetadataID', 
86        'dgCoverage', \
87        'dgSpatioTemporalCoverage', \
88        'dgSpatialCoverage', \
89        'dgTemporalCoverage', \
90        'dgBoundingBox', \
91        'DateRange', \
92        'dgDataSummary',\
93        'dgParameterSummary',\
94        'dgRangeDataParameter',\
95        'dgStdParameterMeasured',\
96        'dgStandardUnit',\
97        'dgValidTermID',\
98        'metadataDescriptionID',\
99        'dgMetadataDescription', \
100        ]
101
102        for className in classList:
103            newClass=self._create_a_class(className, molesElement)
104            setattr(self,className,newClass)
105
Note: See TracBrowser for help on using the repository browser.