#!/usr/bin/env python

#
# Base DM exception class.
#

#######################################################################

import exceptions
import json

from dm.common.constants import dmStatus 

#######################################################################

class DmException(exceptions.Exception):
    """
    Base DM exception class. 
                
    Usage:
        DmException(errorMessage, errorCode)
        DmException(args=errorMessage)
        DmException(exception=exceptionObject)      
    """ 
    def __init__(self, error='', code=dmStatus.DM_ERROR, **kwargs):
        args = error
        if args == '':
            args = kwargs.get('args', '')
        ex = kwargs.get('exception', None)
        if ex != None:
            if isinstance(ex, exceptions.Exception):
                exArgs = '%s' % (ex)
            if args == '':
                args = exArgs
            else:
                args = "%s (%s)" % (args, exArgs)
        exceptions.Exception.__init__(self, args)
        self.code = code

    def getArgs(self):
        return self.args

    def getErrorCode(self):
        return self.code

    def getErrorMessage(self):
        return '%s' % (self.args)

    def getClassName(self):
        return '%s' % (self.__class__.__name__)
    
    def getExceptionType(self):
        return '%s' % (self.__class__.__name__).split('.')[-1]

    def getJsonRep(self):
        return json.dumps({
            'errorMessage'  : self.getErrorMessage(),
            'errorCode'     : self.getErrorCode(),
            'exceptionType' : self.getExceptionType(),
        })

    def getFullJsonRep(self):
        return self.getJsonRep();