Я хочу вернуть ответ, не нарушая данные, поступающие из подписки узла в django
async def get_event(self,address): infura_ws_url = 'wss://ropsten.infura.io/ws/v3/7c074579719748599c087f6090c413e2' address_checksumed = self.w3.toChecksumAddress(address) async with connect(infura_ws_url) as ws: await ws.send('{"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["newPendingTransactions"]}') # print("HERE") subscription_response = await ws.recv() print(subscription_response)
while True:
try:
message = await asyncio.wait_for(ws.recv(), timeout=15)
response = json.loads(message)
txHash = response['params']['result']
tx =self.w3.eth.get_transaction(txHash)
if tx.to == address_checksumed :
print("Pending transaction fincoming:")
print({
"hash": txHash,
"from": tx["from"],
"value": self.w3.fromWei(tx["value"], 'ether')
})
transaction_receipt_json = {
"transaction_hash": txHash,
"from": tx["from"],
"value": self.w3.fromWei(tx["value"], 'ether')
}
return transaction_receipt_json
# return Response(transaction_receipt_json)
pass
except Exception as e:
print("Exception")
print(e.args)
print(e.__str__)
pass
@action(detail=False, methods=['GET'], url_path='subscribe-deposit')
def subscribe_deposit_address(self, request):
address = self.request.query_params.get('address')
# get_event.delay(address,)
# return Response('Address subscribed')
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
while True:
resp = loop.run_until_complete(self.get_event(address))
return Response(resp)
когда я вызываю этот API из postman, он подписывается на отложенные tx и возвращает их, когда любая отложенная транзакция содержит мой адрес как пункт назначения, но сразу после возвращения ответа на postman мой запрос заканчивается, и я не хочу, чтобы мой запрос заканчивался, я хочу, чтобы мой запрос не заканчивался, и всякий раз, когда приходит любой отложенный tx, который содержит мой адрес как пункт назначения, он возвращает tx в ответ