Я хочу вернуть ответ, не нарушая данные, поступающие из подписки узла в 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 в ответ

Вернуться на верх