如何在Python中使用特定方法创建可等待对象

0lvr5msh  于 2023-10-21  发布在  Python
关注(0)|答案(1)|浏览(139)

有一个基于aiohttp的服务器,看起来像:

import aiohttp
routes = web.RouteTableDef()
@routes.post('/route1')
async def route1(request):
    req_json = await request.json()
    step1 = func1(req_json)
    step2 = func2(step1)
    return web.Response(body=step2, status=200)

我想在本地测试该服务器,而不运行整个服务器,特别是route1中的step1和step2函数。
所以我做了:

import asyncio
from myserver import route1
json_request = {"some": "data"}
loop = asyncio.get_event_loop()
loop.run_until_complete(route1(json_request))

问题是,在运行本地测试时,我必须将req_json = await request.json()替换为req_json = request。如何使用.json()方法创建可等待的变量来代替json_request dict?

plupiseo

plupiseo1#

要使这条线工作:await request.json(),实际上并不需要request对象是可等待的。它可以是具有.json()属性的普通对象,该属性 “是” 可等待对象。协程是一个合理的选择。
就像这样:

import asyncio
from myserver import route1

class CustomRequest:
    def __init__(self, data: dict) -> None:
        self.data = data

    async def json(self) -> dict:
        return self.data
        
json_request = {"some": "data"}
request_object = CustomRequest(json_request)
asyncio.run(route1(request_object))

相关问题