#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2014-2020 Bitergia
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Authors:
# Santiago Dueñas <sduenas@bitergia.com>
# Miguel Ángel Fernández <mafesan@bitergia.com>
#
CODE_BASE_ERROR = 1
CODE_ALREADY_EXISTS_ERROR = 2
CODE_NOT_FOUND_ERROR = 9
CODE_VALUE_ERROR = 10
CODE_CLOSED_TRANSACTION_ERROR = 12
CODE_LOCKED_IDENTITY_ERROR = 13
CODE_DUPLICATE_RANGE_ERROR = 14
CODE_EQUAL_INDIVIDUAL_ERROR = 15
CODE_FILTER_ERROR = 16
CODE_RECOMMENDATION_ERROR = 100
CODE_TOKEN_EXPIRED = 126
CODE_PERMISSION_DENIED = 127
CODE_UNKNOWN_ERROR = 128
CODE_INVALID_CREDENTIALS = 129
[docs]class BaseError(Exception):
"""Base class error.
Derived classes can overwrite error message declaring
'message' property.
"""
code = CODE_BASE_ERROR
message = "SortingHat unknown error"
def __init__(self, **kwargs):
super().__init__()
self.msg = self.message % kwargs
def __str__(self):
return self.msg
def __int__(self):
return self.code
[docs]class AlreadyExistsError(BaseError):
"""Exception raised when an entity already exists in the registry"""
message = "%(entity)s '%(eid)s' already exists in the registry"
code = CODE_ALREADY_EXISTS_ERROR
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.entity = kwargs['entity']
self.eid = kwargs['eid']
[docs]class NotFoundError(BaseError):
"""Exception raised when an entity is not found in the registry"""
message = "%(entity)s not found in the registry"
code = CODE_NOT_FOUND_ERROR
[docs]class InvalidValueError(BaseError):
"""Exception raised when a value is invalid"""
code = CODE_VALUE_ERROR
message = "%(msg)s"
[docs]class InvalidFilterError(BaseError):
"""Exception raised when a filter is invalid"""
code = CODE_FILTER_ERROR
message = "Error in %(filter_name)s filter: %(msg)s"
[docs]class EqualIndividualError(BaseError):
"""Exception raised when the source and destination individual are the same"""
code = CODE_EQUAL_INDIVIDUAL_ERROR
message = "%(msg)s"
[docs]class ClosedTransactionError(BaseError):
"""Exception raised when performing a change on a closed transaction"""
code = CODE_CLOSED_TRANSACTION_ERROR
message = "%(msg)s"
[docs]class LockedIdentityError(BaseError):
"""Exception raised when performing a change on a locked individual"""
code = CODE_LOCKED_IDENTITY_ERROR
message = "Individual %(uuid)s is locked"
[docs]class DuplicateRangeError(BaseError):
"""Exception raised when setting an enrollment with an existing date range"""
code = CODE_DUPLICATE_RANGE_ERROR
message = "range date '%(start)s'-'%(end)s' is part of an existing range for %(org)s"
[docs]class RecommendationEngineError(BaseError):
"""Exception raised when there is an error in the recommendation engine"""
code = CODE_RECOMMENDATION_ERROR
message = "%(msg)s"