Changeset 2409


Ignore:
Timestamp:
16/04/07 15:27:48 (12 years ago)
Author:
domlowe
Message:

fixes to object property pattern and validation errors. last commit before new egg

Location:
TI02-CSML/trunk/csml
Files:
6 edited

Legend:

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

    r2395 r2409  
    131131def _getTimeToFileRatio(feature,domain, timeName): 
    132132    if hasattr(feature.value.rangeSet, 'valueArray'): 
    133         if hasattr(feature.value.rangeSet.valueArray.valueComponent.quantityList, '__insertedExtract'): 
    134             numFiles= len( csmlutils.listify(feature.value.rangeSet.valueArray.valueComponent.quantityList.__insertedExtract.components)[0].fileList.fileNames.CONTENT.split()) 
     133        if hasattr(feature.value.rangeSet.valueArray.valueComponent, '__insertedExtract'): 
     134            numFiles= len( csmlutils.listify(feature.value.rangeSet.valueArray.valueComponent.__insertedExtract.components)[0].fileList.fileNames.CONTENT.split()) 
    135135            return len(domain[timeName])/numFiles 
    136136 
     
    181181    else: 
    182182        #dealing with aggregated array 
    183          componentlist = csmlutils.listify(value.rangeSet.valueArray.valueComponent.quantityList.__insertedExtract.components) 
     183         componentlist = csmlutils.listify(value.rangeSet.valueArray.valueComponent.__insertedExtract.components) 
    184184    for time in times: 
    185185        listPosition=domain[timeName].index(time) 
  • TI02-CSML/trunk/csml/API/ops_GridSeriesFeature.py

    r2405 r2409  
    109109    rs=csml.parser.RangeSet() 
    110110    va=csml.parser.ValueArray() 
    111     vc=csml.parser.ValueComponent() 
     111    vc=csml.parser.MeasureOrNullList() 
    112112    vc.href='#%s'%sdid 
    113113    vc.arcrole="http://ndg.nerc.ac.uk/xlinkUsage/insert#QuantityList" 
    114114    vc.role="http://ndg.nerc.ac.uk/fileFormat/csmlStorageDescriptor" 
    115115    vc.show='embed' 
    116     ql=csml.parser.MeasureOrNullList() 
    117116    try: 
    118         ql.uom=self.value.rangeSet.valueArray.valueComponent.quantityList.uom 
     117        vc.uom=self.value.rangeSet.valueArray.valueComponent.uom 
    119118    except: 
    120         ql.upm = 'unknown'  #TODO, 
    121     vc.quantityList=ql 
     119        vc.uom = 'unknown'  #TODO, 
    122120    va.valueComponent=vc 
    123121    va.id=csml.csmllibs.csmlextra.getRandomID() 
     
    161159    # define domain/coverage  to use in 'value' attribute    
    162160    newdomain=csml.parser.ProfileSeriesDomain() 
     161     
     162     
    163163    domainSubset, totalArraySize=csml.API.genSubset.subsetDomain(timeName,strTimes,self.domain, **kwargs) 
    164164    cTT=csml.API.genSubset.getCoordTransformTable(domainSubset, crs, frame)   
     
    185185    newdomain.srsDimension=2 
    186186    newdomain.dimension=2 
     187    env=csml.parser.GridEnvelope() 
     188    env.low=csml.parser.csString('0 0 0') #TODO 
     189    env.high=csml.parser.csString('0 0 0') 
     190    newdomain.limits=env 
     191    newdomain.aLabels=self.value.gridSeriesDomain.aLabels #todo   
    187192    rangeSet=csml.parser.RangeSet() 
    188     descriptor=csml.parser.NetCDFExtract(id=self.id,fileName=csml.parser.csString(pathToSubsetNetCDF),variableName=csml.parser.csString(self.id),arraySize=csml.parser.csString(totalArraySize)) 
    189     rangeSet.arrayDescriptor=csml.parser.NetCDFExtract(id=self.id,fileName=csml.parser.csString(pathToSubsetNetCDF),variableName=csml.parser.csString(self.id),arraySize=csml.parser.csString(totalArraySize)) 
    190      
    191     #gridseries coverage 
     193    descid=csml.csmllibs.csmlextra.getRandomID() 
     194    descriptor=csml.parser.NetCDFExtract(id=descid,fileName=csml.parser.csString(pathToSubsetNetCDF),variableName=csml.parser.csString(self.id),arraySize=csml.parser.csString(totalArraySize)) 
     195    rs=csml.parser.RangeSet() 
     196    va=csml.parser.ValueArray() 
     197    vc=csml.parser.MeasureOrNullList() 
     198    vc.href='#%s'%descid 
     199    vc.arcrole="http://ndg.nerc.ac.uk/xlinkUsage/insert#QuantityList" 
     200    vc.role="http://ndg.nerc.ac.uk/fileFormat/csmlStorageDescriptor" 
     201    vc.show='embed' 
     202    try: 
     203        vc.uom=self.value.rangeSet.valueArray.valueComponent.uom 
     204    except: 
     205        vc.uom = 'unknown'  #TODO, 
     206    va.valueComponent=vc 
     207    va.id=csml.csmllibs.csmlextra.getRandomID() 
     208    rs.valueArray=va 
     209    #profileseries coverage 
    192210    cvg=csml.parser.ProfileSeriesCoverage() 
    193211    cvg.id=csml.csmllibs.csmlextra.getRandomID() 
    194     cvg.rangeSet=rangeSet 
     212    cvg.rangeSet=rs 
    195213    cvg.profileSeriesDomain=newdomain     
    196214    csmlWrap=csml.csmllibs.csmlfeaturewrap.CSMLWrapper() 
  • TI02-CSML/trunk/csml/csmllibs/csmlextra.py

    r2405 r2409  
    88    #returns a random 8 character alphanumeric string that can be used as an internal identifier in a CSML document. 
    99    #the ID only needs to be unique within the document that it occurs, so this is sufficiently random 
    10     #to make a clash extremely unlikely. The string is alphanumeric but always begins with a letter.   
     10    #to make a clash extremely unlikely. The string is alphanumeric but always begins with an upper case letter.   
    1111    #Note: tested with 50000 ids and all were different 
    1212    randomID=random.choice(string.letters) 
     13    randomID=string.upper(randomID) 
    1314    for i in range(7): 
    1415        randomID=randomID+random.choice(string.letters+string.digits) 
  • TI02-CSML/trunk/csml/csmllibs/csmlfeaturetypes.py

    r2398 r2409  
    254254                setattr(self.ds_element, 'storageDescriptor',sd) 
    255255            va=csml.parser.ValueArray() 
    256             vc=csml.parser.ValueComponent() 
     256            vc=csml.parser.MeasureOrNullList() 
    257257            vc.href='#%s'%aa.id 
    258258            vc.arcrole="http://ndg.nerc.ac.uk/xlinkUsage/insert#QuantityList" 
    259259            vc.role="http://ndg.nerc.ac.uk/fileFormat/csmlStorageDescriptor" 
    260260            vc.show='embed' 
    261             ql=csml.parser.MeasureOrNullList() 
    262             ql.uom=strUom 
    263             vc.quantityList=ql 
     261            vc.uom=strUom 
    264262            va.valueComponent=vc 
    265263            va.id=csml.csmllibs.csmlextra.getRandomID() 
  • TI02-CSML/trunk/csml/parser.py

    r2400 r2409  
    394394        csElement.__init__(self,**kwargs) 
    395395#'component':[CSML:('component'), 'ArrayDescriptor', CSML('component')], 
    396 class MeasureOrNullList(AbstractGML,csElement): 
    397     def __init__(self, **kwargs): 
    398         AbstractGML.__init__(self,**kwargs) 
    399         elems=['__insertedExtract']  # should this be here ? check 
     396 
     397class MeasureOrNullList(AbstractGML,AssociationAttributeGroup, csElement): 
     398    def __init__(self, **kwargs): 
     399        AbstractGML.__init__(self,**kwargs) 
     400        AssociationAttributeGroup.__init__(self,**kwargs) 
     401        elems=['__insertedExtract'] 
    400402        addelems(self,elems) 
    401403        #note __insertedExtract is used in resolving xlinks and shouldn't be written to directly (except by the code which handles the xlink resolutions) 
     
    426428        csElement.__init__(self,**kwargs) 
    427429 
    428 class ValueComponent(AbstractGML, AssociationAttributeGroup, csElement): 
    429     def __init__(self, **kwargs): 
    430         AbstractGML.__init__(self,**kwargs) 
    431         AssociationAttributeGroup.__init__(self,**kwargs) 
    432         elems=['quantityList'] 
    433         addelems(self,elems) 
    434         children=children={elems[0]:[GML('QuantityList'), 'MeasureOrNullList']} 
    435         addchildren(self,children) 
    436         csElement.__init__(self,**kwargs) 
    437  
    438430class ValueArray(AbstractGML, csElement): 
    439431    def __init__(self, **kwargs): 
     
    441433        elems=['valueComponent'] 
    442434        addelems(self,elems) 
    443         #this is a bit of a diversion from the object/property pattern but is necessary to  
    444         #make valueComponent a class so valueComponent can have xlink attributes 
    445         children=children={elems[0]:[GML('valueComponent'), 'ValueComponent', ]} 
    446         addchildren(self,children) 
    447         csElement.__init__(self,**kwargs) 
    448          
     435        children=children={elems[0]:[GML('QuantityList'), 'MeasureOrNullList', GML('valueComponent')]} 
     436        addchildren(self,children) 
     437        csElement.__init__(self,**kwargs) 
     438         
     439    def toXML(self, csmlfrag, **kwargs): 
     440        csmlfrag=AbstractGML.toXML(self, csmlfrag,**kwargs) 
     441        #promote XLinks up from QuantityList 
     442        #this all done at the elementtree level 
     443         
     444        for frag in csmlfrag: 
     445            if frag.tag ==GML('valueComponent'): 
     446                try:         
     447                    frag.set(XLINK('href'),self.valueComponent.href)                                 
     448                    for subfrag in frag:     
     449                        del subfrag.attrib[XLINK('href')]                                                              
     450                except: 
     451                    pass 
     452                try:         
     453                    frag.set(XLINK('show'),self.valueComponent.show)                                 
     454                    for subfrag in frag:     
     455                        del subfrag.attrib[XLINK('show')]                                                              
     456                except: 
     457                    pass 
     458                try:         
     459                    frag.set(XLINK('role'),self.valueComponent.role)                                 
     460                    for subfrag in frag:     
     461                        del subfrag.attrib[XLINK('role')]                                                              
     462                except: 
     463                    pass 
     464                try:         
     465                    frag.set(XLINK('arcrole'),self.valueComponent.arcrole)                                 
     466                    for subfrag in frag:     
     467                        del subfrag.attrib[XLINK('arcrole')]                                                              
     468                except: 
     469                    pass 
     470        return csmlfrag 
     471                 
     472    def fromXML(self, csmlfrag):    
     473        #promote xlinks up a level to the  property element 
     474        for frag in csmlfrag: 
     475            if frag.tag == GML('valueComponent'):               
     476                for att in ['href', 'show', 'role', 'arcrole']: 
     477                    try:  
     478                        for subfrag in frag[:]: 
     479                            subfrag.set(XLINK(att),frag.attrib[XLINK(att)])      
     480                    except: 
     481                        pass 
     482        csElement.fromXML(self, csmlfrag)         
    449483 
    450484class RangeSet(AbstractGML,AssociationAttributeGroup,csElement): 
  • TI02-CSML/trunk/csml/parser_extra.py

    r2377 r2409  
    154154                        dataforQlist=self.__findSDmatch(vc.href[1:]) 
    155155                        if dataforQlist is not None: 
    156                             if not hasattr(vc, 'quantityList'): 
    157                                 setattr(vc, 'quantityList', csml.parser.MeasureOrNullList()) 
    158                             setattr(vc.quantityList, '__insertedExtract', dataforQlist) 
     156                            setattr(vc, '__insertedExtract', dataforQlist) 
    159157 
    160158        return self.dataset 
Note: See TracChangeset for help on using the changeset viewer.