diff --git a/app/fileMGR.py b/app/fileMGR.py new file mode 100644 index 0000000..68424d2 --- /dev/null +++ b/app/fileMGR.py @@ -0,0 +1,20 @@ +from bricks_for_python.init import load_bricks +from appbase.init import load_appbase +from rbac.init import load_rbac +from filemgr.init import load_filemgr +from ahserver.webapp import webapp + +def get_module_dbname(mn): + return 'sage' + +def init(): + g = ServerEnv() + g.get_module_dbname = get_module_dbname + load_appbase() + load_rbac() + load_filemgr() + load_bricks() + +if __name__ == '__main__': + webapp(init) + diff --git a/conf/config.json b/conf/config.json new file mode 100755 index 0000000..69adf6d --- /dev/null +++ b/conf/config.json @@ -0,0 +1,77 @@ +{ + "password_key":"!@#$%^&*(*&^%$QWERTYUIqwertyui234567", + "logger":{ + "name":"sage", + "levelname":"clientinfo", + "logfile":"$[workdir]$/logs/sage.log" + }, + "filesroot":"$[workdir]$/files", + "databases":{ + "mediadb":{ + "driver":"aiomysql", + "async_mode":true, + "coding":"utf8", + "maxconn":100, + "dbname":"mediadb", + "kwargs":{ + "user":"test", + "db":"mediadb", + "password":"QUZVcXg5V1p1STMybG5Ia6mX9D0v7+g=", + "host":"localhost" + } + } + }, + "website":{ + "paths":[ + ["$[workdir]$/wwwroot",""] + ], + "client_max_size":20000, + "host":"0.0.0.0", + "port":9080, + "coding":"utf-8", + "indexes":[ + "index.html", + "index.tmpl", + "index.ui", + "index.dspy", + "index.md" + ], + "startswiths":[ + { + "leading":"/idfile", + "registerfunction":"idfile" + } + ], + "processors":[ + [".ws","ws"], + [".xterm","xterm"], + [".proxy","proxy"], + [".llm", "llm"], + [".llms", "llms"], + [".llma", "llma"], + [".xlsxds","xlsxds"], + [".sqlds","sqlds"], + [".tmpl.js","tmpl"], + [".tmpl.css","tmpl"], + [".html.tmpl","tmpl"], + [".bcrud", "bricks_crud"], + [".tmpl","tmpl"], + [".app","app"], + [".bui","bui"], + [".ui","bui"], + [".dspy","dspy"], + [".md","md"] + ], + "session_max_time":3000, + "session_issue_time":2500, + "session_redis_oops":{ + "url":"redis://127.0.0.1:6379" + } + }, + "langMapping":{ + "zh-Hans-CN":"zh-cn", + "zh-CN":"zh-cn", + "en-us":"en", + "en-US":"en" + } +} diff --git a/filemgr/filemgr.py b/filemgr/filemgr.py index c3ead16..35ead4d 100644 --- a/filemgr/filemgr.py +++ b/filemgr/filemgr.py @@ -1,7 +1,10 @@ +from traceback import format_exc from ahserver.serverenv import get_serverenv -from appPublic.uniqueID import getID -from sqlor.dbpools import DBPools from ahserver.auth_api import get_userinfo +from sqlor.dbpools import DBPools +from appPublic.uniqueID import getID +from appPublic.log import debug, error, exception +from appbase.params import get_parmas def get_dbname(): f = get_serverenv('get_module_dbname') @@ -33,9 +36,11 @@ class FileMgr: ns['orgid'] = userinfo.userorgid, ns['biztype'] = self.biztype ns['id'] = getID() + ns['cur_size'] = 0 + ns['max_size'] = await get_params(sor, userinfo.userid, 'folder_max_size); await sor.C('folderinfo', ns) - return UiMessage(title='folderinfo', 'add record successful') - return UiError(title='folderinfo', 'add record failed') + return True + return False async def delete_bizinfo_node(self, request, ns): userinfo = await get_session_userinfo(request) @@ -46,8 +51,8 @@ class FileMgr: ns1['biztype'] = self.biztype ns1['id'] = ns['id'] await sor.D('folderinfo', ns1) - return UiMessage(title='folderinfo', 'delete record successful') - return UiError(title='folderinfo', 'delete record failed') + return True + return False async def update_bizinfo_node(self, request, ns): userinfo = await get_session_userinfo(request) @@ -60,8 +65,8 @@ class FileMgr: recs = await sor.R('folderinfo', ns1) if len(recs) > 0: await sor.U('folderinfo', ns1) - return UiMessage(title='folderinfo', 'delete record successful') - return UiError(title='folderinfo', 'delete record failed') + return True + return return async def add_folder(self, request, ns): userinfo = await get_session_userinfo(request) @@ -72,8 +77,8 @@ class FileMgr: ns1['biztype'] = self.biztype ns1['id'] = ns['id'] await sor.D('folderinfo', ns1) - return UiMessage(title='folderinfo', 'delete record successful') - return UiError(title='folderinfo', 'delete record failed') + return True + return False async def get_subfolder(self, request, fid, fiid): userinfo = await get_session_userinfo(request) @@ -148,6 +153,31 @@ where id = ${fiid}$ ns1['biztype'] = self.biztype ns1['id'] = ns['id'] await sor.D('folderinfo', ns1) - return UiMessage(title='folderinfo', 'delete record successful') - return UiError(title='folderinfo', 'delete record failed') + return True + return False + + async def delete_file(self, request, fid, fiid): + userinfo = await get_session_userinfo(request) + dbname = get_dbname() + db = DBPools() + async with db.sqlorContext(dbname) as sor: + sql = """select a.id as fiid, b.* +from folderinfo a, file b +where a.id = ${fiid}$ + and b.id = ${fid}$ + and a.orgid = ${orgid} + and b.userid = ${userid}$ + and a.biztype = ${biztype}$""" + ns = { + 'fid':fid, + 'fiid':fiid, + 'userid':userinfo.userid, + 'orgid':userinfo.userorgid, + 'biztype':self.biztype + } + recs = await sor.sqlExe(sql, ns) + if len(recs) > 0: + await sor.D('file', {'id': fid}) + return True + return False diff --git a/filemgr/init.py b/filemgr/init.py new file mode 100644 index 0000000..a64a6d1 --- /dev/null +++ b/filemgr/init.py @@ -0,0 +1,8 @@ +from ahserver.serverenv import ServerEnv +from filemgr.filemgr import FileMgr + +def load_filemgr(): + g = ServerEnv() + g.FileMgr = FileMgr + + diff --git a/models/file.xlsx b/models/file.xlsx index 3a3d6c2..4b73848 100644 Binary files a/models/file.xlsx and b/models/file.xlsx differ diff --git a/models/folder.xlsx b/models/folder.xlsx index a69d9ab..ce19cb3 100644 Binary files a/models/folder.xlsx and b/models/folder.xlsx differ