@@ -52,11 +52,9 @@ class ClientConfig:
5252 """
5353 处理client级别的所有的参数
5454 """
55- ENV_NAME_FOR_CONFIG_FILE = 'ALIBABA_CLOUD_CONFIG_FILE'
56- DEFAULT_NAME_FOR_CONFIG_FILE = ['/etc/.alibabacloud/config' ,
57- '~/.alibabacloud/config' ]
5855
59- def __init__ (self , access_key_id = None , access_key_secret = None , region_id = None ,
56+ def __init__ (self , access_key_id = None , access_key_secret = None , bearer_token = None ,
57+ secret_token = None , region_id = None ,
6058 enable_retry_policy = None , max_retry_times = None , user_agent = None ,
6159 extra_user_agent = None , enable_https = None , http_port = None , https_port = None ,
6260 connection_timeout = None , read_timeout = None , enable_http_debug = None ,
@@ -65,6 +63,9 @@ def __init__(self, access_key_id=None, access_key_secret=None, region_id=None,
6563
6664 self .access_key_id = access_key_id
6765 self .access_key_secret = access_key_secret
66+ self .secret_token = secret_token
67+ self .bearer_token = bearer_token
68+
6869 self .region_id = region_id
6970 self .enable_retry_policy = enable_retry_policy
7071 self .max_retry_times = max_retry_times
@@ -96,22 +97,25 @@ def read_from_env(self):
9697 # setattr(self, item.lower(), os.environ.get(item) or os.environ.get(item.lower()))
9798
9899 def read_from_profile (self ):
100+ ENV_NAME_FOR_CONFIG_FILE = 'ALIBABA_CLOUD_CONFIG_FILE'
101+ DEFAULT_NAME_FOR_CONFIG_FILE = ['/etc/.alibabacloud/config' ,
102+ '~/.alibabacloud/config' ]
99103 # TODO read from profile
100104 from alibabacloud .utils .ini_helper import load_config
101105 profile = {}
102106 loaded_config = {}
103107 if self .config_file is None :
104- if self . ENV_NAME_FOR_CONFIG_FILE in os .environ :
108+ if ENV_NAME_FOR_CONFIG_FILE in os .environ :
105109
106- env_config_file_path = os .environ .get (self . ENV_NAME_FOR_CONFIG_FILE )
110+ env_config_file_path = os .environ .get (ENV_NAME_FOR_CONFIG_FILE )
107111 if env_config_file_path is None or len (env_config_file_path ) == 0 :
108112 # 默认配置不存在
109113 return None
110114 full_path = os .path .expanduser (env_config_file_path )
111115 loaded_config = load_config (full_path )
112116 profile = loaded_config .get (self .profile_name , {})
113117 else :
114- potential_locations = self . DEFAULT_NAME_FOR_CONFIG_FILE
118+ potential_locations = DEFAULT_NAME_FOR_CONFIG_FILE
115119 for filename in potential_locations :
116120 try :
117121 loaded_config = load_config (filename )
@@ -135,9 +139,9 @@ def read_from_default(self):
135139
136140
137141def get_merged_client_config (config ):
138- config .read_from_env ()
139- config .read_from_profile ()
140- config .read_from_default ()
142+ # config.read_from_env()
143+ # config.read_from_profile()
144+ # config.read_from_default()
141145 return config
142146
143147
@@ -157,6 +161,9 @@ def __init__(self, client_config, credentials_provider=DefaultCredentialsProvide
157161
158162 def handle_request (self , api_request , request_handlers = None , context = None ):
159163 # TODO handle different types of request
164+ from aliyunsdkcore .request import CommonRequest
165+ if isinstance (api_request , CommonRequest ):
166+ api_request .trans_to_acs_request ()
160167 self .product_code = api_request .get_product ()
161168 self .location_service_code = api_request .get_location_service_code ()
162169 self .location_endpoint_type = api_request .get_location_endpoint_type ()
@@ -171,6 +178,8 @@ def handle_request(self, api_request, request_handlers=None, context=None):
171178 context .location_service_code = self .location_service_code
172179 context .location_endpoint_type = self .location_endpoint_type
173180 context .endpoint_resolver = self .endpoint_resolver
181+ # credentials 是和请求解耦的,从请求的流程来看,不应该放在handle当中
182+ context .credentials = self .get_credentials ()
174183
175184 if not request_handlers :
176185 request_handlers = self .handlers
@@ -186,4 +195,23 @@ def handle_request(self, api_request, request_handlers=None, context=None):
186195 # request_handlers=request_handlers[i:],
187196 # context=context)
188197
189- return context .response .text
198+ return context .response
199+
200+ def get_credentials (self ):
201+ credentials_provider = self .credentials_provider ({
202+ 'access_key_id' : self .config .access_key_id ,
203+ 'access_key_secret' : self .config .access_key_secret ,
204+ 'secret_token' : self .config .secret_token ,
205+ 'bearer_token' : self .config .bearer_token ,
206+ 'profile_name' : 'client5'
207+ })
208+ credentials = credentials_provider .load_credentials ()
209+ if credentials is None :
210+ from aliyunsdkcore .acs_exception .exceptions import ClientException
211+ raise ClientException (
212+ 'Credentials' ,
213+ 'Unable to locate credentials.'
214+ )
215+ return credentials
216+
217+
0 commit comments