Changeset 842


Ignore:
Timestamp:
27/04/06 08:33:26 (13 years ago)
Author:
lawrence
Message:

Some slight refactoring, and more scaffolding for getting
credential requirements from stub-b

Location:
TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/browseCGI.py

    r828 r842  
    5757 
    5858class BrowseSession: 
    59         ''' Holds the browse history and contact details for the NDG session manager ''' 
     59         
     60        ''' Holds the browse history and contact details for the NDG session manager, designed 
     61        to work with the discovery portal as well ''' 
     62         
    6063        def __init__(self,cookie,url,config): 
    61                 '''Instantiate and get security environment''' 
    62                 # we should have two cookies, the NDG security cookie, and our browse history cookie! 
     64                 
     65                '''Instantiate with an unsecured browse session (security only 
     66                required if a secure resource is the target) ''' 
    6367                self.config=config 
     68                self.rawCookie=cookie 
    6469                self.cookie=Cookie.SimpleCookie(cookie) 
    6570                self.history=RingBuffer(10) 
    66                 self.ndgGate=gateway2NDGsession(cookie,url,config) 
    6771                self.__loadBrowseHistory() 
     72         
     73        def makeGateway(self): 
     74                ''' Make connection to NDG security ''' 
     75                self.ndgGate=gateway2NDGsession(self.rawCookie,self.config) 
    6876         
    6977        def __toXML(self): 
     
    7785        def __loadBrowseHistory(self): 
    7886                ''' get the string of URI values out of the cookie (if it's there)''' 
    79                 #try: 
    80                 self.tree=ET.fromstring(self.cookie['BrowseHistory'].value) 
    81                 for item in self.tree: 
    82                         self.addToHistory(item.find('u').text,item.find('n').text) 
    83                 #except: 
    84                 #       pass 
    85         def addToHistory(self,uri,name): 
     87                try: 
     88                        self.tree=ET.fromstring(self.cookie['BrowseHistory'].value) 
     89                        for item in self.tree: 
     90                                self.addToHistory(item.find('u').text,item.find('n').text,ignore=True) 
     91                except: 
     92                        pass 
     93        def addToHistory(self,uri,name,ignore=False): 
    8694                ''' Add a URI to the session history''' 
    87                 self.history.append((uri,name)) 
     95                if not ignore: 
     96                        current=self.getHistory() 
     97                        if (uri,name) not in current: 
     98                                self.history.append((uri,name)) 
     99                else: 
     100                        self.history.append((uri,name)) 
    88101        def getHistory(self): 
    89102                ''' Return a list of the items in the history ''' 
     
    133146                #Handle authorisation 
    134147                self.ac=self.session.getCredentials() 
    135          
    136                 self.b=stubB(self.uri) 
     148                 
     149                #get the xml document 
     150                xml=insecureGetDoc(self.uri) 
     151                 
     152                #create stub-b instance 
     153                self.b=stubB(xml,makeHTML=renderEntity) 
     154                 
    137155                if self.b.xml is not None: 
    138156                        self.session.addToHistory(self.b.Burl,self.b.name) 
     
    142160                                #parsedHTML=self.b.toHTML() 
    143161                                #bodge in the history list 
    144                                 content=renderEntity(self.b) 
     162                                content=self.b.toHTML() 
    145163                        else: 
    146164                                content=self.error('Not Allowed') 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/stubB.py

    r828 r842  
    66#  
    77import ElementTree as ET 
    8 from insecure import * 
     8from renderEntity import renderEntity 
    99 
    1010def wrapGetText(element,xpathExpression,multiple=0): 
     
    9191                        html='No bounding box available' 
    9292                return html      
     93                 
     94                 
     95class AccessControl: 
     96        def __init__(self,elementt): 
     97                pass 
     98         
     99class dataGranule(AccessControl): 
     100        ''' Provides support for data granule structures ''' 
     101        def __init__(self,item): 
     102                pass 
     103                 
     104        def getSecurityDetails(self): 
     105                '''Obtain the roles a1nd attribute authority address''' 
     106                #issue an xquery on the stub-b 
     107                #parse for roles 
     108                #parse for AA WSDL 
     109                #tree=ElementTree.fromstring(self.xml) 
     110                #sec=tree.findall('//ndgSecurity') 
     111                roles=[] 
     112                AAaddress='' 
     113                return roles, AAaddress 
    93114         
    94115class DataEntity: 
     
    109130                self.parameters=wrapGetText(self.elem,'dgDataSummary/dgParameterSummary/ParameterName',multiple=1) 
    110131                 
     132        def getGranules(self): 
     133                ''' Load up the granule content within the entity ''' 
     134                granList=self.elem.findall('dgGranule') 
     135                self.granules=[] 
     136                for item in granList: 
     137                        self.granules.append(dataGranule(item)) 
     138                 
    111139        def temporal(self): 
    112140                '''Instantiate the timeCoverage attribute by parsing for temporal coverage ''' 
     
    128156                return 'Alink' 
    129157 
    130 class stubB(DataEntity): 
     158class stubB(DataEntity,AccessControl): 
     159         
    131160        ''' Holds the stub-b document and provides methods which get and manipulate it ''' 
    132         def __init__(self,uri,xsltMethod='JavaXalan'): 
    133                 '''Instantiate by getting URI from exist database''' 
    134                 self.xsltMethod=xsltMethod 
     161         
     162        def __init__(self,xml,makeHTML=None): 
     163                 
     164                '''Instantiate by parsing an xml document passed in as a string ''' 
     165                 
     166                self.makeHTML=makeHTML 
    135167                self.metadataType='stubB' 
    136168                self.labels={'activity':'Activity ','observationstation':'Observation Station ', 
    137169                                        'dataproductiontool':'Data Production Tool ','dgDataEntity':'Data Entity '} 
     170                 
    138171                try: 
    139                         if xsltMethod=='JavaXalan': 
    140                                 self.xml=insecureGetDoc(uri) 
    141                                 if self.xml is not None: 
    142                                         self.tree=ET.fromstring(self.xml) 
    143                         else: 
    144                                 self.tree=ET.parse(uri).getroot() 
    145                                 self.xml=ET.tostring(self.tree) 
     172                        self.xml=xml 
     173                        self.tree=ET.fromstring(self.xml) 
    146174                        self.name=wrapGetText(self.tree,'name') 
    147175                except: 
     
    149177                        self.tree=None 
    150178                        self.name='Not Found' 
    151                          
    152                 if self.xml is None: return 
     179                        return 
     180                 
    153181                #note that the root of the ElementTree instance is dgMetadataRecord 
    154182                #so we don't need (or want) that in our xpath expressions. 
     
    202230                        return 'No link' 
    203231         
    204         def getSecurityDetails(self): 
    205                 '''Obtain the roles a1nd attribute authority address''' 
    206                 #issue an xquery on the stub-b 
    207                 #parse for roles 
    208                 #parse for AA WSDL 
    209                 #tree=ElementTree.fromstring(self.xml) 
    210                 #sec=tree.findall('//ndgSecurity') 
    211                 roles=[] 
    212                 AAaddress='' 
    213                 return roles, AAaddress 
    214          
    215232        def toHTML(self): 
    216                 x=doXSLT(self.xml,xsltMethod=self.xsltMethod) 
     233                x=self.makeHTML(self) 
    217234                return x 
    218235         
    219236if __name__=="__main__": 
    220         x=stubB('../../exampleB/methyl.example.xml',xsltMethod='local') 
    221         for d in  x.related:print d 
    222         print x.name 
    223         print x.parameters 
    224         print x.timeCoverage 
    225         print x.bbox.toHTML() 
    226         print x.curator.toHTML() 
    227         for item in x.creators: print item.toHTML() 
     237         
     238        xml=open("../../exampleB/methyl.example.xml",'r').read() 
     239        x=stubB(xml,makeHTML=renderEntity) 
     240        print x.toHTML() 
Note: See TracChangeset for help on using the changeset viewer.