add dbadm

This commit is contained in:
yumoqing 2020-04-22 11:37:20 +08:00
parent 038e3cccdf
commit 77d8ca3288
2 changed files with 72 additions and 1 deletions

61
ahserver/dbadmin.py Normal file
View File

@ -0,0 +1,61 @@
import os
import re
import traceback
from aiohttp.web_urldispatcher import StaticResource, _WebHandler, PathLike
from aiohttp.web_urldispatcher import Optional, _ExpectHandler
from aiohttp.web_urldispatcher import Path
from aiohttp.web_response import Response, StreamResponse
from aiohttp.web_exceptions import (
HTTPException,
HTTPExpectationFailed,
HTTPForbidden,
HTTPMethodNotAllowed,
HTTPNotFound,
)
from aiohttp import web
from aiohttp.web_fileresponse import FileResponse
from aiohttp.web_request import Request
from aiohttp.web_response import Response, StreamResponse
from aiohttp.web_routedef import AbstractRouteDef
from aiohttp.web import json_response
from sqlor.crud import CRUD
from appPublic.dictObject import multiDict2Dict
from appPublic.jsonConfig import getConfig
from .error import Error,Success
actions = [
"browse",
"add",
"update",
"filter"
]
class DBAdmin:
def __init__(self, request,dbname,tablename, action):
self.dbname = dbname
self.tablename = tablename
self.request = request
self.action = action
if action not in actions:
print('action not defined',action)
raise HTTPNotFound
try:
self.crud = CRUD(dbname,tablename)
except Exception as e:
print('e=',e)
traceback.print_exc()
raise HTTPNotFound
async def render(self) -> Response:
try:
d = await self.crud.I()
return json_response(Success(d))
except Exception as e:
print(e)
traceback.print_exc()
return json_response(Error(errno='metaerror',msg='get metadata error'))

View File

@ -29,6 +29,7 @@ from .serverenv import ServerEnv
from .url2file import Url2File from .url2file import Url2File
from .filestorage import FileStorage from .filestorage import FileStorage
from .restful import DBCrud from .restful import DBCrud
from .dbadmin import DBAdmin
from .filedownload import file_download, path_decode from .filedownload import file_download, path_decode
def getHeaderLang(request): def getHeaderLang(request):
@ -172,6 +173,15 @@ class ProcessorResource(StaticResource,Url2File):
self.y_env.gethost = gethost self.y_env.gethost = gethost
path = request.path path = request.path
config = getConfig() config = getConfig()
if config.website.dbadm and path.startswith(config.website.dbadm):
pp = path.split('/')[2:]
if len(pp)<3:
raise HTTPNotFound
dbname = pp[0]
tablename = pp[1]
action = pp[2]
adm = DBAdmin(request,dbname,tablename,action)
return await adm.render()
if config.website.dbrest and path.startswith(config.website.dbrest): if config.website.dbrest and path.startswith(config.website.dbrest):
pp = path.split('/')[2:] pp = path.split('/')[2:]
if len(pp)<2: if len(pp)<2:
@ -206,7 +216,7 @@ class ProcessorResource(StaticResource,Url2File):
if self.isFolder(path): if self.isFolder(path):
config = getConfig() config = getConfig()
if not config.website.allowListFolder: if not config.website.allowListFolder:
Raise HTTPNotFound raise HTTPNotFound
return await super()._handle(request) return await super()._handle(request)
def absUrl(self,request,url): def absUrl(self,request,url):