Changeset 845 for TI07-MOLES/trunk


Ignore:
Timestamp:
27/04/06 12:47:55 (13 years ago)
Author:
lawrence
Message:

More refactoring in browse

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

Legend:

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

    r842 r845  
    55import cgi 
    66#import cgitb;ctitb.enable() 
     7 
    78import os 
    8 import ConfigParser 
    99import ElementTree as ET 
     10 
    1011from insecure import * 
    11 from collections import deque # python 2.4 
    1212from secure import * 
    1313from stubB import * 
     14 
    1415from renderEntity import renderEntity 
    1516from renderPage import renderPage 
    16 from Response import * 
     17from Utilities import * 
     18 
    1719import Cookie 
    18  
    19  
    20 class myConfig: 
    21         ''' Handle missing sections and variables in a config file a bit gracefully ''' 
    22         def __init__(self,configfile): 
    23                 self.config=ConfigParser.ConfigParser() 
    24                 if not os.path.exists(configfile): 
    25                         raise 'No config file' 
    26                 self.config.read(configfile) 
    27                 logfile=self.get('logging','debugLog',None) 
    28                 self.logfile=None 
    29                 if logfile is not None: 
    30                         self.logfile=open(logfile,'a') 
    31  
    32         def get(self,section,key,default=None): 
    33                 try: 
    34                         return self.config.get(section,key) 
    35                 except: 
    36                         return default 
    37          
    38         def log(self,string): 
    39                 self.logfile.write(string+'\n') 
    40  
    41 def EvaluateCredentials(ac,securityMetadata): 
    42         ''' Take Moles security metadata and compare with attribute certificate ''' 
    43         return 1 
    44  
    45 class RingBuffer(deque): 
    46     #deque is a python 2.4 class! 
    47     #credit http://www.onlamp.com/pub/a/python/excerpt/pythonckbk_chap1/index1.html 
    48     def __init__(self, size_max): 
    49         deque.__init__(self) 
    50         self.size_max = size_max 
    51     def append(self, datum): 
    52         deque.append(self, datum) 
    53         if len(self) > self.size_max: 
    54             self.popleft( ) 
    55     def tolist(self): 
    56         return list(self) 
    5720 
    5821class BrowseSession: 
     
    154117                 
    155118                if self.b.xml is not None: 
    156                         self.session.addToHistory(self.b.Burl,self.b.name) 
     119                        self.session.addToHistory(self.b.Burl,self.b.abbreviation) 
    157120                        self.response.cookie=self.session.makeCookie() 
    158                         if EvaluateCredentials(self.ac,self.uri): 
    159                                 #we can show the user the page 
    160                                 #parsedHTML=self.b.toHTML() 
    161                                 #bodge in the history list 
     121                        if  self.b.constraints: 
     122                                # we need to evaluate them 
     123                                #access=self.session.ndgGate.check(self.b.constraints) 
     124                                access=1 
     125                        else: 
     126                                access=1 
     127                        if access: 
    162128                                content=self.b.toHTML() 
    163129                        else: 
    164                                 content=self.error('Not Allowed') 
     130                                content=self.error('No access to Secure Metadata') 
    165131                else: 
    166132                        content=self.error('URI not available in database') 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/stubB.py

    r842 r845  
    77import ElementTree as ET 
    88from renderEntity import renderEntity 
    9  
    10 def wrapGetText(element,xpathExpression,multiple=0): 
    11         ''' Wraps a call to ET to get a text object in an error handler ''' 
    12         if multiple: 
    13                 r=element.findall(xpathExpression) 
    14         else: 
    15                 r=[element.find(xpathExpression),] 
    16         try: 
    17                 rr=[i.text for i in r] 
    18         except: 
    19                 rr=['',] 
    20         if multiple:  
    21                 return rr 
    22         else: return rr[0]  
     9from Utilities import * 
     10         
     11def  AccessControl(elem): 
     12        return None 
    2313         
    2414class Name: 
     
    9383                 
    9484                 
    95 class AccessControl: 
    96         def __init__(self,elementt): 
    97                 pass 
    98          
    99 class dataGranule(AccessControl): 
     85class dataGranule: 
    10086        ''' 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 
     87        def __init__(self,elem): 
     88                self.elem=elem 
     89                self.constraints=AccessControl(elem.find('accessControlPolicy')) 
     90        def bind2Aservice(self,host,service,elem): 
     91                #dummy for now 
     92                return 'Alink' 
    11493         
    11594class DataEntity: 
     
    123102                host,service = '','' # dummy for now 
    124103                #possibly multiple granules 
    125                 self.granules=[self.bind2Aservice(host,service,i) for i in self.elem.findall('dgDataGranule')] 
     104                self.getGranules() 
    126105                #bounding box, handled as a class because this is going to be difficult ... 
    127106                self.bbox=Bounding(self.elem) 
     
    132111        def getGranules(self): 
    133112                ''' Load up the granule content within the entity ''' 
    134                 granList=self.elem.findall('dgGranule') 
     113                granList=self.elem.findall('dgDataGranule') 
    135114                self.granules=[] 
    136115                for item in granList: 
     
    151130                        except: 
    152131                                self.timeCoverage='No time information' 
    153                  
    154         def bind2Aservice(self,host,service,elem): 
    155                 #dummy for now 
    156                 return 'Alink' 
    157132 
    158 class stubB(DataEntity,AccessControl): 
     133 
     134class stubB(DataEntity): 
    159135         
    160136        ''' Holds the stub-b document and provides methods which get and manipulate it ''' 
     
    179155                        return 
    180156                 
     157                self.constraints=AccessControl(self.tree.find('dgMetadataRecord/dgMetadataSecurity')) 
     158                self.related=[] 
     159                 
    181160                #note that the root of the ElementTree instance is dgMetadataRecord 
    182161                #so we don't need (or want) that in our xpath expressions. 
    183162                host='' #bodge 
    184163                #this long ifelif sequence needs to go out of moles ... 
     164                self.abbreviation=wrapGetText(self.tree,'abbreviation') 
    185165                elem=self.tree.find('dgDataEntity') 
    186166                if elem is not None: 
     
    189169                        self.others=('activity','observationstation','dataproductiontool') 
    190170                elem=self.tree.find('dgActivity') 
     171                 
    191172                if elem is not None: 
    192173                        self.type='dgActivity' 
     
    206187                 
    207188                # now go get all the related links 
    208                 self.related=[] 
     189                 
    209190                for related in self.tree.findall(self.type+'/RelatedDeployment'): 
    210191                        deployment=['empty',[]]  #something should eventually go in the empty slot ... 
     
    231212         
    232213        def toHTML(self): 
    233                 x=self.makeHTML(self) 
    234                 return x 
     214                if self.tree is not None: 
     215                        return self.makeHTML(self) 
     216                else: 
     217                        return 'No Valid Stub-B' 
    235218         
    236219if __name__=="__main__": 
Note: See TracChangeset for help on using the changeset viewer.