11from typing import Any
2+ from dataclasses import dataclass
3+ import logging
4+ from typing import Union
25
3-
6+ @ dataclass
47class SteamshipError (Exception ):
5- statusMessage : str = None
6- statusSuggestion : str = None
7- statusCode : str = None
8+ message : str = None
9+ internalMessage : str = None
10+ suggestion : str = None
11+ code : str = None
812 error : str = None
913
10- def __init__ (self , message : str = "Undefined remote error" , suggestion : str = None , code : str = None ,
11- error : Exception = None ):
12- self .statusMessage = message
13- self .statusSuggestion = suggestion
14+ def __init__ (
15+ self ,
16+ message : str = "Undefined remote error" ,
17+ internalMessage : str = None ,
18+ suggestion : str = None ,
19+ code : str = None ,
20+ error : Union [Exception , str ] = None ):
21+ self .message = message
22+ self .suggestion = suggestion
23+ self .internalMessage = internalMessage
1424 self .statusCode = code
1525 if error is not None :
1626 self .error = "{}" .format (error )
@@ -20,16 +30,34 @@ def __init__(self, message: str = "Undefined remote error", suggestion: str = No
2030 parts .append ("[{}]" .format (code ))
2131 if message is not None :
2232 parts .append (message )
33+ if internalMessage is not None :
34+ parts .append ("Internal Message: {}" .format (internalMessage ))
2335 if suggestion is not None :
2436 parts .append ("Suggestion: {}" .format (suggestion ))
2537
2638 super ().__init__ ("\n " .join (parts ))
2739
40+ def log (self ):
41+ logging .error ("[{}] {}. [Internal: {}] [Suggestion: {}]" .format (self .code , self .message , self .internalMessage , self .suggestion ))
42+ if self .error :
43+ logging .error (self .error )
44+
45+ def to_dict (self ) -> dict :
46+ return dict (
47+ message = self .message ,
48+ internalMessage = self .internalMessage ,
49+ suggestion = self .suggestion ,
50+ code = self .code ,
51+ error = self .error
52+ )
53+
2854 @staticmethod
2955 def from_dict (d : any , client : Any = None ) -> "SteamshipError" :
3056 """Last resort if subclass doesn't override: pass through."""
3157 return SteamshipError (
32- message = d .get ('statusMessage' , None ),
33- suggestion = d .get ('statusSuggestion' , None ),
34- code = d .get ('statusCode' , None )
58+ message = d .get ('statusMessage' , d .get ('message' , None )),
59+ internalMessage = d .get ('internalMessage' , None ),
60+ suggestion = d .get ('statusSuggestion' , suggestion = d .get ('suggestion' , None )),
61+ code = d .get ('statusCode' , d .get ('code' , None )),
62+ error = d .get ('error' , d .get ('error' , None ))
3563 )
0 commit comments