33from .response import ErrorResponse
44
55
6+ class ApiRequestException (Exception ):
7+ def __init__ (self , ** kwargs ):
8+ self .code = kwargs .get ("code" )
9+ self .message = kwargs .get ("message" )
10+ self ._request = kwargs .get ("_request" )
11+ self .kwargs = kwargs
12+ super ().__init__ (f"Hsrpc Api Request Error: { self .code } - { self .message } ({ self ._request } )" )
13+
14+
615class ApiRequests (object ):
716 consul = None
817
@@ -14,27 +23,34 @@ def __init__(self, consul=None, set_default=True):
1423
1524 def _base_request (self , method , sys_name , func_name , model_name = "default" , prefix = "" , protocol = "http" , ** kwargs ):
1625 node = self .consul .get_health_service_node_by_balance (sys_name )
26+ uri = [prefix if prefix and prefix != "/" else "" ]
27+ if model_name and model_name != "default" :
28+ uri .append (model_name .lower ())
29+ uri .append (func_name )
1730 if node :
1831 host = node ["Service" ]["Address" ]
1932 port = node ["Service" ]["Port" ]
20- uri = [prefix if prefix and prefix != "/" else "" ]
21- if model_name and model_name != "default" :
22- uri .append (model_name .lower ())
23- uri .append (func_name )
2433 url = "{protocol}://{host}:{port}{uri}" .format (protocol = protocol , host = host , port = port , uri = "/" .join (uri ))
2534 resp = request (method , url , ** kwargs )
2635
2736 try :
2837 rel = resp .json ()
2938 error = rel .get ("error" )
3039 if error :
31- error ["code" ] = "request error: " + error ["code" ]
32- error ["message" ] = f"request [{ method } ] - { sys_name } - { '/' .join (uri )} ({ error ['message' ]} )"
33- return rel .get ("data" ), ErrorResponse .convert_by_dict (rel .get ("error" ), resp .status_code )
34- except Exception :
35- raise Exception ("request {0}-{1}-{2} fail" .format (sys_name , model_name , func_name ), resp .text )
40+ error ["_request" ] = f"[{ method .upper ()} ] - { sys_name } - { host } :{ port } - { '/' .join (uri )} "
41+ return rel .get ("data" ), ApiRequestException (** error )
42+ except Exception as ex :
43+ return None , ApiRequestException (** {
44+ "code" : "request failed" ,
45+ "message" : str (ex ),
46+ "_request" : f"[{ method .upper ()} ] - { sys_name } - { host } :{ port } - { '/' .join (uri )} "
47+ })
3648 else :
37- raise Exception ("[{0}]:not find alive system" .format (sys_name ))
49+ return None , ApiRequestException (** {
50+ "code" : "request failed" ,
51+ "message" : f"[{ sys_name } : not find alive system]" ,
52+ "_request" : f"[{ method .upper ()} ] - { sys_name } - - { '/' .join (uri )} "
53+ })
3854
3955 def get (self , sys_name , func_name , model_name = "default" , prefix = "" , protocol = "http" , params = None , ** kwargs ):
4056 return self ._base_request ("get" , sys_name , func_name , model_name , prefix , protocol , params = params , ** kwargs )
0 commit comments