Changeset 4964 for ndgCommon


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.

Location:
ndgCommon/trunk/ndg/common/src/lib
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • 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.