summaryrefslogtreecommitdiff
path: root/src/home/api/errors/api_response_error.py
blob: 6910b2daaa0530c7d720aa0f726affcdc137eda2 (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
from typing import Optional


class ApiResponseError(Exception):
    def __init__(self,
                 status_code: int,
                 error_type: str,
                 error_message: str,
                 error_stacktrace: Optional[list[str]] = None):
        super().__init__()
        self.status_code = status_code
        self.error_message = error_message
        self.error_type = error_type
        self.error_stacktrace = error_stacktrace

    def __str__(self):
        def st_formatter(line: str):
            return f'Remote| {line}'

        s = f'{self.error_type}: {self.error_message} (HTTP {self.status_code})'
        if self.error_stacktrace is not None:
            st = []
            for st_line in self.error_stacktrace:
                st.append('\n'.join(st_formatter(st_subline) for st_subline in st_line.split('\n')))
            s += '\nRemote stacktrace:\n'
            s += '\n'.join(st)

        return s