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

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

removing qname code for now

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