Ignore:
Timestamp:
18/02/09 12:53:17 (11 years ago)
Author:
cbyrom
Message:

Adjust code to fit with changes to ndgCommon codebase + tidy up
structure of ndgInterface to make easier to follow + add documentation
+ add universal debug mode + various other small code tidy ups.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • MILK/trunk/milk_server/milk_server/lib/ndgInterface.py

    r4959 r4992  
    1010from csml_cache import CSMLExtractCache 
    1111import os, logging 
    12 from ndg.common.src.dal.ndgRetrieve import ndgRetrieve 
     12from ndg.common.src.dal.ndgRetrieve import NDGRetrieve 
    1313from ndg.common.src.models.ndgObject import ndgObject 
    1414from xml.etree import ElementTree as ET 
     
    5050        else: 
    5151            self.CSMLDataCache=CSMLExtractCache( 
    52                 request.environ['paste.config']['app_conf']['tmp_dir'],max_size=10) 
     52                request.environ['paste.config']['app_conf']['tmp_dir'], 
     53                max_size=10) 
    5354         
    5455        if csmlDocCache: 
    5556            self.CSMLDocCache = csmlDocCache 
    5657        else: 
    57             self.CSMLDocCache=Cache(max_size=10) 
     58            self.CSMLDocCache = Cache(max_size=10) 
    5859         
    5960        if xmlHCache: 
    6061            self.XMLHCache = xmlHCache 
    6162        else: 
    62             self.XMLHCache=Cache(max_size=10) 
     63            self.XMLHCache = Cache(max_size=10) 
    6364        logging.info("Finished setting up caches") 
    6465         
    6566 
    66     def GetXML(self,uri,outputSchema='', useCache=True): 
     67    def GetXML(self, uri, outputSchema = None, useCache = True): 
    6768        '''  
    6869        This method provides a secure interface to the server 
     
    7172        files except via the CSML api 
    7273        @param uri: ndg format uri to locate doc from 
    73         @keyword outputSchema: format to return doc in 
     74        @keyword outputSchema: format to return doc in. Default = None => 
     75        return doc in its original format 
    7476        @keyword useCache: check for data in the cache and use this, if set to 
    7577        True (the default)    
     78        @return doc in string format 
    7679        ''' 
    7780        #    Note that this method should not be used to obtain 
    7881        #unsecured discovery documents, these are called directly 
    7982        #in the retrieve controller! 
    80         logging.info("Getting XML from uri, '%s' (outputschema: '%s')" \ 
    81                      %(uri, outputSchema)) 
     83        logging.info("Getting XML from uri, '%s'" %uri) 
     84        if outputSchema: 
     85            logging.info("- return doc in new format: '%s'" %outputSchema) 
     86 
    8287        try: 
    83             ndgO=ndgObject(uri) 
     88            ndgObj = ndgObject(uri) 
    8489            localFile=0 
    8590        except ValueError: 
    8691            ''' It's a local file not an ndg identifier ''' 
    8792            logging.info("File appears to be local - look for it there...") 
    88             ndgO=uri 
     93            ndgObj=uri 
    8994            localFile=1 
    9095         
     
    9499            cleared=None 
    95100         
     101        retrieveClient = NDGRetrieve(request.environ['ndgConfig'], 
     102                                     useDiscovery = g.standalone) 
     103 
     104        # if we're requesting doc to be returned in a new format, or if 
     105        # the 'useCache' flag isn't set, do a new lookup of data 
    96106        if outputSchema or not useCache: 
    97             #bypass the cache ... 
    98             status,xmlh=ndgRetrieve(ndgO, 
    99                                     request.environ['ndgConfig'], 
    100                                     output=outputSchema, 
    101                                     discovery=g.standalone) 
     107            status, xmlh = retrieveClient.retrieveDoc(ndgObj, 
     108                                                      outputFormat = outputSchema) 
     109 
    102110        else: 
    103111            try: 
     
    105113                    self.SetupCaches() 
    106114                     
     115                # NB, there doesn't appear to be a nice way to check if things  
     116                # are in the cache - either they are or an exception is thrown... 
    107117                xmlh=self.XMLHCache[uri] 
    108118                status=1 
     
    112122                if localFile: 
    113123                    status,xmlH=self.__getLocal(uri) 
    114                 else:     
    115                     status,xmlh=ndgRetrieve(ndgO, 
    116                                             request.environ['ndgConfig'], 
    117                                             output=outputSchema, 
    118                                             discovery=g.standalone) 
    119                 if status:  
    120                     self.XMLHCache[uri]=xmlh 
     124                else: 
     125                    logging.info("Attempt to lookup document directly") 
     126                    status, xmlh = retrieveClient.retrieveDoc(ndgObj, 
     127                                                              outputFormat = outputSchema) 
     128                if status: 
     129                    logging.info("Document retrieved successfully - adding to cache")  
     130                    self.XMLHCache[uri] = xmlh 
    121131             
    122         if not status: return status,xmlh 
     132        if not status:  
     133            return status,xmlh 
    123134         
    124135        # valid values of the return objects SHOULD BE  
     
    126137        #   exceptions, status=0, xmlh='Exception(e)' 
    127138         
    128         status,xmlh=self.__gatekeep(ndgO,xmlh) 
     139        status,xmlh=self.__gatekeep(ndgObj,xmlh) 
    129140        if status: 
    130141            if cleared is None: 
     
    164175                 
    165176    def __getLocal(self,uri): 
    166         ''' Returns a local csml file (used for testing) ''' 
     177        '''  
     178        Returns a local csml file (used for testing)  
     179        ''' 
     180        logging.info("Attempt to retrieve doc locally - from %s" %uri) 
    167181        csml_dir = request.environ['paste.config']['app_conf']['csml_dir'] 
    168182        path = os.path.join(csml_dir, file) 
     
    172186            f = path +'.xml' 
    173187        else: 
     188            logging.info("- cannot find file") 
    174189            return 0, '<p>Cannot find CSML file %s</p>' % file 
    175190        r=f.read() 
     191        logging.info("- returning file contents") 
    176192        return 1,r      
Note: See TracChangeset for help on using the changeset viewer.