# Copyright (C) 2005-2024 Splunk Inc. All Rights Reserved. import sys from splunk.clilib.bundle_paths import make_splunkhome_path sys.path.append(make_splunkhome_path(['etc', 'apps', 'SA-ITOA', 'lib'])) from itsi.data_integrations.data_integrations_constants import STATUS_CODE_LOGGING_KEY """ Contains different defined exceptions ITOA-8115: remove dependencies of SA-ITOA from SA-ITSI-Licensechecker. Manually copied to apps/SA-ITSI-Licensechecker/lib/ITOA/itoa_exceptions.py If you change this file, make sure to also update the copy. """ class ItoaError(Exception): """ Generic exception class with some generic defaults If it gets the logger passed into it, it will also log the error appropriately """ def __init__(self, message, logger, log_prefix='[ITOA Error]', status_code=500, uid='', context=None): super(ItoaError, self).__init__(message, uid, context) self.message = message self.uid = uid self.context = context # if this error ends up making it up to REST, allow a status code to be declared self.status_code = status_code if logger is not None: logger.error(log_prefix + message, props={STATUS_CODE_LOGGING_KEY: status_code}) def __str__(self): return self.message class UnsupportedObjectTypeError(ItoaError): """ Indicates that the object type passed in is unsupported """ def __init__(self, message, logger=None, status_code=400): super(UnsupportedObjectTypeError, self).__init__(message, logger, status_code=status_code) class ItoaValidationError(ItoaError): """ Bad request exception result in 400 error """ def __init__(self, message, logger, log_prefix='[ITOA Validation Error]', status_code=400, uid='', context=None): super(ItoaValidationError, self).__init__(message, logger, log_prefix, status_code, uid, context) class ItoaNotFoundError(ItoaError): """ Not found exception result in 404 error """ def __init__(self, message, logger, log_prefix='[ITOA Not Found Error]', status_code=404): super(ItoaNotFoundError, self).__init__(message, logger, log_prefix, status_code) class ItoaAlreadyExistsError(ItoaError): """ Already exists exception result in 409 error """ def __init__(self, message, logger, log_prefix='[ITOA Already Exists Error]', status_code=409): super(ItoaAlreadyExistsError, self).__init__(message, logger, log_prefix, status_code) class ItoaDatamodelContextError(ItoaError): """ Indicates that the datamodel context(for datamodel, its objects or fields) being looked up could not be found """ def __init__(self, message, logger, log_prefix='[ITOA Datamodel Context Error]', status_code=400): super(ItoaDatamodelContextError, self).__init__(message, logger, log_prefix, status_code) class ItoaAccessDeniedError(ItoaError): def __init__(self, message, logger, log_prefix='[ITOA Access Denied Error]', status_code=403): if 'access denied' not in message.lower(): message = 'Access denied. %s' % message super(ItoaAccessDeniedError, self).__init__(message, logger, log_prefix, status_code)