bugfix
This commit is contained in:
parent
5f00823b3c
commit
1b53d9e81d
@ -97,13 +97,19 @@ class BaseProcessor(AppLogger):
|
|||||||
if self.retResponse is not None:
|
if self.retResponse is not None:
|
||||||
self.set_response_headers(self.retResponse)
|
self.set_response_headers(self.retResponse)
|
||||||
return self.retResponse
|
return self.retResponse
|
||||||
elif type(self.content) == type({}) :
|
elif isinstance(self.content, DictObject):
|
||||||
self.content = json.dumps(self.content, indent=4)
|
self.content = json.dumps(self.content, indent=4)
|
||||||
jsonflg = True
|
jsonflg = True
|
||||||
elif type(self.content) == type([]):
|
elif isinstance(self.content, dict):
|
||||||
self.content = json.dumps(self.content, indent=4)
|
self.content = json.dumps(self.content, indent=4)
|
||||||
jsonflg = True
|
jsonflg = True
|
||||||
elif type(self.content) == type(b''):
|
elif isinstance(self.content, list):
|
||||||
|
self.content = json.dumps(self.content, indent=4)
|
||||||
|
jsonflg = True
|
||||||
|
elif isinstance(self.content, tuple):
|
||||||
|
self.content = json.dumps(self.content, indent=4)
|
||||||
|
jsonflg = True
|
||||||
|
elif isinstance(self.content, bytes):
|
||||||
self.headers['Access-Control-Expose-Headers'] = 'Set-Cookie'
|
self.headers['Access-Control-Expose-Headers'] = 'Set-Cookie'
|
||||||
self.headers['Content-Length'] = str(len(self.content))
|
self.headers['Content-Length'] = str(len(self.content))
|
||||||
resp = Response(body=self.content,headers=self.headers)
|
resp = Response(body=self.content,headers=self.headers)
|
||||||
|
@ -13,6 +13,7 @@ from openpyxl import Workbook
|
|||||||
from tempfile import mktemp
|
from tempfile import mktemp
|
||||||
|
|
||||||
from appPublic.jsonConfig import getConfig
|
from appPublic.jsonConfig import getConfig
|
||||||
|
from appPublic.dictObject import DictObject
|
||||||
from appPublic.Singleton import GlobalEnv
|
from appPublic.Singleton import GlobalEnv
|
||||||
from appPublic.argsConvert import ArgsConvert
|
from appPublic.argsConvert import ArgsConvert
|
||||||
from appPublic.timeUtils import str2Date,str2Datetime,curDatetime,getCurrentTimeStamp,curDateString, curTimeString
|
from appPublic.timeUtils import str2Date,str2Datetime,curDatetime,getCurrentTimeStamp,curDateString, curTimeString
|
||||||
@ -144,19 +145,12 @@ def file_download(request,path,name,coding='utf8'):
|
|||||||
def initEnv():
|
def initEnv():
|
||||||
pool = DBPools()
|
pool = DBPools()
|
||||||
g = ServerEnv()
|
g = ServerEnv()
|
||||||
|
set_builtins()
|
||||||
g.configValue = configValue
|
g.configValue = configValue
|
||||||
g.visualcoding = visualcoding
|
g.visualcoding = visualcoding
|
||||||
g.uriop = URIOp
|
g.uriop = URIOp
|
||||||
g.isNone = isNone
|
g.isNone = isNone
|
||||||
g.len = len
|
|
||||||
g.print = print
|
|
||||||
g.json = json
|
g.json = json
|
||||||
g.Exception = Exception
|
|
||||||
g.int = int
|
|
||||||
g.str = str
|
|
||||||
g.float = float
|
|
||||||
g.complex = complex
|
|
||||||
g.type = type
|
|
||||||
g.ArgsConvert = ArgsConvert
|
g.ArgsConvert = ArgsConvert
|
||||||
g.time = time
|
g.time = time
|
||||||
g.curDateString = curDateString
|
g.curDateString = curDateString
|
||||||
@ -191,7 +185,7 @@ def initEnv():
|
|||||||
g.current_fileno = current_fileno
|
g.current_fileno = current_fileno
|
||||||
g.get_config_value = get_config_value
|
g.get_config_value = get_config_value
|
||||||
g.get_definition = get_definition
|
g.get_definition = get_definition
|
||||||
set_builtins()
|
g.DictObject = DictObject
|
||||||
|
|
||||||
def set_builtins():
|
def set_builtins():
|
||||||
all_builtins = [ i for i in dir(builtins) if not i.startswith('_')]
|
all_builtins = [ i for i in dir(builtins) if not i.startswith('_')]
|
||||||
@ -199,4 +193,3 @@ def set_builtins():
|
|||||||
gg = globals()
|
gg = globals()
|
||||||
for l in all_builtins:
|
for l in all_builtins:
|
||||||
exec(f'g["{l}"] = {l}',{'g':g})
|
exec(f'g["{l}"] = {l}',{'g':g})
|
||||||
print(f'{g.sorted=}, {sorted=}, globalEnv.py')
|
|
||||||
|
@ -24,22 +24,18 @@ class LlmProxy:
|
|||||||
return l
|
return l
|
||||||
|
|
||||||
async def write_chunk(self, l):
|
async def write_chunk(self, l):
|
||||||
l = self.line_chunk_match(l)
|
try:
|
||||||
d = DictObject(** json.loads(l))
|
l = self.line_chunk_match(l)
|
||||||
content = d.get_data_by_keys(self.api.content_keys)
|
d = DictObject(** json.loads(l))
|
||||||
finished = d.get_data_by_keys(self.api.finished_keys)
|
j = {}
|
||||||
tokens = {}
|
for r in self.api.resp or []:
|
||||||
if finished:
|
j[r.name] = d.get_data_by_keys(r.value);
|
||||||
tokens = d.get_data_by_keys(self.api.tokens_keys)
|
|
||||||
|
|
||||||
j = {
|
jstr = json.dumps(j) + '\n'
|
||||||
'content':content,
|
bin = jstr.encode('utf-8')
|
||||||
'finish':False,
|
await self.resp.write(bin)
|
||||||
'token':tokens
|
except Exception as e:
|
||||||
}
|
print(f'Write_chunk("{l}") errpr:{e=}')
|
||||||
jstr = json.dumps(j) + '\n'
|
|
||||||
bin = jstr.encode('utf-8')
|
|
||||||
await self.resp.write(bin)
|
|
||||||
|
|
||||||
async def stream_handle(self, chunk):
|
async def stream_handle(self, chunk):
|
||||||
chunk = chunk.decode('utf-8')
|
chunk = chunk.decode('utf-8')
|
||||||
@ -53,22 +49,21 @@ class LlmProxy:
|
|||||||
continue
|
continue
|
||||||
await self.write_chunk(l)
|
await self.write_chunk(l)
|
||||||
|
|
||||||
async def get_apikey(self, apiname, user):
|
async def get_apikey(self, apiname):
|
||||||
f = self.processor.run_ns.get_llm_user_apikey
|
f = self.processor.run_ns.get_llm_user_apikey
|
||||||
if f:
|
if f:
|
||||||
# return a DictObject instance
|
# return a DictObject instance
|
||||||
return await f(apiname, user)
|
return await f(apiname, self.user)
|
||||||
raise Exception('get_llm_user_apikey() function not found in ServerEnv')
|
raise Exception('get_llm_user_apikey() function not found in ServerEnv')
|
||||||
|
|
||||||
async def do_auth(self, request):
|
async def do_auth(self, request):
|
||||||
d = self.desc.auth
|
d = self.desc.auth
|
||||||
user = await self.processor.run_ns.get_user()
|
self.data = self.get_data(self.name)
|
||||||
self.data = self.get_data(self.name, user)
|
|
||||||
if self.data.authed:
|
if self.data.authed:
|
||||||
return
|
return
|
||||||
self.data = await self.get_apikey(self.name, user)
|
self.data = await self.get_apikey(self.name)
|
||||||
if self.data is None:
|
if self.data is None:
|
||||||
raise Exception(f'user({user}) do not has a apikey for {self.name}')
|
raise Exception(f'user({self.user}) do not has a apikey for {self.name}')
|
||||||
method = d.get('method', 'POST')
|
method = d.get('method', 'POST')
|
||||||
headers = {}
|
headers = {}
|
||||||
for h in d.get('headers',{}):
|
for h in d.get('headers',{}):
|
||||||
@ -93,24 +88,25 @@ class LlmProxy:
|
|||||||
for sd in d.set_data:
|
for sd in d.set_data:
|
||||||
self.data[sd.name] = resp_data.get_data_by_keys(sd.field)
|
self.data[sd.name] = resp_data.get_data_by_keys(sd.field)
|
||||||
self.data.authed = True
|
self.data.authed = True
|
||||||
self.set_data(self.name, user, self.data)
|
self.set_data(self.name, self.data)
|
||||||
|
|
||||||
def data_key(self, apiname, user):
|
def data_key(self, apiname):
|
||||||
if user is None:
|
if self.user is None:
|
||||||
user = 'anoumous'
|
self.user = 'anonymous'
|
||||||
return apiname + '_a_' + user
|
return apiname + '_a_' + self.user
|
||||||
|
|
||||||
def set_data(self, apiname, user, data):
|
def set_data(self, apiname, data):
|
||||||
request = self.processor.run_ns.request
|
request = self.processor.run_ns.request
|
||||||
app = request.app
|
app = request.app
|
||||||
app.set_data(self.data_key(apiname, user), data)
|
app.set_data(self.data_key(apiname), data)
|
||||||
|
|
||||||
def get_data(self, apiname, user):
|
def get_data(self, apiname):
|
||||||
request = self.processor.run_ns.request
|
request = self.processor.run_ns.request
|
||||||
app = request.app
|
app = request.app
|
||||||
return app.get_data(self.data_key(apiname, user))
|
return app.get_data(self.data_key(apiname))
|
||||||
|
|
||||||
async def __call__(self, request, params):
|
async def __call__(self, request, params):
|
||||||
|
self.user = await self.processor.run_ns.get_user()
|
||||||
mapi = params.mapi
|
mapi = params.mapi
|
||||||
stream = params.stream
|
stream = params.stream
|
||||||
self.resp = web.StreamResponse()
|
self.resp = web.StreamResponse()
|
||||||
@ -125,6 +121,9 @@ class LlmProxy:
|
|||||||
self.chunk_match = d.chunk_match
|
self.chunk_match = d.chunk_match
|
||||||
if self.api.need_auth and self.auth_api:
|
if self.api.need_auth and self.auth_api:
|
||||||
await self.do_auth(request)
|
await self.do_auth(request)
|
||||||
|
else:
|
||||||
|
self.data = await self.get_apikey(self.name)
|
||||||
|
|
||||||
assert d.get('url')
|
assert d.get('url')
|
||||||
method = d.get('method', 'POST')
|
method = d.get('method', 'POST')
|
||||||
headers = {}
|
headers = {}
|
||||||
@ -137,6 +136,7 @@ class LlmProxy:
|
|||||||
for p in d.get('params', {}):
|
for p in d.get('params', {}):
|
||||||
myparams[p.get('name')] = p.get('value')
|
myparams[p.get('name')] = p.get('value')
|
||||||
url = d.get('url')
|
url = d.get('url')
|
||||||
|
print(f'show me self.data={self.data}')
|
||||||
_params = self.datalize(myparams, params)
|
_params = self.datalize(myparams, params)
|
||||||
_headers = self.datalize(headers, params)
|
_headers = self.datalize(headers, params)
|
||||||
_data = self.datalize(mydata, params)
|
_data = self.datalize(mydata, params)
|
||||||
|
Loading…
Reference in New Issue
Block a user