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']