48 lines
1.2 KiB
Python
48 lines
1.2 KiB
Python
|
|
import inspect
|
|
from appPublic.dictObject import DictObject
|
|
from appPublic.registerfunction import RegisterFunction
|
|
from aiohttp import web
|
|
from aiohttp.web_response import Response, StreamResponse
|
|
from .baseProcessor import BaseProcessor
|
|
|
|
class FunctionProcessor(BaseProcessor):
|
|
@classmethod
|
|
def isMe(self,name):
|
|
return False
|
|
|
|
def __init__(self,path,resource, opts):
|
|
self.config_opts = opts
|
|
BaseProcessor.__init__(self,path,resource)
|
|
|
|
async def path_call(self, request, path):
|
|
path1 = request.path[len(self.config_opts['leading']):]
|
|
print('path1=',path1)
|
|
args = []
|
|
if len(path1) > 0:
|
|
if path1[0] == '/':
|
|
path1 = path1[1:]
|
|
args = path1.split('/')
|
|
|
|
|
|
print('FunctionProcessor():args=',args)
|
|
rfname = self.config_opts['registerfunction']
|
|
ns = DictObject(**self.run_ns)
|
|
rf = RegisterFunction()
|
|
f = rf.get(rfname)
|
|
self.run_ns['request'] = request
|
|
globals().update(self.run_ns)
|
|
if inspect.iscoroutinefunction(f):
|
|
return await f(*args, **self.run_ns)
|
|
return f(*args)
|
|
|
|
async def datahandle(self,request):
|
|
x = await self.path_call(request, self.path)
|
|
if isinstance(x,Response):
|
|
self.retResponse = x
|
|
elif isinstance(x,web.FileResponse):
|
|
self.retResponse = x
|
|
else:
|
|
self.content = x
|
|
|