def discover()

in awsiot/greengrass_discovery.py [0:0]


    def discover(self, thing_name: str) -> Future:
        """
        Perform discovery.

        This is an asynchronous operation.

        Returns:
            Future a Future which will contain a result of :class:`DiscoverResponse`
            on success, or an exception on failure.
        """

        discovery = dict(
            future=Future(),
            response_body=bytearray())

        def on_incoming_body(http_stream, chunk, **kwargs):
            discovery['response_body'].extend(chunk)

        def on_request_complete(completion_future):
            try:
                response_code = completion_future.result()
                if response_code == 200:
                    payload_str = discovery['response_body'].decode('utf-8')
                    discover_res = DiscoverResponse.from_payload(json.loads(payload_str))
                    discovery['future'].set_result(discover_res)
                else:
                    discovery['future'].set_exception(
                        DiscoveryException(
                            'Error during discover call: response_code={}'.format(response_code),
                            response_code))

            except Exception as e:
                discovery['future'].set_exception(e)

        def on_connection_completed(conn_future):
            try:
                connection = conn_future.result()
                headers = HttpHeaders()
                headers.add('host', self._gg_server_name)
                request = HttpRequest(
                    method='GET',
                    path='/greengrass/discover/thing/{}'.format(thing_name),
                    headers=headers)

                http_stream = connection.request(
                    request=request,
                    on_body=on_incoming_body)

                http_stream.activate()
                http_stream.completion_future.add_done_callback(on_request_complete)

            except Exception as e:
                discovery['future'].set_exception(e)

        connect_future = HttpClientConnection.new(
            host_name=self._gg_server_name,
            port=self.port,
            socket_options=self._socket_options,
            tls_connection_options=self._tls_connection_options,
            bootstrap=self._bootstrap,
            proxy_options=self._proxy_options)

        connect_future.add_done_callback(on_connection_completed)

        return discovery['future']