Changeset 938 for TI07-MOLES/trunk


Ignore:
Timestamp:
17/05/06 12:27:36 (13 years ago)
Author:
lawrence
Message:

First code to support a GUI for python based searching through the
discovery WS interface. Includes some refactoring of the browse code
to support multiple entities (i.e. DIF etc). (NB: browse still
wont work properly until we get the security stuff working ok).

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

Legend:

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

    r911 r938  
    1 class ServiceBinding: 
     1class Service: 
     2    def __init__(self): 
     3        self.name='' 
     4        self.url='' 
     5        self.description='' 
     6 
     7class ServiceBinding (Service): 
    28        ''' Handles all service binding issues ''' 
    39        #very temporary code 
    410        def __init__(self,s,e,n='URL'): 
     11                Service.__init__(self) 
    512                if s=='A': 
    613                        service='ANotYetConfigured' 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/Utilities.py

    r853 r938  
    22import ConfigParser 
    33import os 
     4import re 
     5 
     6def cleanup(string): 
     7    '''This is a hack to make sure that xml doesn't contain any naughty & characters alone''' 
     8    #match ? but not (?! if it's followed by alphanumeric \w characters + and a semicolon ; 
     9    return re.sub(r'&(?!\w+;)', '&', string) 
    410 
    511class myConfig: 
     
    8793                result+='</%s>'%(elem.tag) 
    8894        return result 
     95if __name__=="__main__": 
     96    print cleanup('<abcd&efg>') 
     97    print cleanup('<abcd&amp;efg>') 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/browseCGI.py

    r935 r938  
    126126                        # we need to evaluate them 
    127127                        access=self.session.ndgGate.check(self.b.constraints.SimpleCondition) 
    128                         #access=self.b.constraints.status 
    129128                    else: 
    130129                        access=1 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/renderEntity.py

    r935 r938  
    2323        if entity.type=='dgDataEntity': 
    2424                relatedHTML=renderGranules(entity)+relatedHTML 
     25        elif entity.type=='DIF': 
     26                relatedHTML=renderDataLinks(entity)+relatedHTML 
    2527 
    2628        html=''' 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/stubB.py

    r935 r938  
    1010from ServiceBinding import * 
    1111from secure import AccessControl 
    12          
    13 class Name: 
    14         ''' Handles the name type ''' 
    15         def __init__(self,element): 
    16                 if element is None: 
    17                         self.name='' 
    18                         return 
    19                 if wrapGetText(element,'nameOrder')=='L2R': 
    20                         o=('title','initials','familyName') 
    21                 else: 
    22                         o=('title','familyName','personalName') 
    23                 self.name='' 
    24                 for i in o: self.name+=' '+ wrapGetText(element,i) 
    25         def __str__(self): 
    26                 return self.name 
    27          
    28 class dgContact: 
    29         '''A simple summary of contact information for an organisation or a person ''' 
    30         #want to contract organisations and people into one simple type here ... 
    31         #This is moles 1.2.3 ... hopefully we can improve this ... 
    32         def __init__(self,element,ctype='org'): 
    33                 ''' Instantiate a MOLES person element ''' 
    34                 self.elem=element 
    35                 if self.elem is None: return 
    36                 self.data={} 
    37                 self.data['name']=Name(self.elem.find('dgRoleHolder/dgPerson/name')) 
    38                 if ctype=='org': 
    39                         base='dgRoleHolder/dgOrganisation/' 
    40                 else: 
    41                         base='dgRoleHolder/dgPerson/' 
    42                 self.data['org']=wrapGetText(self.elem,base+'name') 
    43                 self.data['email']=wrapGetText(self.elem,base+'contactDetails/eMail') 
    44                 self.data['phone']=wrapGetText(self.elem,'contactDetails/telephone') 
    45                 self.data['url']=wrapGetText(self.elem,'contactDetails/URI') 
    46         def toHTML(self): 
    47                 ''' Convert to simple HTML ''' 
    48                 labels={'name':'','org':'Organisation: ','email':'Email: ','phone':'Phone: '} 
    49                 html='<p>' 
    50                 for item in ('name','org','email','phone'): 
    51                         if str(item) !='': html+='%s%s%s'%(labels[item],self.data[item],'<br/>') 
    52                 html+='</p>' 
    53                 return html 
    54                  
    55 class Bounding: 
    56         ''' Separated out because this may change with versions ''' 
    57         def __init__(self,elem): 
    58                 '''Parse a data entity and load a bounding box ''' 
    59                 North=wrapGetText(elem, 
    60                         'dgDataSummary/dgDataCoverage/dgSpatialCoverage/BoundingBox/LimitNorth') 
    61                 South=wrapGetText(elem, 
    62                         'dgDataSummary/dgDataCoverage/dgSpatialCoverage/BoundingBox/LimitSouth') 
    63                 West=wrapGetText(elem, 
    64                         'dgDataSummary/dgDataCoverage/dgSpatialCoverage/BoundingBox/LimitWest') 
    65                 East=wrapGetText(elem, 
    66                         'dgDataSummary/dgDataCoverage/dgSpatialCoverage/BoundingBox/LimitEast') 
    67                 try: 
    68                         self.box=[float(i) for i in [North, South,West, East]] 
    69                 except: 
    70                         self.box=None 
    71         def toHTML(self): 
    72                 if self.box is not None: 
    73                         html='''<p> 
    74                                 Limit North: %s <br/> 
    75                                 Limit South: %s <br/> 
    76                                 Limit West: %s <br/> 
    77                                 Limit East: %s <br/>     
    78                                 </p>'''%self.box 
    79                 else: 
    80                         html='No bounding box available' 
    81                 return html      
    82                  
    83                  
     12from geoUtilities import Bounding 
     13from People import * 
     14 
    8415class dataGranule: 
    8516        ''' Provides support for data granule structures ''' 
     
    9526                self.elem=element 
    9627                #just one curator 
    97                 self.curator=dgContact(self.elem.find('dgDataRoles/dgDataCurator'),ctype='org') 
     28                self.curator=dgContact(self.elem.find('dgDataRoles/dgDataCurator'),ctype='organisation') 
    9829                #possibly multiple creators 
    9930                self.creators=[dgContact(i) for i in self.elem.findall('dgDataRoles/dgDataCreator')] 
     
    10233                self.getGranules() 
    10334                #bounding box, handled as a class because this is going to be difficult ... 
    104                 self.bbox=Bounding(self.elem) 
     35                self.bbox=Bounding(self.elem,entity='stubB') 
    10536                self.temporal() 
    10637                #parameters 
Note: See TracChangeset for help on using the changeset viewer.