#!/usr/bin/python3
# -*- coding: utf-8 -*-
#
# Univention UCS@school
# Copyright 2016-2021 Univention GmbH
#
# https://www.univention.de/
#
# All rights reserved.
#
# The source code of this program is made available
# under the terms of the GNU Affero General Public License version 3
# (GNU AGPL V3) as published by the Free Software Foundation.
#
# Binary versions of this program provided by Univention to you as
# well as other copyrighted, protected or trademarked materials like
# Logos, graphics, fonts, specific documentations and configurations,
# cryptographic keys etc. are subject to a license agreement between
# you and Univention and not subject to the GNU AGPL V3.
#
# In the case you use this program under the terms of the GNU AGPL V3,
# the program is provided 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public
# License with the Debian GNU/Linux or Univention distribution in file
# /usr/share/common-licenses/AGPL-3; if not, see
# <http://www.gnu.org/licenses/>.
"""
All exceptions raised by code in ucsschool.importer.
"""
[docs]class UcsSchoolImportError(Exception):
    is_fatal = False
    # If is_countable is set to False, the exception is displayed to
    # the user, but is not included in the evaluation of tolerate_errors.
    is_countable = True
    def __init__(self, *args, **kwargs):
        self.entry_count = kwargs.pop("entry_count", 0)
        self.input = kwargs.pop("input", None)
        self.import_user = kwargs.pop("import_user", None)
        super(UcsSchoolImportError, self).__init__(*args, **kwargs) 
[docs]class UcsSchoolImportFatalError(UcsSchoolImportError):
    is_fatal = True 
[docs]class UcsSchoolImportSkipImportRecord(UcsSchoolImportError):
    is_countable = False 
[docs]class BadPassword(UcsSchoolImportError):
    pass 
[docs]class BadValueStored(UcsSchoolImportFatalError):
    pass 
[docs]class ConfigurationError(UcsSchoolImportFatalError):
    pass 
[docs]class CreationError(UcsSchoolImportError):
    pass 
[docs]class DeletionError(UcsSchoolImportError):
    pass 
[docs]class EmptyMandatoryAttribute(UcsSchoolImportError):
    def __init__(self, msg, attr_name, *args, **kwargs):
        super(EmptyMandatoryAttribute, self).__init__(msg, *args, **kwargs)
        self.attr_name = attr_name 
[docs]class InitialisationError(UcsSchoolImportFatalError):
    def __init__(self, msg, log_traceback=True, *args, **kwargs):
        super(InitialisationError, self).__init__(msg, *args, **kwargs)
        self.log_traceback = log_traceback 
[docs]class InvalidBirthday(UcsSchoolImportError):
    pass 
[docs]class InvalidClassName(UcsSchoolImportError):
    pass 
[docs]class InvalidEmail(UcsSchoolImportError):
    pass 
[docs]class InvalidSchoolClasses(UcsSchoolImportError):
    pass 
[docs]class InvalidSchools(UcsSchoolImportError):
    pass 
[docs]class LDAPWriteAccessDenied(UcsSchoolImportFatalError):
    def __init__(self, msg=None, *args, **kwargs):
        msg = msg or "Tried to write using a read only connection (during a dry-run?)."
        super(LDAPWriteAccessDenied, self).__init__(msg, *args, **kwargs) 
[docs]class MissingMandatoryAttribute(UcsSchoolImportError):
    def __init__(self, msg, mandatory_attributes, *args, **kwargs):
        super(MissingMandatoryAttribute, self).__init__(msg, *args, **kwargs)
        self.mandatory_attributes = mandatory_attributes 
[docs]class MissingMailDomain(UcsSchoolImportError):
    pass 
[docs]class MissingSchoolName(UcsSchoolImportError):
    pass 
[docs]class MissingUid(UcsSchoolImportError):
    pass 
[docs]class ModificationError(UcsSchoolImportError):
    pass 
[docs]class MoveError(UcsSchoolImportError):
    pass 
[docs]class NameKeyExists(UcsSchoolImportFatalError):
    pass 
[docs]class NoRole(UcsSchoolImportError):
    pass 
[docs]class NotSupportedError(UcsSchoolImportError):
    pass 
[docs]class NoUsernameAtAll(UcsSchoolImportFatalError):
    pass 
[docs]class NoValueStored(UcsSchoolImportFatalError):
    pass 
[docs]class ReadOnlyConfiguration(UcsSchoolImportFatalError):
    def __init__(self, *args, **kwargs):
        super(ReadOnlyConfiguration, self).__init__(
            "Changing the configuration is not allowed.", *args, **kwargs
        ) 
[docs]class TooManyErrors(UcsSchoolImportFatalError):
    def __init__(self, msg, errors, *args, **kwargs):
        super(TooManyErrors, self).__init__(msg, *args, **kwargs)
        self.errors = errors 
[docs]class UDMError(UcsSchoolImportError):
    pass 
[docs]class UDMValueError(UDMError):
    pass 
[docs]class UnknownAction(UcsSchoolImportError):
    pass 
[docs]class UnknownDisabledSetting(UcsSchoolImportError):
    pass 
[docs]class UnknownProperty(UcsSchoolImportError):
    pass 
[docs]class UnknownRole(UcsSchoolImportError):
    pass 
[docs]class UnknownSchoolName(UcsSchoolImportError):
    pass 
[docs]class UniqueIdError(UcsSchoolImportError):
    pass 
[docs]class UsernameToLong(UcsSchoolImportError):
    pass 
[docs]class UserValidationError(UcsSchoolImportError):
    """
    Wraps ucsschool.lib.models.attributes.ValidationError
    """
    def __init__(self, msg, validation_error, *args, **kwargs):
        super(UserValidationError, self).__init__(msg, *args, **kwargs)
        self.validation_error = validation_error
    def __str__(self):
        return "{} {!r}".format(self, self.validation_error) 
[docs]class WrongUserType(UcsSchoolImportError):
    """Wraps ucsschool.lib.models.base.WrongObjectType"""
    def __init__(self, msg, *args, **kwargs):
        super(WrongUserType, self).__init__(msg, *args, **kwargs)