summaryrefslogtreecommitdiffstats
path: root/django/engagementmanager/utils/exception_message_factory.py
blob: 6ea96f44cdd28deec45be8e0063c359aaa796fd5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#  
# ============LICENSE_START========================================== 
# org.onap.vvp/engagementmgr
# ===================================================================
# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
# ===================================================================
#
# Unless otherwise specified, all software contained herein is licensed
# under the Apache License, Version 2.0 (the “License”);
# you may not use this software except in compliance with the License.
# You may obtain a copy of the License at
#
#             http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
#
# Unless otherwise specified, all documentation contained herein is licensed
# under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
# you may not use this documentation except in compliance with the License.
# You may obtain a copy of the License at
#
#             https://creativecommons.org/licenses/by/4.0/
#
# Unless required by applicable law or agreed to in writing, documentation
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# ============LICENSE_END============================================
#
# ECOMP is a trademark and service mark of AT&T Intellectual Property.
from django.core.exceptions import ObjectDoesNotExist
from django.core.management.base import CommandError
from engagementmanager.utils.vvp_exceptions import VvpObjectNotAvailable, \
    VvpGeneralException, VvpBadRequest, VvpConflict
from itsdangerous import SignatureExpired
from requests import ConnectionError
from rest_framework import status
from rest_framework.exceptions import MethodNotAllowed, NotAuthenticated, \
    PermissionDenied, NotAcceptable


class ExceptionMessageFactory:
    messages_dictionary = {
        ObjectDoesNotExist.__name__: {'msg': 'User or Password does not match', 'include_exception': False,
                                      'status': status.HTTP_404_NOT_FOUND},
        MethodNotAllowed.__name__: {'msg': 'Method not allowed: ', 'include_exception': True,
                                    'status': status.HTTP_405_METHOD_NOT_ALLOWED},
        NotAuthenticated.__name__: {'msg': 'You must authenticate in order to perform this action: ',
                                    'include_exception': True, 'status': status.HTTP_403_FORBIDDEN},
        SignatureExpired.__name__: {'msg': 'Signature expired for this token: ', 'include_exception': True,
                                    'status': status.HTTP_405_METHOD_NOT_ALLOWED},
        KeyError.__name__: {'msg': 'KeyError occurred over the backend.', 'include_exception': True,
                            'include_additional_exc_str': True, 'status': status.HTTP_400_BAD_REQUEST},
        ValueError.__name__: {'msg': 'ValueError occurred over the backend: ', 'include_exception': True,
                              'status': status.HTTP_500_INTERNAL_SERVER_ERROR},
        ConnectionError.__name__: {'msg': 'ConnectionError occurred over the backend: ', 'include_exception': True,
                                   'status': status.HTTP_500_INTERNAL_SERVER_ERROR},
        ImportError.__name__: {'msg': 'ImportError occurred over the backend: ', 'include_exception': True,
                               'status': status.HTTP_500_INTERNAL_SERVER_ERROR},
        CommandError.__name__: {'msg': 'CommandError occurred over the backend: ', 'include_exception': True,
                                'status': status.HTTP_500_INTERNAL_SERVER_ERROR},
        PermissionDenied.__name__: {'msg': 'PermissionDenied occurred over the backend: ', 'include_exception': True,
                                    'status': status.HTTP_401_UNAUTHORIZED},
        VvpObjectNotAvailable.__name__: {'msg': '', 'include_exception': True, 'status': status.HTTP_410_GONE},
        NotAcceptable.__name__: {'msg': '', 'include_exception': True, 'status': status.HTTP_403_FORBIDDEN},
        VvpGeneralException.__name__: {'msg': '', 'include_exception': True,
                                       'status': status.HTTP_500_INTERNAL_SERVER_ERROR},
        FileExistsError.__name__: {'msg': 'Not modified due to: ', 'include_exception': True,
                                   'status': status.HTTP_304_NOT_MODIFIED},
        VvpBadRequest.__name__: {'msg': '', 'include_exception': True, 'status': status.HTTP_400_BAD_REQUEST},
        VvpConflict.__name__: {'msg': '', 'include_exception': True, 'status': status.HTTP_409_CONFLICT},
        Exception.__name__: {'msg': 'General error on backend: ', 'include_exception': True,
                             'status': status.HTTP_500_INTERNAL_SERVER_ERROR},
    }

    def get_exception_message(self, exception):
        if isinstance(exception, ObjectDoesNotExist):
            result = self.messages_dictionary[ObjectDoesNotExist.__name__]
        elif exception.__class__.__name__ in self.messages_dictionary:
            result = self.messages_dictionary[exception.__class__.__name__]
        else:
            result = self.messages_dictionary[Exception.__name__]

        return result