Changeset 4992


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.

Location:
MILK/trunk/milk_server
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • MILK/trunk/milk_server/milk.config

    r4599 r4992  
    3737proxyServer:      http://wwwcache3.rl.ac.uk:8080/ 
    3838disclaimer:        
     39 
     40# if set to True, errors output will generally be more verbose - e.g. with stacktrace to templates 
     41debug: True              
    3942 
    4043[SEARCH] 
     
    7679# if set to True, the editor will be available 
    7780enabled: True 
    78 # if set to True, errors output with stacktrace to templates 
    79 debug: True              
    8081 
    8182[WMC_CLIENT] 
     
    9697# 
    9798#These are the hosts which are publicly available on which the browse 
    98 #service is running. The list should be of the form repository: hostname 
     99#service is running. The list should be of the form 'repository: hostname' 
    99100#where repository is the NDG identifier .... 
    100101# 
     
    116117# entire purpose of the rest of the list is to simplify updates. These 
    117118# hosts do not need to be visible outside of corporate firewalls. 
    118 # The list should be of the form repository: hostname where repository 
     119# The list should be of the form 'repository: hostname' where repository 
    119120# is the NDG identifier. 
    120121#  
  • MILK/trunk/milk_server/milk_server/config/milkMiddleware.py

    r4984 r4992  
    4545        self.globals.icons_R=cf.get('RELATED','icon') 
    4646        self.globals.icons_key=cf.get('layout','key') 
     47        self.globals.debugModeOn = cf.get('DEFAULT','debug') or False 
    4748         
    4849        self.globals.atomEditorEnabled = cf.get('ATOM_EDITOR','enabled') 
    49         self.globals.debugAtomEditor = cf.get('ATOM_EDITOR','debug') or False 
    5050 
    5151        self.globals.wmcClientURL = cf.get('WMC_CLIENT','url') 
     
    7373                                               dbHostName = localDbHostName, 
    7474                                               newLineChar="<br/>", 
    75                                                isDebug = self.globals.debugAtomEditor, 
     75                                               isDebug = self.globals.debugModeOn, 
    7676                                               loadAllCollections = False) 
    7777 
  • MILK/trunk/milk_server/milk_server/controllers/atom_editor/atomeditorcontroller.py

    r4979 r4992  
    110110 
    111111        errorMessage = e.message 
    112         if g.debugAtomEditor == 'True': 
     112        if g.debugModeOn == 'True': 
    113113            errorMessage = traceback.format_exc() 
    114114 
  • MILK/trunk/milk_server/milk_server/controllers/browse/discovery.py

    r4979 r4992  
    66from ndg.common.src.clients.ws.discoveryserviceclient import DiscoveryServiceClient 
    77from ndg.common.src.clients.xmldb.eXist.searchclient import SearchClient 
    8 from ndg.common.src.dal.DocumentRetrieve import ndgVocabPOX as VS 
     8from ndg.common.src.clients.http.vocabserverclient import VocabServerClient as VS 
    99from ndg.common.src.models.ndgObject import ndgObject 
    1010from ndg.common.src.models.DIF import DIF 
     
    1414from milk_server.lib.mailer import mailHandler 
    1515 
    16 logging.basicConfig(level=logging.DEBUG, 
    17    format='%(asctime)s %(filename)s:%(lineno)d %(levelname)s %(message)s') 
    18  
    19 debug=0 
    20  
    2116class DiscoveryController(BaseController): 
    2217    ''' Provides the pylons controller for NDG discovery ''' 
     
    2520        ''' Common setup for controller methods ''' 
    2621        self.cf=request.environ['ndgConfig'] 
    27         self.exist=(self.cf.get('NDG_EXIST','local'),\ 
    28                     g.pwFile) 
     22        self.exist=(self.cf.get('NDG_EXIST','local'), g.pwFile) 
    2923        self.inputs=dict(parse_querystring(request.environ)) 
    3024        self.message='' 
     
    276270                 
    277271        except ValueError,e: 
    278             if debug:  
     272            if g.debugModeOn == 'True': 
    279273                raise ValueError,str(e) 
    280274            else: 
     
    348342    def semantic(self): 
    349343        self.__setup() 
    350         vs=VS(proxyServer=self.cf.get('DEFAULT','proxyServer')) 
     344        vs = VS(proxyServer=self.cf.get('DEFAULT','proxyServer')) 
    351345        if 'searchString' in self.inputs: 
    352346            try: 
    353                 [broader,narrower,synonyms]=vs.getRelated(self.inputs['searchString']) 
     347                [broader,narrower,synonyms] = vs.getRelated(self.inputs['searchString']) 
    354348                #get a base string for the links to new searches 
    355349                if 'start' in self.inputs: del self.inputs['start'] 
  • MILK/trunk/milk_server/milk_server/controllers/browse/retrieve.py

    r4984 r4992  
    1  
     1''' 
     2 Class representing pylons controller for the retrieval of metadata records - and 
     3 records associated with these 
     4   
     5 @author: B Lawrence?, C Byrom, Tessella Sep 2008 
     6''' 
    27import logging 
    38from paste.request import parse_querystring 
     
    611from milk_server.lib import Utilities 
    712from milk_server.lib.ndgInterface import ndgInterface  
    8 from ndg.common.src.lib.ETxmlView import et2text, et2html 
     13from ndg.common.src.lib.ETxmlView import et2html 
    914from ndg.common.src.models import stubB, DIF, ndgObject 
    1015from ndg.common.src.models.ndgObject import ndgObject 
     
    1419 
    1520class RetrieveController(BaseController): 
    16     ''' Provides the pylons controller for retrieving NDG documents. The simple model 
     21    '''  
     22    Provides the pylons controller for retrieving NDG documents. The simple model 
    1723    is now that an attempt to retrieve/uri will parse the uri, read the config file, 
    18     and if the local server name is not the same as the uri server name. ''' 
     24    and if the local server name is not the same as the uri server name, attempt 
     25    to retrieve the doc remotely.  
     26    ''' 
    1927     
    2028    def __setup(self,uri): 
     
    5159         
    5260        interface = ndgInterface() 
    53         status,x=interface.GetXML(uri,outputSchema=self.outputSchema) 
    54         if status: 
    55             #(the return object x is an ET object) 
    56             c.xml = et2text(x) 
     61        status,x = interface.GetXML(uri,outputSchema=self.outputSchema) 
     62        c.xml = x 
     63        if status: 
    5764            response.headers['Content-Type'] = 'application/xml' 
    5865            response.write(c.xml) 
    5966        else: 
    6067            e=404 
    61             if x.startswith('<p> Access'): e=401 
     68            if x.startswith('<p> Access'):  
     69                e=401 
    6270            response.status_code = e 
    6371            return render('error') 
     72 
    6473 
    6574    def viewAssociatedData(self, type, uri): 
     
    130139 
    131140         
    132          
    133141    def view(self,uri): 
    134142        ''' Returns either an html marked up version of the xml, or a properly laid 
     
    169177            name=str(self.uri) 
    170178            if self.format=='xml': 
    171                 c.xml = et2html(x) 
     179                c.xml = et2html(ET.fromstring(x)) 
    172180                renderTemplate = 'content' 
    173181                c.tab='Details' 
    174182 
    175183            elif self.format=='raw': 
    176                 c.xml = et2text(x) 
     184                c.xml = x 
    177185                response.headers['Content-Type'] = 'application/xml' 
    178186                return response.write(c.xml) 
  • MILK/trunk/milk_server/milk_server/controllers/trackback/trackback.py

    r4984 r4992  
    4848        payload='<trackback><uri>%s</uri></trackback>'%uri 
    4949         
    50         #make sure we have both url and title 
     50        # make sure we have both url and title 
    5151        if 'url' not in keys and 'title' not in keys: 
    5252            err='Incomplete trackback, need both url and title at the every least' 
     
    5454            payload+='<%s>%s</%s>'%(key,incoming[key],key) 
    5555         
    56         #now get server and trackback recipient. 
     56        # now get server and trackback recipient. 
    5757        self.cf=request.environ['ndgConfig'] 
    5858         
  • 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.