Changeset 4959


Ignore:
Timestamp:
12/02/09 10:26:30 (11 years ago)
Author:
cbyrom
Message:

Update MILK stack to use the new ndgCommon clients suite + improve
tests by adding scaffold to do proper tidyups after tests run.

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

Legend:

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

    r4845 r4959  
    88from ndg.common.src.models.Atom import Atom 
    99from ndg.common.src.lib.utilities import escapeSpecialCharacters 
    10 import ndg.common.src.clients.xmldb.eXist.existdbclient as edc 
    1110from milk_server.lib.base import * 
    1211from milk_server.lib.ndgInterface import ndgInterface  
     
    7372        # lookup the atom publication state 
    7473        edc = Utilities.getExistClient(c.atom.ME.providerID) 
    75         c.atom.state = edc.getAtomPublicationState(c.atom.datasetID) 
    76          
     74        c.atom.state = edc.getAtomPublicationState(c.atom.datasetID,  
     75                                                   c.atom.ME.providerID)         
    7776        # save the current atom - to avoid this needing be recreated by the  
    7877        # asynch viewAssociatedData call 
  • MILK/trunk/milk_server/milk_server/controllers/atom_editor/editatom.py

    r4845 r4959  
    1717from ndg.common.src.models import AtomState 
    1818from ndg.common.src.lib.atomvalidator import ValidationError 
    19 import ndg.common.src.clients.xmldb.eXist.existdbclient as edc 
     19import ndg.common.src.clients.xmldb.abstractxmldbatomclient as ac 
    2020from ndg.common.src.models.MolesEntity import MolesEntity as ME 
    2121from ndg.common.src.lib.utilities import escapeSpecialCharacters 
     
    119119                        self._setup(uri=c.atom.ndgURI, loadAtom = False) 
    120120                        c.atom.ndgObject = self.ndgObject 
    121                     except edc.DuplicateError, e: 
     121                    except ac.DuplicateError, e: 
    122122                        # we've found an existing atom with the same ID 
    123123                        # - give the users the choice of replacing the contents of this atom 
     
    361361        except ExpatError, e: 
    362362            c.xml='XML content is not well formed' 
    363             c.doc=str(x) 
     363            c.doc=str(e) 
    364364            logging.error("Error retrieving [%s] - XML content: %s" % (uri, e)) 
    365365        except SystemError, e: 
     
    581581         
    582582        if newState and newState != atom.state: 
    583             createdAtom = eXist.changeAtomPublicationStateInExist(atom, newState) 
     583            createdAtom = eXist.changeAtomPublicationState(atom, newState) 
    584584        else: 
    585             createdAtom = eXist.createAtomInExist(atom) 
     585            createdAtom = eXist.createAtom(atom) 
    586586        logging.info("Changes successfully saved to eXist") 
    587587        return createdAtom 
  • MILK/trunk/milk_server/milk_server/controllers/atom_editor/listatom.py

    r4798 r4959  
    77import logging, xmlrpclib 
    88from ndg.common.src.models.Atom import Atom 
    9 from ndg.common.src.dal.DocumentRetrieve import DocumentRetrieve 
    10 from ndg.common.src.clients.xmldb.eXist.eXistInterface import ndg_eXist 
     9from ndg.common.src.clients.xmldb.eXist.searchclient import SearchClient 
    1110from ndg.common.src.models.vocabtermdata import VocabTermData as VTD, VocabTermItem as VTI 
    1211from milk_server.lib.base import * 
     
    104103            defaultVal = None 
    105104            # set up a default 'all' value 
    106             allVal = VTI(ndg_eXist.DEFAULT_ALL_VAL, ndg_eXist.DEFAULT_ALL_VAL) 
     105            allVal = VTI(SearchClient.DEFAULT_ALL_VAL, SearchClient.DEFAULT_ALL_VAL) 
    107106            if associationType: 
    108107                val = int(associationType) 
     
    151150            %(providerID, atomTypeID, term)) 
    152151         
    153         dr = DocumentRetrieve(self.cf.get('NDG_EXIST','local'), 
    154                               pwfile=self.cf.get('NDG_EXIST','passwordFile')) 
     152        searchClient = SearchClient(dbHostName = self.cf.get('NDG_EXIST','local'), 
     153                                    configFileName = self.cf.get('NDG_EXIST','passwordFile')) 
    155154         
    156155        # NB, for some reason, the xmlrpc call to eXist sometimes results in a spurious  
     
    160159        while results is None: 
    161160            try: 
    162                 results = dr.search(term, 
     161                results = searchClient.search( 
     162                            term, 
    163163                            start=1, 
    164164                            howmany=10000, # NB, we want to get back everything! 
    165                             target=ndg_eXist.ATOM_TARGET, 
     165                            target = SearchClient.ATOM_TARGET, 
    166166                            providerID = providerID,  
    167                             atomTypeID = atomTypeID) 
     167                            atomTypeID = atomTypeID, 
     168                            useChunked = True) 
    168169            except xmlrpclib.Fault, e: 
    169170                logging.info("Error caught whilst calling eXist: %s" %e.faultString) 
  • MILK/trunk/milk_server/milk_server/controllers/browse/discovery.py

    r4798 r4959  
    44import socket, logging 
    55from paste.request import parse_querystring 
    6 from ndg.common.src.clients.ws.ndgSearch import ndgSearch 
    7 from ndg.common.src.dal import DocumentRetrieve 
     6from ndg.common.src.clients.ws.discoveryserviceclient import DiscoveryServiceClient 
     7from ndg.common.src.clients.xmldb.eXist.searchclient import SearchClient 
    88from ndg.common.src.dal.DocumentRetrieve import ndgVocabPOX as VS 
    99from ndg.common.src.models.ndgObject import ndgObject 
     
    146146            if hasattr(g, 'discoveryServiceURL'): 
    147147                url = g.discoveryServiceURL 
    148             ws=ndgSearch(HostAndPort=url) 
     148            ws = DiscoveryServiceClient(HostAndPort=url) 
    149149        elif self.inputs['searchTarget'] in ['Browse','NumSim']: 
    150150            logging.info(" - use Browse service to complete search") 
    151             ws=DocumentRetrieve(self.exist[0],pwfile=self.exist[1]) 
     151            ws = SearchClient(dbHostName = self.exist[0], 
     152                              configFileName = self.exist[1]) 
    152153            #overriding text target which is ignored currently ... yuck ... 
    153154            textTarget=self.inputs['searchTarget'] 
  • MILK/trunk/milk_server/milk_server/controllers/browse/retrieve.py

    r4803 r4959  
    77from milk_server.lib import mailer 
    88from milk_server.lib.ndgInterface import ndgInterface  
     9from ndg.common.src.lib.ETxmlView import et2text, et2html 
    910from ndg.common.src.models import stubB, DIF, ndgObject 
    1011from ndg.common.src.models.ndgObject import ndgObject 
    1112from ndg.common.src.models.Atom import Atom 
    1213from ndg.common.src.models.vocabtermdata import VocabTermData as VTD 
    13 from ndg.common.src.dal.DocumentRetrieve import DocumentRetrieve 
     14from ndg.common.src.clients.xmldb.eXist.searchclient import SearchClient 
    1415 
    1516class RetrieveController(BaseController): 
     
    5657        status,x=interface.GetXML(uri,outputSchema=self.outputSchema) 
    5758        if status: 
    58             #(the return object x is an xmlHandler object) 
    59             c.xml=x.xmls 
     59            #(the return object x is an ET object) 
     60            c.xml = et2text(x) 
    6061            response.headers['Content-Type'] = 'application/xml' 
    6162            response.write(c.xml) 
     
    99100                lookupIndirectReferences = False 
    100101             
    101             dr = DocumentRetrieve(self.cf.get('NDG_EXIST','local'), 
    102                       pwfile=self.cf.get('NDG_EXIST','passwordFile')) 
    103              
    104             c.atom.lookupAssociatedData(type, dr, lookupIndirectReferences = \ 
    105                                             lookupIndirectReferences) 
     102            searchClient = SearchClient(dbHostName = self.cf.get('NDG_EXIST','local'), 
     103                                        configFileName = self.cf.get('NDG_EXIST','passwordFile')) 
     104             
     105            c.atom.lookupAssociatedData(type, searchClient,  
     106                                        lookupIndirectReferences = lookupIndirectReferences) 
    106107 
    107108            template = 'atom_editor/deployments_data' 
     
    155156             
    156157        interface = ndgInterface() 
     158        #(the return object x is an ET object) 
    157159        status,x=interface.GetXML(uri,outputSchema=self.outputSchema, useCache=useCache) 
    158160        c.title='Viewing [%s]'%self.uri 
     
    162164        if status: 
    163165            logging.debug("Document retrieved ok - now processing results") 
    164             #(the return object x is an xmlHandler object) 
     166 
    165167            if self.outputSchema!='':  
    166168                viewFormat=self.outputSchema 
     
    171173            name=str(self.uri) 
    172174            if self.format=='xml': 
    173                 c.xml=x.tohtml() 
     175                c.xml = et2html(x) 
    174176                renderTemplate = 'content' 
    175177                c.tab='Details' 
    176178 
    177179            elif self.format=='raw': 
    178                 c.xml=x.xmls 
     180                c.xml = et2text(x) 
    179181                response.headers['Content-Type'] = 'application/xml' 
    180182                return response.write(c.xml) 
     
    183185                viewFormat ==  ndgObject.ATOM_BACKUP_DOC_TYPE: 
    184186                renderTemplate = 'atom_editor/atom_editor' 
    185                 c.xmlh=x 
    186                 c.atom = Atom(xmlString=str(x), ndgObject = self.uri) 
     187                c.xmlh = x 
     188                c.atom = Atom(xmlString=x, ndgObject = self.uri) 
    187189                 
    188190                # get the current publication state 
    189191                edc = Utilities.getExistClient(c.atom.ME.providerID) 
    190                 c.atom.state = edc.getAtomPublicationState(c.atom.datasetID) 
     192                c.atom.state = edc.getAtomPublicationState(c.atom.datasetID,  
     193                                                           c.atom.ME.providerID) 
    191194                 
    192195                c.title = 'Viewing [%s]'%self.uri 
     
    207210            elif viewFormat == ndgObject.MOLES_DOC_TYPE: 
    208211                renderTemplate = 'browse/stubB' 
    209                 c.doc=stubB.stubB(x.tree,self.cf) 
     212                c.doc=stubB.stubB(x, self.cf) 
    210213                name=c.doc.abbreviation 
    211214                 
     
    214217                name=self.uri.localID 
    215218                #for now we'll handle as pretty print xml 
    216                 c.xml=x.tohtml() 
     219                c.xml = et2html(x) 
    217220                c.tab='Details' 
    218221                 
    219222            elif viewFormat == ndgObject.DIF_DOC_TYPE or viewFormat == ndgObject.BROWSE_DIF_DOC_TYPE: 
    220223                renderTemplate = 'browse/dif' 
    221                 c.doc=DIF.DIF(x.tree,et=1,ndgObj=self.uri) 
     224                c.doc=DIF.DIF(x, et=1, ndgObj=self.uri) 
    222225                name=c.doc.name 
    223226                 
     
    225228                renderTemplate = 'browse/numsim' 
    226229                c.xmlh=x 
    227                 name=x.getText('NS_Name') 
     230                name=x.findtext('NS_Name') 
    228231                c.name=name 
    229232                 
    230233            else: 
    231                 c.xml=x.tohtml() 
     234                c.xml = et2html(x) 
    232235                renderTemplate = 'content' 
    233236             
  • MILK/trunk/milk_server/milk_server/lib/Utilities.py

    r4798 r4959  
    11import urllib, logging 
    22from milk_server.lib.base import * 
    3 import ndg.common.src.clients.xmldb.eXist.existdbclient as edc 
     3from ndg.common.src.clients.xmldb.eXist.atomclient import AtomClient 
    44 
    55def getExistClient(providerID): 
     
    1616    existHost = request.environ['ndgConfig'].get('NDG_EXIST', providerID) 
    1717    configFile = request.environ['ndgConfig'].get('NDG_EXIST','passwordFile') 
    18     eXistClient = edc.eXistDBClient(eXistDBHostname = existHost, \ 
    19                                    configFile = configFile) 
     18    eXistClient = AtomClient(dbHostName = existHost, configFileName = configFile) 
     19     
    2020    # add the client to the global variables for re-use 
    2121    g.eXistDBCons[providerID] = eXistClient 
    2222    logging.info("Returning eXist client") 
    2323    return eXistClient 
     24 
    2425 
    2526def recreateListFromUnicode(string): 
  • MILK/trunk/milk_server/milk_server/lib/ndgInterface.py

    r4837 r4959  
    1212from ndg.common.src.dal.ndgRetrieve import ndgRetrieve 
    1313from ndg.common.src.models.ndgObject import ndgObject 
    14 from ndg.common.src.lib import xmlHandler2 
     14from xml.etree import ElementTree as ET 
    1515from pylons import request, session 
    1616 
     
    122122        if not status: return status,xmlh 
    123123         
    124         # convert doc to an XML tree 
    125         xmlh=xmlHandler2.xmlHandler(xmlh,string=1) 
    126          
    127124        # valid values of the return objects SHOULD BE  
    128125        #   ok:         status=1, xmlh=an xml handler instance. 
  • MILK/trunk/milk_server/milk_server/tests/functional/test_listatom.py

    r4798 r4959  
    1515from milk_server.tests import * 
    1616import logging, os 
    17 import ndg.common.src.clients.xmldb.eXist.existdbclient as dbc 
    1817import ndgutilstests.testconstants as tc 
    1918from ndgutilstests.testutils import testUtils as tu 
     
    3635     
    3736    def tearDown(self): 
    38         self.utils.dbc.deleteAtomInExist(self.createdAtom) 
     37        self.utils.ac.deleteAtom(self.createdAtom) 
    3938         
    4039     
  • MILK/trunk/milk_server/milk_server/tests/functional/test_retrieve.py

    r4487 r4959  
    1515from milk_server.tests import * 
    1616import logging 
     17import ndg.common.unittests.testconstants as tc 
     18from ndg.common.unittests.testutils import testUtils as tu 
    1719 
    18 logging.basicConfig(level=logging.DEBUG, 
    19                         format='%(asctime)s %(filename)s:%(lineno)d %(levelname)s %(message)s') 
    2020 
    2121class TestRetrieveController(TestController): 
     22 
     23    def setUp(self): 
     24        ''' 
     25        set up data used in the tests. 
     26        ''' 
     27        self.createdAtoms = []    # array to store paths to atoms created - in order to then delete them 
     28        self.utils = tu(tc.EXIST_DBCONFIG_FILE) 
     29     
    2230    def testInvalidURIIndex(self): 
    2331        try: 
     
    5159 
    5260    def testValidAtomURIIndex(self): 
     61        createdAtom = self.utils.createAtomInEXist(tc.xmlString) 
     62        self.createdAtoms.append(createdAtom.getFullPath()) 
    5363        try: 
    54             response = self.app.get(url_for(controller='browse/retrieve',uri='badc.nerc.ac.uk__ATOM__dataent_11679938403412067')) 
     64            response = self.app.get(url_for(controller='browse/retrieve',uri=tc.ndgURI)) 
    5565            self.assertEqual(response.status, 200) 
    5666        except Exception, e: 
     
    6777            print type(e) 
    6878            self.fail('An exception should not have been thrown here') 
     79 
     80    def tearDown(self): 
     81        for path  in self.createdAtoms: 
     82            # delete the test file, in case it has been used in a test 
     83            self.utils.deleteDoc(path) 
Note: See TracChangeset for help on using the changeset viewer.