1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
#############################################################
## ##
## Copyright (c) 2003-2011 by The University of Queensland ##
## Earth Systems Science Computational Centre (ESSCC) ##
## http://www.uq.edu.au/esscc ##
## ##
## Primary Business: Brisbane, Queensland, Australia ##
## Licensed under the Open Software License version 3.0 ##
## http://www.opensource.org/licenses/osl-3.0.php ##
## ##
#############################################################
"""
Defines helper function L{raiseNotImplemented} for raising an exception
in abstract methods of base classes.
"""
import esys.lsm.Logging
import logging
import string
import traceback
import sys
_defaultLogger = esys.lsm.Logging.getLogger("esys.lsm.vis.core")
_doRaiseWhenNotImplemented = True
def raiseExceptionWhenNotImplemented(doRaise=None):
"""
Return value of this function used in L{raiseNotImplemented}.
@type doRaise: bool
@param doRaise: If specified, sets whether L{raiseNotImplemented}
is to raise an exception.
@rtype: bool
@return: True when L{raiseNotImplemented} is to raise
a C{NotImplementedError} exception.
"""
global _doRaiseWhenNotImplemented
if (doRaise != None):
_doRaiseWhenNotImplemented = doRaise
return _doRaiseWhenNotImplemented
def raiseNotImplemented(msg = "", logger = _defaultLogger):
"""
Raises a NotImplementedError exception and logs
the back-trace using the specified logger. The exception
is raised only if L{raiseExceptionWhenNotImplemented}
returns true, otherwise only the back-trace is logged
and no exception is thrown.
@type msg: str
@param msg: Exception message string passed to NotImplementedError
constructor.
@type logger: C{logging.Logger}
@param logger: The C{Logger.error} message is used to log
the lines of a back-trace.
"""
try:
raise NotImplementedError(msg)
except:
if (logger != None):
traceBackMsg = \
traceback.format_exception(
sys.exc_type,
sys.exc_value,
sys.exc_traceback
)
for line in traceBackMsg:
for subLine in string.split(string.strip(line), "\n"):
logger.error(subLine)
if (raiseExceptionWhenNotImplemented()):
raise
|