This commit is contained in:
yumoqing 2025-08-05 18:39:25 +08:00
parent ddbb6071a6
commit db46411c80

View File

@ -32,6 +32,7 @@ async def sync_users(request, upappid, userid):
class UAPI:
def __init__(self, request, env=DictObject()):
self.request = request
self.te = MyTemplateEngine([], env=env)
self.env = env
self.env.request.request = request
@ -92,41 +93,44 @@ class UAPI:
return
if auth_uapi:
await self.do_auth(auth_uapi)
async for line in self.stream_gen(uapi):
yield line
async for chunk in self.stream_resp(uapi):
yield chunk
async def request(self, upappid, upapiid, callerid, params={}):
auth_uapi, uapi = await self.get_uapis(upapiid, apiname,
callerid, params=params)
if auth_uapi:
await self.do_auth(auth_uapi)
return await self.do_call(uapi)
async def request(self, upappid, apiname, callerid, params={}):
b = b''
async for chunk in self(upapiid, apiname, callerid, params=params):
b += chunk
return b
async def do_auth(self, auth_uapi):
b = await self.do_call(auth_uapi)
b = b''
async for chunk in self.stream_resp(auth_uapi):
b+= chunk
d = json.loads(b.encode('utf-8'))
self.env.update(d)
return
async def do_call(self, api, params={}):
async def stream_resp(self, api, params={}):
url = self.env.get('baseurl') + api.path
method = api.httpmethod
header = await self.rendertmpl(api.headers)
header = json.loads(headers)
body = await self.rendertmpl(api.body)
headers = await self.rendertmpl(api.headers)
headers = json.loads(headers)
body = await self.rendertmpl(api.data)
if body:
bdy = json.loads(body)
bdy['stream'] = True
body = json.dumps(bdy, ensure_ascii=False)
_params = await self.rendertmpl(api.params)
if _params:
_params = json.loads(_params)
debug(f'{headers=}, {body=}. {method=}, {url=}')
shc = StreamHttpClient()
b = await shc.request(method, url,
headers=headers,
data=body,
params=_params)
d = json.loads(b.encode('utf-8'))
if api.response:
return await self.rendertmpl(api.response, params=d)
return d
gen = shc(method, url,
headers=headers,
data=body,
params=_params)
async for chunk in gen:
yield chunk
async def stream_gen(self, api, params={}):
url = self.env.get('baseurl') + api.path