1414import os
1515import time
1616from alibabacloud .handlers import RequestContext
17-
17+ from alibabacloud .handlers .prepare_handler import PrepareHandler
18+ from alibabacloud .handlers .signer_handler import SignerHandler
19+ from alibabacloud .handlers .url_handler import URLHandler
20+ from alibabacloud .handlers .http_header_handler import HttpHeaderHandler
21+ from alibabacloud .handlers .timeout_config_reader import TimeoutConfigReader
22+ from alibabacloud .handlers .endpoint_handler import EndpointHandler
23+ from alibabacloud .handlers .log_handler import LogHandler
24+ from alibabacloud .handlers .retry_handler import RetryHandler
25+ from alibabacloud .handlers .server_error_handler import ServerErrorHandler
26+ from alibabacloud .handlers .http_handler import HttpHandler
27+ from alibabacloud .credentials .credentials_provider import DefaultCredentialsProvider
28+ from alibabacloud .endpoint .default_endpoint_resolver import DefaultEndpointResolver
1829DEFAULT_HANDLERS = [
1930 PrepareHandler ,
2031 SignerHandler , # 获取Signature
2132 URLHandler , # 获取url
2233 HttpHeaderHandler , # 获取签名的header
23- TimeoutHandler , # 获取timeout
34+ TimeoutConfigReader , # 获取timeout
2435 EndpointHandler , # 获取endpoint
2536 LogHandler ,
26- RetryHandler ,
37+ # RetryHandler,
2738 ServerErrorHandler ,
2839 HttpHandler
2940]
@@ -66,51 +77,29 @@ def __init__(self, access_key_id=None, access_key_secret=None, region_id=None,
6677 self .read_timeout = read_timeout
6778 self .enable_http_debug = enable_http_debug
6879 # proxy provider两个: client env
69- self .http_proxy = http_proxy
70- self .https_proxy = https_proxy
71- self ._proxy = {
72- 'http' : self . http_proxy ,
73- 'https' : self . https_proxy ,
80+ # self.http_proxy = http_proxy
81+ # self.https_proxy = https_proxy
82+ self .proxy = {
83+ 'http' : http_proxy ,
84+ 'https' : https_proxy ,
7485 }
7586 self .enable_stream_logger = enable_stream_logger
7687 self .profile_name = profile_name
7788 self .config_file = config_file
7889
7990 def read_from_env (self ):
8091 # 从环境变量读取一定量的数据
81- env_vars = ['HTTP_DEBUG' , 'HTTPS_PROXY' , 'HTTP_PROXY' ]
82- for item in env_vars :
83- if getattr (self , item .lower ()) is None :
84- setattr (self , item .lower (), os .environ .get (item ) or os .environ .get (item .lower ()))
85-
86- def _set_env_to_config (config_name , env_name ):
87-
88- env_value = os .environ .get (env_name )
89- if env_value is not None :
90- setattr (self , key , os .environ .get (env_value ))
91-
92- if config_name == 'enable_http_debug' :
93- # FIXME recursive calls will be indefinite
94- _set_env_to_config (config_name , 'HTTP_DEBUG' )
95- _set_env_to_config (config_name , 'http_debug' )
96- elif config_name == 'https_proxy' :
97- _set_env_to_config (config_name , 'HTTPS_PROXY' )
98- _set_env_to_config (config_name , 'https_proxy' )
99- elif config_name == 'http_proxy' :
100- _set_env_to_config (config_name , 'HTTP_PROXY' )
101- _set_env_to_config (config_name , 'http_proxy' )
102-
103- for key in dir (self ):
104- # FIXME make sure we get only configuration members here, not functions & internal
105- # variables
106- if getattr (self , key ) is None :
107- env_name = 'ALIBABA_CLOUD_' + key .upper ()
108- _set_env_to_config (key , env_name )
92+ pass
93+ # env_vars = ['HTTP_DEBUG', 'HTTPS_PROXY', 'HTTP_PROXY']
94+ # for item in env_vars:
95+ # if getattr(self, item.lower()) is None:
96+ # setattr(self, item.lower(), os.environ.get(item) or os.environ.get(item.lower()))
10997
11098 def read_from_profile (self ):
11199 # TODO read from profile
112100 from alibabacloud .utils .ini_helper import load_config
113101 profile = {}
102+ loaded_config = {}
114103 if self .config_file is None :
115104 if self .ENV_NAME_FOR_CONFIG_FILE in os .environ :
116105
@@ -119,25 +108,25 @@ def read_from_profile(self):
119108 # 默认配置不存在
120109 return None
121110 full_path = os .path .expanduser (env_config_file_path )
122- self . _loaded_config = load_config (full_path )
123- profile = self . _loaded_config .get (self .profile_name , {})
111+ loaded_config = load_config (full_path )
112+ profile = loaded_config .get (self .profile_name , {})
124113 else :
125114 potential_locations = self .DEFAULT_NAME_FOR_CONFIG_FILE
126115 for filename in potential_locations :
127116 try :
128- self . _loaded_config = load_config (filename )
117+ loaded_config = load_config (filename )
129118 break
130119 except Exception :
131120 continue
132- profile = self . _loaded_config .get (self .profile_name , {})
121+ profile = loaded_config .get (self .profile_name , {})
133122 else :
134123 profile = load_config (self .config_file )
135124
136125 for key in dir (self ):
137126 if profile .get (key )is not None and getattr (self , key ) is None :
138127 # 不存在config当中的值 pass
139128 setattr (self , key , profile .get (key ))
140- print ('不存在config当中的值' , key )
129+ # print('不存在config当中的值', key)
141130
142131 def read_from_default (self ):
143132 # some config DEFAULT
@@ -156,36 +145,45 @@ class AlibabaCloudClient:
156145
157146 def __init__ (self , client_config , credentials_provider = DefaultCredentialsProvider ):
158147 self .config = get_merged_client_config (client_config )
159- self .credentials_provider = credentials_provider
148+ self .credentials_provider = DefaultCredentialsProvider
160149 self .handlers = DEFAULT_HANDLERS
161150 self .logger = None # TODO initialize
162151 # endpoint_resolver阶段需要
163152 self .endpoint_resolver = DefaultEndpointResolver (self ) # TODO initialize
164- self .product_code = product_code
165- self .location_service_code = location_service_code
166- self .location_service_type = location_service_type
153+ self .product_code = None
154+ self .location_service_code = None
155+ self .location_service_type = None
156+ self .location_endpoint_type = None
167157
168158 def handle_request (self , api_request , request_handlers = None , context = None ):
169159 # TODO handle different types of request
160+ self .product_code = api_request .get_product ()
161+ self .location_service_code = api_request .get_location_service_code ()
162+ self .location_endpoint_type = api_request .get_location_endpoint_type ()
170163 if not context :
171164 context = RequestContext ()
172165 context .api_request = api_request
173166 from .request import HTTPRequest
174167 context .http_request = HTTPRequest ()
175168 context .config = self .config
169+ context .credentials_provider = self .credentials_provider
170+ context .product_code = self .product_code
171+ context .location_service_code = self .location_service_code
172+ context .location_endpoint_type = self .location_endpoint_type
173+ context .endpoint_resolver = self .endpoint_resolver
176174
177175 if not request_handlers :
178176 request_handlers = self .handlers
179177
180178 for i in range (len (request_handlers )):
181- request_handlers [i ].handle_request (context )
179+ request_handlers [i ]() .handle_request (context )
182180
183181 for i in reversed (range (len (request_handlers ))):
184- request_handlers [i ].handle_response (context )
185- if context .retry_flag :
186- time .sleep (context .retry_backoff )
187- self .handle_request (api_request ,
188- request_handlers = request_handlers [i :],
189- context = context )
190-
191- return context .result
182+ request_handlers [i ]() .handle_response (context )
183+ # if context.retry_flag:
184+ # time.sleep(context.retry_backoff)
185+ # self.handle_request(api_request,
186+ # request_handlers=request_handlers[i:],
187+ # context=context)
188+
189+ return context .response . text
0 commit comments