Changeset 4964


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

Adjust granulite to ensure that granule atoms are validated before
they are created - and add code to properly deal with validation errors.

Files:
5 edited

Legend:

Unmodified
Added
Removed
  • MILK/trunk/milk_server/milk_server/config/milkMiddleware.py

    r4958 r4964  
    6969        localDbHostName = cf.get('NDG_EXIST','local') 
    7070        # set up the validator for atoms - to allow re-use across the app 
    71         self.globals.validator = AtomValidator(None, self.globals.pwFile,  
     71        self.globals.validator = AtomValidator(None,  
     72                                               dbConfigFile = self.globals.pwFile,  
    7273                                               dbHostName = localDbHostName, 
    7374                                               newLineChar="<br/>", 
  • MILK/trunk/milk_server/milk_server/controllers/atom_editor/atomeditorcontroller.py

    r4959 r4964  
    104104        in templates 
    105105        @param e: Exception to add 
     106        @return errors: dict of errors 
    106107        ''' 
    107108        if not c.errors: 
     
    122123            # and is of no real interest - and will just confuse viewers 
    123124            c.errors['Unexpected error'] = e.faultString.split(':')[-1]  
     125 
    124126        if hasattr(e, 'unpack_errors'): 
    125127            c.errors.update(e.unpack_errors()) 
     
    135137                    newErrors.append(escapeSpecialCharacters(err)) 
    136138            c.errors[key] = newErrors 
     139         
     140        return c.errors 
    137141 
    138142 
  • MILK/trunk/milk_server/milk_server/controllers/atom_editor/editatom.py

    r4959 r4964  
    150150            logging.info(" - inputs invalid") 
    151151            c.errors = e.unpack_errors() 
     152        except ValidationError, e: 
     153            logging.info(e) 
     154            self._unpackErrors(e) 
     155             
    152156        except Exception, e: 
    153157            c.errors['WARNING'] = ['Error loading data: the displayed data will not be saved - please fix problem and retry'] 
     
    640644        logging.info("Setting up new atom from granulite template") 
    641645        c.title='Create new data granule atom - from a granulite file' 
    642         c.errors = {} 
     646 
     647        if not hasattr(c, 'errors'): 
     648            c.errors = {} 
    643649        try: 
    644650            return self.savePageAndRender('atom_editor/atom_granulator', **inputs) 
  • ndgCommon/trunk/ndg/common/src/lib/atomvalidator.py

    r4934 r4964  
    5555 
    5656         
    57     def __init__(self, atom, dbConfigFile, raiseException = True, \ 
    58                  newLineChar= NEW_LINE, loadAllCollections = False, \ 
    59                  isDebug = False, dbHostName = 'chinook.badc.rl.ac.uk'): 
     57    def __init__(self, atom, atomClient = None,  
     58                 dbHostName = 'chinook.badc.rl.ac.uk', 
     59                 dbConfigFile = None,  
     60                 raiseException = True,  
     61                 newLineChar= NEW_LINE, loadAllCollections = False,  
     62                 isDebug = False): 
    6063        ''' 
    6164        Set up validator object - with atom to validate 
    6265        @param atom: Atom object to validate 
     66        @keyword atomClient: an eXist client implementing the InterfaceXMLDBAtomClient interface 
    6367        @keyword dbConfigFile: config file to use with eXist DB connection 
    6468        @keyword raiseException: if True, raise a ValidationException following a failed validation  
     
    8185         
    8286        # set up connection to eXist 
    83         self.__setUpEXistDBConnection(dbConfigFile,  
    84                                       loadAllCollections = loadAllCollections, 
    85                                       dbHostName = dbHostName) 
     87        if atomClient: 
     88            self._atomClient = atomClient 
     89        else: 
     90            self.__setUpEXistDBConnection(dbConfigFile,  
     91                                          loadAllCollections = loadAllCollections, 
     92                                          dbHostName = dbHostName) 
    8693 
    8794        # setup the dictionary to store errors 
     
    333340        ''' 
    334341        logging.info("Validating schema compliance") 
    335         atomPath = self._atom.getDefaultCollectionPath() + self._atom.atomName 
     342        atomPath = self._atom.getFullPath() 
    336343        try: 
    337344            errors = self._atomClient.checkAtomSchemaCompliance(atomPath, atom = self._atom, 
  • ndgCommon/trunk/ndg/common/src/lib/granulite.py

    r4934 r4964  
    1010from ndg.common.src.models import Atom 
    1111import ndg.common.src.lib.utilities as utilities 
     12from ndg.common.src.lib.atomvalidator import AtomValidator 
    1213from ndg.common.src.models.vocabtermdata import VocabTermData as VTD 
    1314from ndg.common.src.clients.xmldb.eXist.atomclient import AtomClient 
     
    132133        self._cdmlTimeAxis = timeAxis 
    133134        self._datasetID = datasetID 
     135         
     136        # AtomValidator to use for validation - only load when needed 
     137        self.validator = None 
    134138             
    135139        logging.info("Granulite data model set up") 
     
    362366        logging.info("Adding granule info to data entities") 
    363367        if not self._dataEntityIDs: 
    364             logging.info("No data entity IDs were specified in granulite - so will not add granule data to cedarmoles DB") 
     368            logging.info("No data entity IDs were specified in granulite - so will not add granule data to eXist DB") 
    365369            return 
    366370         
     
    405409                                           providerID,  
    406410                                           dataEntityID) 
     411         
     412        if not doc: 
     413            errorMessage = "Could not find data entity, %s - please retry with valid data" %dataEntityID 
     414            logging.error(errorMessage) 
     415            raise ValueError(errorMessage) 
    407416        logging.debug("DE retrieved") 
    408417         
     
    589598             
    590599        else: 
     600            # validate the newly created atom - before importing it 
     601            self.__validateGranuleAtom() 
     602             
    591603            # add the granule to eXist - if this exists already a DuplicationError 
    592604            # will be thrown if backups are not allowed 
     
    610622                errorMessage = "Exception thrown whilst updating data entities - detail: " + \ 
    611623                    str(e.message) + \ 
    612                     "Will now roll back changes to granule atom to leave system in original state" 
     624                    "\n - will now roll back changes to granule atom to leave system in original state" 
    613625                logging.error(errorMessage) 
    614626                self.deleteGranuleAndDEReferences() 
     
    623635        return self._atom 
    624636 
     637 
     638    def __validateGranuleAtom(self): 
     639        ''' 
     640        Validate the granule atom created, using the standard AtomValidator 
     641        @raise atomvlaidator.ValidationError if any errors are found  
     642        ''' 
     643        if not self.validator: 
     644            self.validator = AtomValidator(None,  
     645                                           atomClient = self._eXist, 
     646                                           newLineChar="<br/>") 
     647             
     648        self.validator.setAtom(self._atom) 
     649        self.validator.validateAtom() 
     650         
    625651 
    626652    def deleteGranuleAndDEReferences(self): 
Note: See TracChangeset for help on using the changeset viewer.