Exemplo n.º 1
0
    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)
Exemplo n.º 3
0
 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')
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
 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)
Exemplo n.º 7
0
 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)
Exemplo n.º 8
0
 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)
Exemplo n.º 9
0
    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,
        )
Exemplo n.º 10
0
    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)
Exemplo n.º 11
0
 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)
Exemplo n.º 12
0
 def test_hostname_no_dots(self):
     self.assertTrue(is_valid_endpoint_url('https://foo/'))
Exemplo n.º 13
0
 def test_hostname_can_end_with_dot(self):
     self.assertTrue(is_valid_endpoint_url('https://foo.bar.com./'))
Exemplo n.º 14
0
 def test_long_hostname(self):
     long_hostname = 'htps://%s.com' % ('a' * 256)
     self.assertFalse(is_valid_endpoint_url(long_hostname))
Exemplo n.º 15
0
 def test_no_new_lines(self):
     self.assertFalse(is_valid_endpoint_url('https://foo.bar.com\nbar/'))
Exemplo n.º 16
0
 def test_missing_scheme(self):
     self.assertFalse(is_valid_endpoint_url('foo.bar.com'))
Exemplo n.º 17
0
 def test_hostname_can_end_with_dot(self):
     self.assertTrue(is_valid_endpoint_url('https://foo.bar.com./'))
Exemplo n.º 18
0
 def test_no_new_lines(self):
     self.assertFalse(is_valid_endpoint_url('https://foo.bar.com\nbar/'))
Exemplo n.º 19
0
 def test_cannot_have_spaces(self):
     self.assertFalse(is_valid_endpoint_url('https://my invalid name/'))
Exemplo n.º 20
0
 def test_can_have_port(self):
     self.assertTrue(is_valid_endpoint_url('https://foo.bar.com:12345/'))
Exemplo n.º 21
0
 def test_ip_address_is_allowed(self):
     self.assertTrue(is_valid_endpoint_url('https://10.10.10.10/'))
Exemplo n.º 22
0
    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)
Exemplo n.º 23
0
 def test_long_hostname(self):
     long_hostname = "htps://%s.com" % ("a" * 256)
     self.assertFalse(is_valid_endpoint_url(long_hostname))
Exemplo n.º 24
0
 def test_dns_name_is_valid(self):
     self.assertTrue(is_valid_endpoint_url('https://s3.amazonaws.com/'))
Exemplo n.º 25
0
 def test_dns_name_is_valid(self):
     self.assertTrue(is_valid_endpoint_url('https://s3.amazonaws.com/'))
Exemplo n.º 26
0
 def test_path_component_ignored(self):
     self.assertTrue(
         is_valid_endpoint_url('https://foo.bar.com/other/path/'))
Exemplo n.º 27
0
 def test_ip_address_is_allowed(self):
     self.assertTrue(is_valid_endpoint_url('https://10.10.10.10/'))
Exemplo n.º 28
0
 def test_ip_can_have_port(self):
     self.assertTrue(is_valid_endpoint_url('https://10.10.10.10:12345/'))
Exemplo n.º 29
0
 def test_path_component_ignored(self):
     self.assertTrue(
         is_valid_endpoint_url('https://foo.bar.com/other/path/'))
Exemplo n.º 30
0
 def test_missing_scheme(self):
     self.assertFalse(is_valid_endpoint_url('foo.bar.com'))
Exemplo n.º 31
0
 def test_can_have_port(self):
     self.assertTrue(is_valid_endpoint_url('https://foo.bar.com:12345/'))
Exemplo n.º 32
0
 def test_long_hostname(self):
     long_hostname = 'htps://%s.com' % ('a' * 256)
     self.assertFalse(is_valid_endpoint_url(long_hostname))
Exemplo n.º 33
0
 def test_ip_can_have_port(self):
     self.assertTrue(is_valid_endpoint_url('https://10.10.10.10:12345/'))
Exemplo n.º 34
0
 def test_hostname_no_dots(self):
     self.assertTrue(is_valid_endpoint_url('https://foo/'))
Exemplo n.º 35
0
 def test_cannot_have_spaces(self):
     self.assertFalse(is_valid_endpoint_url('https://my invalid name/'))