Ignore:
Timestamp:
04/09/08 14:47:54 (11 years ago)
Author:
cbyrom
Message:

Simplify code structuring + add logging.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/discovery.py

    r4174 r4176  
    77from ows_server.lib.Date import * 
    88from ows_server.templates import DiscoveryTemplate 
    9 from ndgUtils import ndgSearch as NS 
    10 from ndgUtils import DocumentRetrieve as DR 
     9from ndgUtils import ndgSearch 
     10from ndgUtils import DocumentRetrieve 
    1111from ndgUtils.DocumentRetrieve import ndgVocabPOX as VS 
    1212from ndgUtils import ndgObject 
     
    1515from ows_server.lib.mailer import mailHandler 
    1616from ndgUtils.xmlHandler2 import xmlHandler 
     17import logging 
     18 
     19logging.basicConfig(level=logging.DEBUG, 
     20   format='%(asctime)s %(filename)s:%(lineno)d %(levelname)s %(message)s') 
     21 
    1722debug=0 
    1823 
     
    2328        ''' Common setup for controller methods ''' 
    2429        self.cf=request.environ['ndgConfig'] 
    25         self.exist=(self.cf.get('NDG_EXIST','local'),self.cf.get('NDG_EXIST','passwordFile')) 
     30        self.exist=(self.cf.get('NDG_EXIST','local'),\ 
     31                    self.cf.get('NDG_EXIST','passwordFile')) 
    2632        self.inputs=dict(parse_querystring(request.environ)) 
    2733        self.message='' 
     
    132138        in the <textTarget> where the accepted text target values are controlled 
    133139        by the DiscoveryTemplate GUI, and are: All, Authors, Parameters ''' 
    134          
     140        logging.info("'doText' invoke with string, '%s'" %searchString) 
    135141        start,howmany=int(start),int(howmany)  # url arguments need conversion ... 
    136142         
    137143        if self.inputs['searchTarget']=='Discovery': 
    138             ws=NS(logger=logger) 
     144            logging.info(" - use Discovery service to complete search") 
     145            ws=ndgSearch() 
    139146        elif self.inputs['searchTarget'] in ['Browse','NumSim']: 
    140             ws=DR(self.exist[0],pwfile=self.exist[1]) 
     147            logging.info(" - use Browse service to complete search") 
     148            ws=DocumentRetrieve(self.exist[0],pwfile=self.exist[1]) 
    141149            #overriding text target which is ignored currently ... yuck ... 
    142150            textTarget=self.inputs['searchTarget'] 
    143151            if textTarget=='Browse':textTarget='ndg_B_metadata' 
    144152        else: 
     153            logging.error("Unrecognised search type, '%s'" \ 
     154                          %self.inputs['searchTarget']) 
    145155            c.xml='Unknown searchTarget %s'%self.inputs['searchTarget'] 
    146156            return render('error') 
     
    169179            return render('error') 
    170180             
     181        logging.info("'doText()' returned - now processing results") 
    171182        if ws.error !=None: 
     183            logging.error("Error encountered whilst running search: %s" %ws.error) 
    172184            m='' 
    173185            for i in ws.error:m+='<p>%s</p>'%i 
     
    176188         
    177189        #build constraints info for report 
    178         searchConstraints=self.__buildconstraints(dateRange,bbox,scope,searchString,geoSearch) 
     190        searchConstraints=self.__buildconstraints(dateRange,bbox,scope,\ 
     191                                                  searchString,geoSearch) 
    179192         
    180193        hits=ws.hits 
     194        if hits==0: 
     195            outMessage = 'No records found [%s]' %c.state.constraints 
     196            logging.info(outMessage)  
     197            c.xml='<p>' + outMessage + '</p>' 
     198            return render('content') 
     199         
    181200        id=ws.serverSessionID 
    182201         
    183         if hits<howmany:howmany=hits 
    184          
    185         c.state=DiscoveryState(id,searchString,request.environ,hits,searchConstraints,start,howmany) 
     202        if hits < howmany: 
     203            howmany = hits 
     204         
     205        # DiscoveryState object is a wrapper to the various search config 
     206        # variables 
     207        c.state=DiscoveryState(id,searchString,request.environ,\ 
     208                               hits,searchConstraints,start,howmany) 
    186209        c.querystring=request.environ['QUERY_STRING'] 
    187          
    188         if hits==0:  
    189             c.xml='<p>No records found [%s]</p>'%c.state.constraints 
    190             return render('content') 
    191210      
    192211        try: 
     
    195214            else: 
    196215                return self.moreSearch(ws) 
     216 
     217            if results==[]: 
     218                c.xml='<p> No results for "%s"!</p>'%searchString 
     219                return render('content') 
     220 
    197221            difs=[] 
    198222            errors=[] 
    199223            for result in results:  
    200                 obj=ndgObject(result[0]) 
    201                 obj.setConfig(self.cf) 
     224                obj=ndgObject(result[0], config = self.cf) 
    202225                try: 
    203226                    difs.append(DIF(result[1],ndgObj=obj)) 
    204227                except ValueError,e: 
    205228                    errors.append((result[0],str(e))) 
    206             if results==[]: 
    207                 c.xml='<p> No results for "%s"!</p>'%searchString 
    208                 return render('content') 
    209             elif difs==[]: 
     229 
     230            if difs==[]: 
    210231                c.xml='<p>No usable results for "%s"!</p>'%searchString 
    211232                return render('content') 
    212             else: 
    213                 if errors<>[]: 
    214                     c.xml='<p>Search results for "%s"'%searchString 
    215                     dp=[] 
    216                     for e in errors: 
    217                         n=ndgObject(e[0]) 
    218                         if n.repository not in dp: dp.append(n.repository) 
    219                     if len(dp)<>1:  
    220                         dp='[Various Data Providers]' 
    221                     else: 
    222                         dp='[%s]'%dp[0]  
    223                     c.xml+=' (unfortunately %s hits matched unformattable documents from %s, an internal error has been logged):</p>'%(len(errors),dp) 
    224                     status,message=mailHandler(['b.n.lawrence@rl.ac.uk'],'DIF errors',str(errors), 
    225                                     server=self.cf.get('DEFAULT','mailserver')) 
    226                     if not status: 
    227                         c.xml+='<p> Actually, not even an internal error has been logged. <br/>' 
    228                         c.xml+='Internal sending of mail failed with error [%s]</p>'%message 
    229                     return render('content') 
    230                  
    231                  
     233            elif errors: 
     234                c.xml='<p>Search results for "%s"'%searchString 
     235                dp=[] 
     236                for e in errors: 
     237                    n=ndgObject(e[0]) 
     238                    if n.repository not in dp: dp.append(n.repository) 
     239                if len(dp)<>1:  
     240                    dp='[Various Data Providers]' 
     241                else: 
     242                    dp='[%s]'%dp[0]  
     243                c.xml+=' (unfortunately %s hits matched unformattable documents from %s, an internal error has been logged):</p>'%(len(errors),dp) 
     244                status,message=mailHandler(['b.n.lawrence@rl.ac.uk'],'DIF errors',str(errors), 
     245                                server=self.cf.get('DEFAULT','mailserver')) 
     246                if not status: 
     247                    c.xml+='<p> Actually, not even an internal error has been logged. <br/>' 
     248                    c.xml+='Internal sending of mail failed with error [%s]</p>'%message 
     249                return render('content') 
     250            else: 
    232251                c.difs=difs 
    233252                 
Note: See TracChangeset for help on using the changeset viewer.