1# -*- coding: utf-8 -*-
2# Copyright (c) 2021 Ansible Project
3# Simplified BSD License (see licenses/simplified_bsd.txt or https://opensource.org/licenses/BSD-2-Clause)
4
5from __future__ import absolute_import, division, print_function
6__metaclass__ = type
7
8
9class AnsibleFallbackNotFound(Exception):
10    """Fallback validator was not found"""
11
12
13class AnsibleValidationError(Exception):
14    """Single argument spec validation error"""
15
16    def __init__(self, message):
17        super(AnsibleValidationError, self).__init__(message)
18        self.error_message = message
19        """The error message passed in when the exception was raised."""
20
21    @property
22    def msg(self):
23        """The error message passed in when the exception was raised."""
24        return self.args[0]
25
26
27class AnsibleValidationErrorMultiple(AnsibleValidationError):
28    """Multiple argument spec validation errors"""
29
30    def __init__(self, errors=None):
31        self.errors = errors[:] if errors else []
32        """:class:`list` of :class:`AnsibleValidationError` objects"""
33
34    def __getitem__(self, key):
35        return self.errors[key]
36
37    def __setitem__(self, key, value):
38        self.errors[key] = value
39
40    def __delitem__(self, key):
41        del self.errors[key]
42
43    @property
44    def msg(self):
45        """The first message from the first error in ``errors``."""
46        return self.errors[0].args[0]
47
48    @property
49    def messages(self):
50        """:class:`list` of each error message in ``errors``."""
51        return [err.msg for err in self.errors]
52
53    def append(self, error):
54        """Append a new error to ``self.errors``.
55
56        Only :class:`AnsibleValidationError` should be added.
57        """
58
59        self.errors.append(error)
60
61    def extend(self, errors):
62        """Append each item in ``errors`` to ``self.errors``. Only :class:`AnsibleValidationError` should be added."""
63        self.errors.extend(errors)
64
65
66class AliasError(AnsibleValidationError):
67    """Error handling aliases"""
68
69
70class ArgumentTypeError(AnsibleValidationError):
71    """Error with parameter type"""
72
73
74class ArgumentValueError(AnsibleValidationError):
75    """Error with parameter value"""
76
77
78class ElementError(AnsibleValidationError):
79    """Error when validating elements"""
80
81
82class MutuallyExclusiveError(AnsibleValidationError):
83    """Mutually exclusive parameters were supplied"""
84
85
86class NoLogError(AnsibleValidationError):
87    """Error converting no_log values"""
88
89
90class RequiredByError(AnsibleValidationError):
91    """Error with parameters that are required by other parameters"""
92
93
94class RequiredDefaultError(AnsibleValidationError):
95    """A required parameter was assigned a default value"""
96
97
98class RequiredError(AnsibleValidationError):
99    """Missing a required parameter"""
100
101
102class RequiredIfError(AnsibleValidationError):
103    """Error with conditionally required parameters"""
104
105
106class RequiredOneOfError(AnsibleValidationError):
107    """Error with parameters where at least one is required"""
108
109
110class RequiredTogetherError(AnsibleValidationError):
111    """Error with parameters that are required together"""
112
113
114class SubParameterTypeError(AnsibleValidationError):
115    """Incorrect type for subparameter"""
116
117
118class UnsupportedError(AnsibleValidationError):
119    """Unsupported parameters were supplied"""
120