Changeset 4998


Ignore:
Timestamp:
18/02/09 16:47:37 (11 years ago)
Author:
cbyrom
Message:

Improve handling and reporting of errors in document retrieval code.

Location:
MILK/trunk/milk_server/milk_server
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • MILK/trunk/milk_server/milk_server/controllers/atom_editor/atomeditorcontroller.py

    r4992 r4998  
    6161            c.xml='%s'%x 
    6262            response.status_code = code 
    63             raise SystemError('Problem experienced retrieving atom doc from eXist') 
     63            raise SystemError('Problem experienced retrieving atom doc from eXist [%s]' %x) 
    6464 
    6565        # NB, passing in the inputs will overwrite any original values with the 
  • MILK/trunk/milk_server/milk_server/controllers/browse/retrieve.py

    r4992 r4998  
    4949        logging.info("RetrieveController set up") 
    5050        return 0 
     51 
    5152        
    5253    def index(self,uri): 
     
    6566            response.write(c.xml) 
    6667        else: 
    67             e=404 
     68            e = 404 
    6869            if x.startswith('<p> Access'):  
    69                 e=401 
     70                e = 401 
    7071            response.status_code = e 
    7172            return render('error') 
     
    160161             
    161162        interface = ndgInterface() 
    162         #(the return object x is an ET object) 
    163         status,x=interface.GetXML(uri,outputSchema=self.outputSchema, useCache=useCache) 
     163        status,x = interface.GetXML(uri, outputSchema=self.outputSchema,  
     164                                    useCache=useCache) 
    164165        c.title='Viewing [%s]'%self.uri 
    165166         
     
    214215            elif viewFormat == ndgObject.MOLES_DOC_TYPE: 
    215216                renderTemplate = 'browse/stubB' 
    216                 c.doc=stubB.stubB(x, self.cf) 
     217                c.doc=stubB.stubB(ET.fromstring(x), self.cf) 
    217218                name=c.doc.abbreviation 
    218219                 
     
    221222                name=self.uri.localID 
    222223                #for now we'll handle as pretty print xml 
    223                 c.xml = et2html(x) 
     224                c.xml = et2html(ET.fromstring(x)) 
    224225                c.tab='Details' 
    225226                 
    226227            elif viewFormat == ndgObject.DIF_DOC_TYPE or viewFormat == ndgObject.BROWSE_DIF_DOC_TYPE: 
    227228                renderTemplate = 'browse/dif' 
    228                 c.doc=DIF.DIF(x, et=1, ndgObj=self.uri) 
     229                c.doc=DIF.DIF(x, ndgObj=self.uri) 
    229230                name=c.doc.name 
    230231                 
    231232            elif viewFormat == ndgObject.NUMSIM_DOC_TYPE: 
    232233                renderTemplate = 'browse/numsim' 
    233                 c.xmlh=x 
    234                 name=x.findtext('NS_Name') 
     234                c.xmlh=ET.fromstring(x) 
     235                name= c.xmlh.findtext('NS_Name') 
    235236                c.name=name 
    236237                 
    237238            else: 
    238                 c.xml = et2html(x) 
     239                c.xml = et2html(ET.fromstring(x)) 
    239240                renderTemplate = 'content' 
    240241             
  • MILK/trunk/milk_server/milk_server/lib/ndgInterface.py

    r4992 r4998  
    6363            self.XMLHCache = Cache(max_size=10) 
    6464        logging.info("Finished setting up caches") 
    65          
     65 
     66         
     67    def __runRetrieveAndHandleErrors(self, ndgObject, outputFormat = None): 
     68        ''' 
     69        Retrieve doc represented by ndgObject; if problem occurs during retrieval 
     70        catch this and pass back error in a tidy way 
     71        @param ndgObject: ndgObject representing doc to retrieve 
     72        @keyword outputFormat: format to return doc in 
     73        @return: status, doc where status = 1 => success, 0 => failure 
     74        NB, when status = 0, doc will contain any associated error messages 
     75        ''' 
     76        retrieveClient = NDGRetrieve(request.environ['ndgConfig'], 
     77                                     useDiscovery = g.standalone) 
     78 
     79        try: 
     80            status, doc = retrieveClient.retrieveDoc(ndgObject,  
     81                                                     outputFormat = outputFormat) 
     82        except Exception, e: 
     83            logging.error("Problem occurred whilst retrieving doc, '%s'" %ndgObject) 
     84            logging.error("- error message: %s" %e) 
     85            status = 0 
     86            doc = str(e) 
     87             
     88        return status, doc 
     89             
    6690 
    6791    def GetXML(self, uri, outputSchema = None, useCache = True): 
     
    99123            cleared=None 
    100124         
    101         retrieveClient = NDGRetrieve(request.environ['ndgConfig'], 
    102                                      useDiscovery = g.standalone) 
    103  
    104125        # if we're requesting doc to be returned in a new format, or if 
    105126        # the 'useCache' flag isn't set, do a new lookup of data 
    106127        if outputSchema or not useCache: 
    107             status, xmlh = retrieveClient.retrieveDoc(ndgObj, 
    108                                                       outputFormat = outputSchema) 
    109  
    110         else: 
     128            status, xmlh = self.__runRetrieveAndHandleErrors(ndgObj,  
     129                                                             outputFormat = outputSchema) 
     130        else: 
     131            if not self.XMLHCache: 
     132                self.SetupCaches() 
     133                 
    111134            try: 
    112                 if not self.XMLHCache: 
    113                     self.SetupCaches() 
    114                      
    115135                # NB, there doesn't appear to be a nice way to check if things  
    116136                # are in the cache - either they are or an exception is thrown... 
     
    124144                else: 
    125145                    logging.info("Attempt to lookup document directly") 
    126                     status, xmlh = retrieveClient.retrieveDoc(ndgObj, 
    127                                                               outputFormat = outputSchema) 
     146                    status, xmlh = self.__runRetrieveAndHandleErrors(ndgObj,  
     147                                                             outputFormat = outputSchema) 
    128148                if status: 
    129149                    logging.info("Document retrieved successfully - adding to cache")  
     
    145165            session.save() 
    146166        
    147         return status,xmlh 
     167        return status, xmlh 
    148168             
    149169 
Note: See TracChangeset for help on using the changeset viewer.