def init_env(self, test_local_config=None, client=None): resolver_chain = [] self._user_customized_endpoint_resolver = UserCustomizedEndpointResolver( ) if test_local_config is None: self._local_config_regional_endpoint_resolver = LocalConfigRegionalEndpointResolver( ) self._local_config_global_endpoint_resolver = LocalConfigGlobalEndpointResolver( ) else: self._local_config_regional_endpoint_resolver = \ LocalConfigRegionalEndpointResolver(test_local_config) self._local_config_global_endpoint_resolver = \ LocalConfigGlobalEndpointResolver(test_local_config) if client is not None: self._location_service_endpoint_resolver = LocationServiceEndpointResolver( client) else: self._location_service_endpoint_resolver = LocationServiceEndpointResolver( self.client) resolver_chain.append(self._user_customized_endpoint_resolver) resolver_chain.append(self._local_config_regional_endpoint_resolver) resolver_chain.append(self._local_config_global_endpoint_resolver) resolver_chain.append(self._location_service_endpoint_resolver) self._endpoint_resolver = ChainedEndpointResolver(resolver_chain)
class DefaultEndpointResolver(EndpointResolver): # Deprecated use for add_endpoint and modify_endpoint # Not recommended predefined_endpoint_resolver = UserCustomizedEndpointResolver() def __init__(self, client, user_config=None): self._user_customized_endpoint_resolver = UserCustomizedEndpointResolver( ) endpoint_resolvers = [ self.predefined_endpoint_resolver, self._user_customized_endpoint_resolver, LocalConfigRegionalEndpointResolver(user_config), LocalConfigGlobalEndpointResolver(user_config), EndpointResolverRules(), LocationServiceEndpointResolver(client), ] self._resolver = ChainedEndpointResolver(endpoint_resolvers) def resolve(self, request): return self._resolver.resolve(request) def put_endpoint_entry(self, region_id, product_code, endpoint): self._user_customized_endpoint_resolver.put_endpoint_entry( region_id, product_code, endpoint)
def test_resolver(self): user = UserCustomizedEndpointResolver() chain = [ user ] resolver = ChainedEndpointResolver(chain) # can not be resolved request = ResolveEndpointRequest("cn-huhehaote", "ecs", "", "") with self.assertRaises(ClientException) as ex: resolver.resolve(request) self.assertEqual(ex.exception.error_code, "SDK.EndpointResolvingError") self.assertEqual(ex.exception.message, "No endpoint for product 'ecs'.\n" "Please check the product code, or set an endpoint for your request " "explicitly.\n" "See https://www.alibabacloud.com/help/doc-detail/92074.htm\n") user.put_endpoint_entry("cn-huhehaote", "ecs", "my-endpoint-for-cnhuhehaote-ecs") # can not be resolved with cn-hangzhou request = ResolveEndpointRequest("cn-hangzhou", "ecs", "", "") with self.assertRaises(ClientException) as ex: resolver.resolve(request) self.assertEqual(ex.exception.error_code, "SDK.EndpointResolvingError") self.assertEqual( ex.exception.message, "No endpoint in the region 'cn-hangzhou' for product 'ecs'.\n" "You can set an endpoint for your request explicitly.\n" "See https://www.alibabacloud.com/help/doc-detail/92074.htm\n" ) # cn-hangzhou and ecs is valid user.put_endpoint_entry("cn-hangzhou", "rds", "my-endpoint-for-cn-hangzhou-rds") with self.assertRaises(ClientException) as ex: resolver.resolve(request) self.assertEqual(ex.exception.error_code, "SDK.EndpointResolvingError") self.assertEqual( ex.exception.message, "No endpoint in the region 'cn-hangzhou' for product 'ecs'.\n" "You can set an endpoint for your request explicitly.\n" "See https://www.alibabacloud.com/help/doc-detail/92074.htm\n") # can be resolved request = ResolveEndpointRequest("cn-huhehaote", "ecs", "", "") self.assertEqual(resolver.resolve(request), "my-endpoint-for-cnhuhehaote-ecs") chain = [ LocalConfigRegionalEndpointResolver(), user ] resolver = ChainedEndpointResolver(chain) request.request_network = 'inner' endpoint = resolver.resolve(request) self.assertEqual('my-endpoint-for-cnhuhehaote-ecs', endpoint)
def __init__(self, client, user_config=None): self._user_customized_endpoint_resolver = UserCustomizedEndpointResolver() endpoint_resolvers = [ self.predefined_endpoint_resolver, self._user_customized_endpoint_resolver, LocalConfigRegionalEndpointResolver(user_config), LocalConfigGlobalEndpointResolver(user_config), LocationServiceEndpointResolver(client), ] self._resolver = ChainedEndpointResolver(endpoint_resolvers)
def test_resolver(self): resolver = UserCustomizedEndpointResolver() request = ResolveEndpointRequest("", "", "", "") self.assertEqual(resolver.resolve(request), None) self.assertEqual(resolver._make_endpoint_entry_key( "ecs", "cn-huhehaote"), "ecs.cn-huhehaote") request = ResolveEndpointRequest("cn-huhehaote", "ecs", "", "") self.assertEqual(resolver.resolve(request), None) self.assertFalse(resolver.is_region_id_valid("cn-huhehaote")) resolver.put_endpoint_entry( "cn-huhehaote", "ecs", "my-endpoint-for-cnhuhehaote-ecs") request = ResolveEndpointRequest("cn-huhehaote", "ecs", "", "") self.assertEqual(resolver.resolve(request), "my-endpoint-for-cnhuhehaote-ecs") self.assertTrue(resolver.is_region_id_valid("cn-huhehaote")) resolver.reset() self.assertEqual(resolver.resolve(request), None)
def test_resolver(self): user = UserCustomizedEndpointResolver() chain = [user] resolver = ChainedEndpointResolver(chain) # can not be resolved request = ResolveEndpointRequest("cn-huhehaote", "ecs", "", "") with self.assertRaises(ClientException) as ex: resolver.resolve(request) self.assertEqual(ex.exception.error_code, "SDK.EndpointResolvingError") self.assertEqual( ex.exception.message, "No endpoint for product 'ecs'. \n" "Please check the product code, or set an endpoint for your request explicitly.\n" "See https://www.alibabacloud.com/help/doc-detail/92074.htm\n") user.put_endpoint_entry("cn-huhehaote", "ecs", "my-endpoint-for-cnhuhehaote-ecs") # can be resolved request = ResolveEndpointRequest("cn-huhehaote", "ecs", "", "") self.assertEqual(resolver.resolve(request), "my-endpoint-for-cnhuhehaote-ecs")
def setUp(self): SDKTestBase.setUp(self) DefaultEndpointResolver.predefined_endpoint_resolver = UserCustomizedEndpointResolver( )