Changeset 2343 for TI02-CSML


Ignore:
Timestamp:
28/03/07 14:54:39 (12 years ago)
Author:
domlowe
Message:

ordering code actually working properly now

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI02-CSML/trunk/csml/parser.py

    r2341 r2343  
    5757  if hasattr(obj, 'ELEMORDER'): 
    5858    for elem in elems: 
    59         obj.ELEMORDER.append(elems) 
     59        obj.ELEMORDER.append(elem) 
    6060  else: 
    6161    obj.ELEMORDER=elems 
     
    7575        if not hasattr(self, 'ATTRIBUTES'): 
    7676            self.__dict__['ATTRIBUTES']=[] 
    77                 
    78      
     77        if not hasattr(self, 'ELEMORDER'): 
     78            self.__dict__['ELEMORDER']=[]        
     79        if not hasattr(self, 'CHILDREN'): 
     80            self.__dict__['CHILDREN']={} 
    7981    #The __setattr__ and __getattribute__ special methods have been overridden. 
    8082    #This is so that attributes can be called by their fully qualified name internally 
     
    166168                    csmlfrag.set(GML(item), self.__dict__[item])        
    167169    # self.CHILDREN (recursive - calls the toXML method of children 
    168         for att in self.__dict__: 
    169             if att not in ['ATTRIBUTES', 'CHILDREN', 'CONTENT','ELEMORDER']: 
    170                 for child in self.ELEMORDER: 
    171                     appendLater=False 
    172                     if child == att: 
    173                         parserobjects=[] 
    174                         if type(self.__dict__[att]) is list: 
    175                             for a in self.__dict__[att]: 
    176                                 parserobjects.append(a) 
    177                         else: 
    178                             parserobjects.append(self.__dict__[att]) 
    179                         parentfrag=None 
    180                         if len(self.CHILDREN[child])>=3: 
    181                                 ename2=self.CHILDREN[child][2] 
    182                                 parentfrag=ET.Element(ename2) 
    183                         for po in parserobjects: 
    184                             if type(self.CHILDREN[child][0]) is not list: 
    185                                 ename=self.CHILDREN[child][0] 
    186                             else: 
    187                                 ename = self._getReverseSubsType(type(po).__name__) 
    188                             if len(self.CHILDREN[child])==3: 
    189                                 frag=ET.Element(ename) 
    190                                 po.toXML(frag) 
    191                                 parentfrag.append(frag) 
    192                                 appendLater=True 
    193                             elif len(self.CHILDREN[child])>=4: 
    194                                 if self.CHILDREN[child][3]==1: 
    195                                     frag=ET.Element(ename) 
    196                                     po.toXML(frag) 
    197                                     parentfrag.append(frag) 
    198                                     csmlfrag.append(parentfrag) 
    199                                     parentfrag=ET.Element(parentfrag.tag) 
    200                                     appendLater=False 
    201                             else: 
    202                                 frag=ET.Element(ename) 
    203                                 try: 
    204                                     po.toXML(frag) 
    205                                 except: 
    206                                     print 'PARSING ERROR - could not convert %s to XML'%frag 
    207                                     print dir(ename) 
    208                                     raise 
    209                                 csmlfrag.append(frag) 
    210                                 appendLater=True 
    211                         if appendLater==True and parentfrag != None: 
    212                             csmlfrag.append(parentfrag) 
     170        for child in self.ELEMORDER: 
     171            if not self.__dict__.has_key(child): 
     172                continue 
     173            appendLater=False 
     174            parserobjects=[] 
     175            if type(self.__dict__[child]) is list: 
     176                for a in self.__dict__[child]: 
     177                    parserobjects.append(a) 
     178            else: 
     179                parserobjects.append(self.__dict__[child]) 
     180            parentfrag=None 
     181            if len(self.CHILDREN[child])>=3: 
     182                    ename2=self.CHILDREN[child][2] 
     183                    parentfrag=ET.Element(ename2) 
     184            for po in parserobjects: 
     185                if type(self.CHILDREN[child][0]) is not list: 
     186                    ename=self.CHILDREN[child][0] 
     187                else: 
     188                    ename = self._getReverseSubsType(type(po).__name__) 
     189                if len(self.CHILDREN[child])==3: 
     190                    frag=ET.Element(ename) 
     191                    po.toXML(frag) 
     192                    parentfrag.append(frag) 
     193                    appendLater=True 
     194                elif len(self.CHILDREN[child])>=4: 
     195                    if self.CHILDREN[child][3]==1: 
     196                        frag=ET.Element(ename) 
     197                        po.toXML(frag) 
     198                        parentfrag.append(frag) 
     199                        csmlfrag.append(parentfrag) 
     200                        parentfrag=ET.Element(parentfrag.tag) 
     201                        appendLater=False 
     202                else: 
     203                    frag=ET.Element(ename) 
     204                    try: 
     205                        po.toXML(frag) 
     206                    except: 
     207                        print 'PARSING ERROR - could not convert %s to XML'%frag 
     208                        print dir(ename) 
     209                        raise 
     210                    csmlfrag.append(frag) 
     211                    appendLater=True 
     212                if appendLater==True and parentfrag != None: 
     213                    csmlfrag.append(parentfrag) 
    213214        return csmlfrag 
    214215         
     
    288289        elems=['metaDataProperty', 'description'] 
    289290        addelems(self,elems) 
    290         csElement.__init__(self,**kwargs) 
    291291        children={elems[0]:[GML('metaDataProperty'),'csString'],elems[1]:[GML('description'),'csString']} 
    292292        addchildren(self,children) 
     293        csElement.__init__(self,**kwargs) 
    293294         
    294295class AssociationAttributeGroup(csElement): 
     
    301302    def __init__(self, text=None,**kwargs): 
    302303        #Needed so it can use xlink 
     304        addelems(self,[]) 
    303305        AssociationAttributeGroup.__init__(self,**kwargs) 
    304306        if text != None: 
     
    318320class SRSInformationGroup(csElement): 
    319321    def __init__(self, **kwargs): 
    320         a =['uomLabels','axisLabels']  
     322        a =['uomLabels','axisLabels'] 
    321323        addatts(self,a) 
    322324        csElement.__init__(self,**kwargs) 
     
    324326class ArrayDescriptor(AbstractGML, csElement): 
    325327    def __init__(self,**kwargs): 
     328        AbstractGML.__init__(self,**kwargs) 
    326329        elems=['arraySize', 'uom', 'numericType','regExpTransform','numericTransform'] 
    327330        addelems(self,elems) 
    328         AbstractGML.__init__(self,**kwargs) 
    329331        children={elems[0]:[CSML('arraySize'), 'csString'], elems[1]:[CSML('uom'),'csString'], elems[2]:[CSML('numericType'),'csString'], elems[3]:[CSML('regExpTransform'),'csString'], elems[4]:[CSML('numericTransform'),'csString']} 
    330332        addchildren(self,children) 
     
    333335class GridEnvelope(AbstractGML,SRSReferenceGroup, csElement): 
    334336    def __init__(self, **kwargs): 
     337        SRSReferenceGroup.__init__(self,**kwargs) 
     338        AbstractGML.__init__(self,**kwargs) 
    335339        elems=['low', 'high'] 
    336340        addelems(self,elems) 
     341        children={elems[0]:[GML('low'), 'csString'],elems[1]:[GML('high'), 'csString']} 
     342        addchildren(self,children) 
     343        csElement.__init__(self,**kwargs) 
     344         
     345class Envelope(AbstractGML,SRSReferenceGroup, csElement): 
     346    def __init__(self, **kwargs): 
    337347        SRSReferenceGroup.__init__(self,**kwargs) 
    338348        AbstractGML.__init__(self,**kwargs) 
    339         children={elems[0]:[GML('low'), 'csString'],elems[1]:[GML('high'), 'csString']} 
    340         addchildren(self,children) 
    341         csElement.__init__(self,**kwargs) 
    342          
    343 class Envelope(AbstractGML,SRSReferenceGroup, csElement): 
    344     def __init__(self, **kwargs): 
    345349        elems=['lowerCorner','upperCorner'] 
    346350        addelems(self,elems) 
    347         SRSReferenceGroup.__init__(self,**kwargs) 
    348         AbstractGML.__init__(self,**kwargs) 
    349351        children={elems[0]:[GML('lowerCorner'), 'csString'],elems[1]:[GML('upperCorner'), 'csString']} 
    350352        addchildren(self,children) 
     
    362364class AbstractFeature(AbstractGML,csElement): 
    363365    def __init__(self, **kwargs): 
     366        AbstractGML.__init__(self,**kwargs) 
    364367        elems=['boundedBy'] 
    365368        addelems(self,elems) 
    366         AbstractGML.__init__(self,**kwargs) 
    367369        #this pattern works but can only accept EnvelopeWithTimePeriod for the boundedBy, 
    368370        #which is probably ok     
     
    384386class AggregatedArray(ArrayDescriptor,csElement): 
    385387    def __init__(self, **kwargs): 
     388        ArrayDescriptor.__init__(self,**kwargs) 
    386389        elems=['aggType', 'aggIndex', 'components'] 
    387390        addelems(self,elems) 
    388         ArrayDescriptor.__init__(self,**kwargs) 
    389391        children={elems[0]:[CSML('aggType'),'csString'], elems[1]:[CSML('aggIndex'),'csString'],elems[2]:[FILEFORMATS, 'ArrayDescriptor',CSML('component')]} 
    390392        addchildren(self,children) 
     
    393395class MeasureOrNullList(AbstractGML,csElement): 
    394396    def __init__(self, **kwargs): 
     397        AbstractGML.__init__(self,**kwargs) 
    395398        elems=['__insertedExtract']  # should this be here ? check 
    396399        addelems(self,elems) 
    397         AbstractGML.__init__(self,**kwargs) 
    398400        #note __insertedExtract is used in resolving xlinks and shouldn't be written to directly (except by the code which handles the xlink resolutions) 
    399401        children={elems[0]:[FILEFORMATS,'FileExtract',CSML('__insertedExtract')]} 
     
    406408class CompositeValue(AbstractGML,csElement): 
    407409    def __init__(self, **kwargs): 
     410        AbstractGML.__init__(self,**kwargs) 
    408411        elems=['measures'] 
    409412        addelems(self,elems) 
    410         AbstractGML.__init__(self,**kwargs) 
    411413        children={elems[0]:[GML('measure'),'csString',GML('valueComponents')]} 
    412414        addchildren(self,children) 
     
    416418    #THIS IS INCOMPLETE  
    417419    def __init__(self, **kwargs): 
     420        AbstractGML.__init__(self,**kwargs) 
    418421        elems=['doubleOrNullTupleList','rangeParameters'] 
    419422        addelems(self,elems) 
    420         AbstractGML.__init__(self,**kwargs) 
    421423        children={elems[0]:[GML('doubleOrNullTupleList'),'csString'],elems[1]:[GML('CompositeValue'), 'CompositeValue', GML('rangeParameters')]} 
    422424        addchildren(self,children) 
     
    425427class ValueComponent(AbstractGML, AssociationAttributeGroup, csElement): 
    426428    def __init__(self, **kwargs): 
     429        AbstractGML.__init__(self,**kwargs) 
     430        AssociationAttributeGroup.__init__(self,**kwargs) 
    427431        elems=['quantityList'] 
    428432        addelems(self,elems) 
    429         AbstractGML.__init__(self,**kwargs) 
    430         AssociationAttributeGroup.__init__(self,**kwargs) 
    431433        children=children={elems[0]:[GML('QuantityList'), 'MeasureOrNullList']} 
    432434        addchildren(self,children) 
     
    435437class ValueArray(AbstractGML, csElement): 
    436438    def __init__(self, **kwargs): 
     439        AbstractGML.__init__(self,**kwargs) 
    437440        elems=['valueComponent'] 
    438441        addelems(self,elems) 
    439         AbstractGML.__init__(self,**kwargs) 
    440442        #this is a bit of a diversion from the object/property pattern but is necessary to  
    441443        #make valueComponent a class so valueComponent can have xlink attributes 
     
    733735class GridSeriesCoverage(AbstractDiscreteCoverage,csElement): 
    734736    def __init__(self, **kwargs): 
     737        elems=['gridSeriesDomain', 'rangeSet', 'coverageFunction'] 
     738        addelems(self,elems) 
     739        children={elems[0]:[CSML('GridSeriesDomain'),'GridSeriesDomain' ,CSML('gridSeriesDomain') ], elems[1]:[GML('rangeSet'), 'RangeSet'],elems[2]:[GML('coverageFunction'),'csString']} 
     740        addchildren(self,children) 
    735741        AbstractDiscreteCoverage.__init__(self,**kwargs) 
    736         elems=['gridSeriesDomain', 'rangeSet', 'coverageFunction'] 
    737         addelems(self,elems) 
    738         children={elems[0]:[CSML('GridSeriesDomain'),'GridSeriesDomain' ,CSML('gridSeriesDomain') ], elems[1]:[GML('rangeSet'), 'RangeSet'],elems[2]:[GML('coverageFunction'),'csString']} 
    739         addchildren(self,children) 
    740742        csElement.__init__(self,**kwargs) 
    741743 
     
    796798class GridSeriesFeature(AbstractFeature, csElement): 
    797799    def __init__(self, **kwargs): 
    798         AbstractFeature.__init__(self,**kwargs) 
    799800        elems=['value','parameter'] 
    800801        addelems(self,elems) 
    801         children={elems[0]:[CSML('GridSeriesCoverage'), 'GridSeriesCoverage', CSML('value')],elems[0]:[CSML('parameter'), 'Phenomenon']} 
    802         addchildren(self,children) 
     802        children={elems[0]:[CSML('GridSeriesCoverage'), 'GridSeriesCoverage', CSML('value')],elems[1]:[CSML('parameter'), 'Phenomenon']} 
     803        addchildren(self,children) 
     804        AbstractFeature.__init__(self,**kwargs) 
    803805        csElement.__init__(self,**kwargs) 
    804806 
     
    878880class FileList(AssociationAttributeGroup,AbstractGML,csElement): 
    879881    def __init__(self,**kwargs): 
     882        elems=['fileNames'] 
     883        addelems(self,elems) 
    880884        AssociationAttributeGroup.__init__(self,**kwargs) 
    881885        AbstractGML.__init__(self,**kwargs) 
    882         elems=['fileNames'] 
    883         addelems(self,elems) 
    884886        addatts(self,[]) 
    885887        children= {elems[0]:[CSML('fileNames'), 'csString']} 
     
    990992        a=[CSML('id')] 
    991993        addatts(self,a) 
    992         elems=['featureCollection','storageDescriptor'] 
    993         addelems(self,elems) 
    994         children = {elems[0]:[CSML('CSMLFeatureCollection') ,'CSMLFeatureCollection'],elems[1]:[CSML('CSMLStorageDescriptor'), 'CSMLStorageDescriptor']} 
     994        elems=['storageDescriptor','featureCollection',] 
     995        addelems(self,elems) 
     996        children = {elems[1]:[CSML('CSMLFeatureCollection') ,'CSMLFeatureCollection'],elems[0]:[CSML('CSMLStorageDescriptor'), 'CSMLStorageDescriptor']} 
    995997        addchildren(self,children) 
    996998        csElement.__init__(self,**kwargs) 
     
    10251027    ds.fromXML(tree.getroot()) 
    10261028    csmltree=ds.toXML() 
    1027     #print csmltree 
    10281029     
    10291030    csmlout=parser_extra.PrettyPrint(csmltree) 
Note: See TracChangeset for help on using the changeset viewer.