diff --git a/README.md b/README.md index 77805e4..4efae97 100755 --- a/README.md +++ b/README.md @@ -424,3 +424,27 @@ async with db.sqlorContext('dbname') as sor: ### classes * ArgsConvert + +## Change logs + +### 1.0.8 +#### server_error(errcode) +add a new global function named "server_error(errcode)", it will raise a HTTPException, errcode should be one of: +* 400 aiohttp.web.HTTPBadRequest 错误请求 +* 401 aiohttp.web.HTTPUnauthorized 未认证 +* 403 aiohttp.web.HTTPForbidden 禁止访问 +* 404 aiohttp.web.HTTPNotFound 未找到 +* 405 aiohttp.web.HTTPMethodNotAllowed 方法不允许 +* 408 aiohttp.web.HTTPRequestTimeout 请求超时 +* 409 aiohttp.web.HTTPConflict 冲突 +* 410 aiohttp.web.HTTPGone 已删除 +* 415 aiohttp.web.HTTPUnsupportedMediaType 不支持的媒体类型 +* 429 aiohttp.web.HTTPTooManyRequests 请求过多 +* 500 aiohttp.web.HTTPInternalServerError 服务器错误 +* 502 aiohttp.web.HTTPBadGateway 错误网关 +* 503 aiohttp.web.HTTPServiceUnavailable 服务不可用 + +else it will raise HTTPException exception +#### request._run_ns +global environment now can access from request._run_ns, it contains all the globals variable in ServerEnv and related variables of request + diff --git a/ahserver/baseProcessor.py b/ahserver/baseProcessor.py index a34b2e0..486f874 100644 --- a/ahserver/baseProcessor.py +++ b/ahserver/baseProcessor.py @@ -80,6 +80,8 @@ class BaseProcessor: self.run_ns['ref_real_path'] = self.real_path self.run_ns['processor'] = self self.env_set = True + request['run_ns'] = self.run_ns + request._run_ns = self.run_ns async def execute(self,request): await self.set_run_env(request) diff --git a/ahserver/globalEnv.py b/ahserver/globalEnv.py index 6567ff0..07b1904 100644 --- a/ahserver/globalEnv.py +++ b/ahserver/globalEnv.py @@ -7,8 +7,25 @@ from urllib.parse import quote import json import asyncio from aiohttp import BasicAuth +from aiohttp.web import ( + HTTPException, + HTTPBadRequest, + HTTPUnauthorized, + HTTPForbidden, + HTTPNotFound, + HTTPMethodNotAllowed, + HTTPRequestTimeout, + HTTPConflict, + HTTPGone, + HTTPUnsupportedMediaType, + HTTPTooManyRequests, + HTTPInternalServerError, + HTTPBadGateway, + HTTPServiceUnavailable + ) from traceback import format_exc from functools import partial +from aiohttp_session import get_session import random import time @@ -46,6 +63,25 @@ from .filedownload import path_download, file_download from .filestorage import FileStorage from .serverenv import ServerEnv +def server_error(errcode): + exceptions = { + 400: HTTPBadRequest, + 401: HTTPUnauthorized, + 403: HTTPForbidden, + 404: HTTPNotFound, + 405: HTTPMethodNotAllowed, + 408: HTTPRequestTimeout, + 409: HTTPConflict, + 410: HTTPGone, + 415: HTTPUnsupportedMediaType, + 429: HTTPTooManyRequests, + 500: HTTPInternalServerError, + 502: HTTPBadGateway, + 503: HTTPServiceUnavailable + } + E = exceptions.get(errcode, HTTPException) + raise E() + def basic_auth_headers(user, passwd): ba = BasicAuth(login=user, password=passwd) return { @@ -275,6 +311,7 @@ def initEnv(): g.path_download = path_download g.partial = partial g.StreamHttpClient = StreamHttpClient + g.server_error = server_error def set_builtins(): all_builtins = [ i for i in dir(builtins) if not i.startswith('_')] diff --git a/ahserver/xtermProcessor.py b/ahserver/xtermProcessor.py index daa4bac..d62d627 100644 --- a/ahserver/xtermProcessor.py +++ b/ahserver/xtermProcessor.py @@ -24,7 +24,7 @@ class XtermProcessor(PythonScriptProcessor): async def ws_2_process(self, ws): async for msg in ws: if msg.type == aiohttp.WSMsgType.TEXT: - # debug(f'recv from ws:{msg}.................') + debug(f'recv from ws:{msg}.................') data = DictObject(**json.loads(msg.data)) if data.type == 'input': self.p_obj.stdin.write(data.data) @@ -34,7 +34,8 @@ class XtermProcessor(PythonScriptProcessor): try: debug(f'{data=}') #self.p_obj._chan.change_terminal_size(data.rows, data.cols, data.width, data.height) - self.p_obj._chan.change_terminal_size(data.rows, data.cols) + # self.p_obj._chan.change_terminal_size(data.rows, data.cols) + self.p_obj._chan.change_terminal_size(data.cols, data.rows) except Exception as e: exception(f'{data=}, {e=}, {format_exc()}') @@ -84,6 +85,7 @@ class XtermProcessor(PythonScriptProcessor): r1 = self.ws_2_process(ws) r2 = self.process_2_ws(ws) await asyncio.gather(r1,r2) + debug(f'run_xterm() ended') async def ws_send_heartbeat(self, ws): dic = { diff --git a/setup.cfg b/setup.cfg index ba2d167..06e3d25 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,7 +1,7 @@ # setup.cfg [metadata] name = ahserver -version = 1.0.6 +version = 1.0.9 description = A application server base on aiohttp author = yu moqing author_email = yumoqing@gmail.com