def create_endpoint(self, service_model, region_name, endpoint_url, verify=None, response_parser_factory=None, timeout=DEFAULT_TIMEOUT, max_pool_connections=MAX_POOL_CONNECTIONS, http_session_cls=URLLib3Session, proxies=None): if not is_valid_endpoint_url(endpoint_url): raise ValueError("Invalid endpoint: %s" % endpoint_url) if proxies is None: proxies = self._get_proxies(endpoint_url) endpoint_prefix = service_model.endpoint_prefix logger.debug('Setting %s timeout as %s', endpoint_prefix, timeout) http_session = http_session_cls( timeout=timeout, proxies=proxies, verify=self._get_verify_value(verify), max_pool_connections=max_pool_connections, ) return Endpoint( endpoint_url, endpoint_prefix=endpoint_prefix, event_emitter=self._event_emitter, response_parser_factory=response_parser_factory, http_session=http_session )
def create_endpoint(self, service_model, region_name, endpoint_url, verify=None, response_parser_factory=None, timeout=DEFAULT_TIMEOUT, max_pool_connections=MAX_POOL_CONNECTIONS, http_session_cls=URLLib3Session, proxies=None, socket_options=None, client_cert=None, proxies_config=None): if not is_valid_endpoint_url(endpoint_url): raise ValueError("Invalid endpoint: %s" % endpoint_url) if proxies is None: proxies = self._get_proxies(endpoint_url) endpoint_prefix = service_model.endpoint_prefix logger.debug('Setting %s timeout as %s', endpoint_prefix, timeout) http_session = http_session_cls( timeout=timeout, proxies=proxies, verify=self._get_verify_value(verify), max_pool_connections=max_pool_connections, socket_options=socket_options, client_cert=client_cert, proxies_config=proxies_config) return Endpoint(endpoint_url, endpoint_prefix=endpoint_prefix, event_emitter=self._event_emitter, response_parser_factory=response_parser_factory, http_session=http_session)
def validate(self, document): # If there's a default, allow an empty prompt if not document.text and self._default: return if not is_valid_endpoint_url(document.text): index = len(document.text) raise ValidationError(index, 'Not a valid Start URL')
def create_endpoint(self, service_model, region_name=None, is_secure=True, endpoint_url=None, verify=None, response_parser_factory=None): if region_name is None: region_name = self._configured_region # Use the endpoint resolver heuristics to build the endpoint url. scheme = 'https' if is_secure else 'http' try: endpoint = self._endpoint_resolver.construct_endpoint( service_model.endpoint_prefix, region_name, scheme=scheme) except BaseEndpointResolverError: if endpoint_url is not None: # If the user provides an endpoint_url, it's ok # if the heuristics didn't find anything. We use the # user provided endpoint_url. endpoint = {'uri': endpoint_url, 'properties': {}} else: raise if endpoint_url is not None: # If the user provides an endpoint url, we'll use that # instead of what the heuristics rule gives us. final_endpoint_url = endpoint_url else: final_endpoint_url = endpoint['uri'] if not is_valid_endpoint_url(final_endpoint_url): raise ValueError("Invalid endpoint: %s" % final_endpoint_url) return self._get_endpoint(service_model, final_endpoint_url, verify, response_parser_factory)
def create_endpoint(self, service_model, region_name=None, is_secure=True, endpoint_url=None, verify=None, credentials=None, response_parser_factory=None, signature_version=NOT_SET): if region_name is None: region_name = self._configured_region # Use the endpoint resolver heuristics to build the endpoint url. scheme = 'https' if is_secure else 'http' try: endpoint = self._endpoint_resolver.construct_endpoint( service_model.endpoint_prefix, region_name, scheme=scheme) except BaseEndpointResolverError: if endpoint_url is not None: # If the user provides an endpoint_url, it's ok # if the heuristics didn't find anything. We use the # user provided endpoint_url. endpoint = {'uri': endpoint_url, 'properties': {}} else: raise region_name = self._determine_region_name(endpoint, region_name, endpoint_url) if endpoint_url is not None: # If the user provides an endpoint url, we'll use that # instead of what the heuristics rule gives us. final_endpoint_url = endpoint_url else: final_endpoint_url = endpoint['uri'] if not is_valid_endpoint_url(final_endpoint_url): raise ValueError("Invalid endpoint: %s" % final_endpoint_url) return self._get_endpoint(service_model, region_name, final_endpoint_url, verify, response_parser_factory)
def create_endpoint(self, service_model, region_name, endpoint_url, verify=None, response_parser_factory=None, timeout=DEFAULT_TIMEOUT): if not is_valid_endpoint_url(endpoint_url): raise ValueError("Invalid endpoint: %s" % endpoint_url) return Endpoint( endpoint_url, endpoint_prefix=service_model.endpoint_prefix, event_emitter=self._event_emitter, proxies=self._get_proxies(endpoint_url), verify=self._get_verify_value(verify), timeout=timeout, response_parser_factory=response_parser_factory)
def create_endpoint(self, service_model, region_name, endpoint_url, verify=None, response_parser_factory=None, timeout=DEFAULT_TIMEOUT, max_pool_connections=MAX_POOL_CONNECTIONS): if not is_valid_endpoint_url(endpoint_url): raise ValueError("Invalid endpoint: %s" % endpoint_url) return AsyncEndpoint( self.http_session, endpoint_url, endpoint_prefix=service_model.endpoint_prefix, event_emitter=self._event_emitter, proxies=self._get_proxies(endpoint_url), verify=self._get_verify_value(verify), timeout=timeout, max_pool_connections=max_pool_connections, response_parser_factory=response_parser_factory)
def create_endpoint( self, service_model, region_name=None, is_secure=True, endpoint_url=None, verify=None, response_parser_factory=None, timeout=DEFAULT_TIMEOUT, ): if region_name is None: region_name = self._configured_region # Use the endpoint resolver heuristics to build the endpoint url. scheme = "https" if is_secure else "http" try: endpoint = self._endpoint_resolver.construct_endpoint( service_model.endpoint_prefix, region_name, scheme=scheme ) except BaseEndpointResolverError: if endpoint_url is not None: # If the user provides an endpoint_url, it's ok # if the heuristics didn't find anything. We use the # user provided endpoint_url. endpoint = {"uri": endpoint_url, "properties": {}} else: raise if endpoint_url is not None: # If the user provides an endpoint url, we'll use that # instead of what the heuristics rule gives us. final_endpoint_url = endpoint_url else: final_endpoint_url = endpoint["uri"] if not is_valid_endpoint_url(final_endpoint_url): raise ValueError("Invalid endpoint: %s" % final_endpoint_url) proxies = self._get_proxies(final_endpoint_url) verify_value = self._get_verify_value(verify) return Endpoint( final_endpoint_url, endpoint_prefix=service_model.endpoint_prefix, event_emitter=self._event_emitter, proxies=proxies, verify=verify_value, timeout=timeout, response_parser_factory=response_parser_factory, )
def create_endpoint(self, service_model, region_name, endpoint_url, verify=None, response_parser_factory=None, timeout=DEFAULT_TIMEOUT, max_pool_connections=MAX_POOL_CONNECTIONS, proxies=None): if not is_valid_endpoint_url(endpoint_url): raise ValueError("Invalid endpoint: %s" % endpoint_url) if proxies is None: proxies = self._get_proxies(endpoint_url) return Endpoint( endpoint_url, endpoint_prefix=service_model.endpoint_prefix, event_emitter=self._event_emitter, proxies=proxies, verify=self._get_verify_value(verify), timeout=timeout, max_pool_connections=max_pool_connections, response_parser_factory=response_parser_factory)
def create_endpoint(self, service_model, region_name=None, endpoint_url=None, verify=None, response_parser_factory=None, timeout=DEFAULT_TIMEOUT, max_pool_connections=MAX_POOL_CONNECTIONS, proxies=None, connector_args=None): if not is_valid_endpoint_url(endpoint_url): raise ValueError("Invalid endpoint: %s" % endpoint_url) if proxies is None: proxies = self._get_proxies(endpoint_url) return AioEndpoint( endpoint_url, endpoint_prefix=service_model.endpoint_prefix, event_emitter=self._event_emitter, proxies=proxies, verify=self._get_verify_value(verify), timeout=timeout, max_pool_connections=max_pool_connections, response_parser_factory=response_parser_factory, loop=self._loop, connector_args=connector_args)
def test_hostname_no_dots(self): self.assertTrue(is_valid_endpoint_url('https://foo/'))
def test_hostname_can_end_with_dot(self): self.assertTrue(is_valid_endpoint_url('https://foo.bar.com./'))
def test_long_hostname(self): long_hostname = 'htps://%s.com' % ('a' * 256) self.assertFalse(is_valid_endpoint_url(long_hostname))
def test_no_new_lines(self): self.assertFalse(is_valid_endpoint_url('https://foo.bar.com\nbar/'))
def test_missing_scheme(self): self.assertFalse(is_valid_endpoint_url('foo.bar.com'))
def test_cannot_have_spaces(self): self.assertFalse(is_valid_endpoint_url('https://my invalid name/'))
def test_can_have_port(self): self.assertTrue(is_valid_endpoint_url('https://foo.bar.com:12345/'))
def test_ip_address_is_allowed(self): self.assertTrue(is_valid_endpoint_url('https://10.10.10.10/'))
def create_endpoint(self, service_model, region_name, endpoint_url, verify=None, response_parser_factory=None, timeout=DEFAULT_TIMEOUT, max_pool_connections=MAX_POOL_CONNECTIONS, http_session_cls=aiohttp.ClientSession, proxies=None, socket_options=None, client_cert=None, proxies_config=None, connector_args=None): if not is_valid_endpoint_url(endpoint_url): raise ValueError("Invalid endpoint: %s" % endpoint_url) if proxies is None: proxies = self._get_proxies(endpoint_url) endpoint_prefix = service_model.endpoint_prefix logger.debug('Setting %s timeout as %s', endpoint_prefix, timeout) if isinstance(timeout, (list, tuple)): conn_timeout, read_timeout = timeout else: conn_timeout = read_timeout = timeout if connector_args is None: # AWS has a 20 second idle timeout: # https://forums.aws.amazon.com/message.jspa?messageID=215367 # aiohttp default timeout is 30s so set something reasonable here connector_args = dict(keepalive_timeout=12) timeout = aiohttp.ClientTimeout(sock_connect=conn_timeout, sock_read=read_timeout) verify = self._get_verify_value(verify) ssl_context = None if client_cert: if isinstance(client_cert, str): key_file = None cert_file = client_cert elif isinstance(client_cert, tuple): cert_file, key_file = client_cert else: raise TypeError("client_cert must be str or tuple, not %s" % client_cert.__class__.__name__) ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) ssl_context.load_cert_chain(cert_file, key_file) elif isinstance(verify, (str, pathlib.Path)): ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH, cafile=str(verify)) # TODO: add support for proxies_config connector = aiohttp.TCPConnector(limit=max_pool_connections, verify_ssl=bool(verify), ssl=ssl_context, **connector_args) aio_session = http_session_cls(connector=connector, timeout=timeout, skip_auto_headers={'CONTENT-TYPE'}, response_class=ClientResponseProxy, auto_decompress=False) return AioEndpoint(endpoint_url, endpoint_prefix=endpoint_prefix, event_emitter=self._event_emitter, response_parser_factory=response_parser_factory, http_session=aio_session, proxies=proxies)
def test_long_hostname(self): long_hostname = "htps://%s.com" % ("a" * 256) self.assertFalse(is_valid_endpoint_url(long_hostname))
def test_dns_name_is_valid(self): self.assertTrue(is_valid_endpoint_url('https://s3.amazonaws.com/'))
def test_path_component_ignored(self): self.assertTrue( is_valid_endpoint_url('https://foo.bar.com/other/path/'))
def test_ip_can_have_port(self): self.assertTrue(is_valid_endpoint_url('https://10.10.10.10:12345/'))