bugfix
This commit is contained in:
commit
29f9466b22
0
filemgr/__init__.py
Normal file
0
filemgr/__init__.py
Normal file
@ -1,10 +1,10 @@
|
|||||||
from traceback import format_exc
|
from traceback import format_exc
|
||||||
from ahserver.serverenv import get_serverenv
|
from ahserver.serverenv import get_serverenv
|
||||||
from ahserver.auth_api import get_userinfo
|
from ahserver.auth_api import get_session_userinfo
|
||||||
from sqlor.dbpools import DBPools
|
from sqlor.dbpools import DBPools
|
||||||
from appPublic.uniqueID import getID
|
from appPublic.uniqueID import getID
|
||||||
from appPublic.log import debug, error, exception
|
from appPublic.log import debug, error, exception
|
||||||
from appbase.params import get_parmas
|
# from appbase.params import get_parmas
|
||||||
|
|
||||||
def get_dbname():
|
def get_dbname():
|
||||||
f = get_serverenv('get_module_dbname')
|
f = get_serverenv('get_module_dbname')
|
||||||
@ -17,99 +17,127 @@ class FileMgr:
|
|||||||
|
|
||||||
async def get_bizinfo_nodes(self, request):
|
async def get_bizinfo_nodes(self, request):
|
||||||
db = DBPools()
|
db = DBPools()
|
||||||
userinfo = await get_session_userinfo(request)
|
|
||||||
dbname = get_dbname()
|
dbname = get_dbname()
|
||||||
async with db.sqlorContext(dbname) as sor:
|
async with db.sqlorContext(dbname) as sor:
|
||||||
ns = {
|
return await self.sor_get_bizinfo_nodes(sor, request)
|
||||||
'orgid':usrinfo.userorgid,
|
|
||||||
'biztype':self.biztype
|
|
||||||
}
|
|
||||||
recs = await sor.R('folderinfo', ns)
|
|
||||||
return recs
|
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
async def sor_get_bizinfo_nodes(self, sor, request):
|
||||||
|
userinfo = await get_session_userinfo(request)
|
||||||
|
ns = {
|
||||||
|
'orgid':usrinfo.userorgid,
|
||||||
|
'biztype':self.biztype
|
||||||
|
}
|
||||||
|
recs = await sor.R('folderinfo', ns)
|
||||||
|
return recs
|
||||||
|
|
||||||
async def add_bizinfo_node(self, request, ns):
|
async def add_bizinfo_node(self, request, ns):
|
||||||
userinfo = await get_session_userinfo(request)
|
|
||||||
dbname = get_dbname()
|
dbname = get_dbname()
|
||||||
db = DBPools()
|
db = DBPools()
|
||||||
async with db.sqlorContext(dbname) as sor:
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
return await self.sor_add_bizinfo_node(sor,request, ns)
|
||||||
|
return False
|
||||||
|
async def sor_add_bizinfo_node(self, sor, request, ns):
|
||||||
|
userinfo = await get_session_userinfo(request)
|
||||||
ns['orgid'] = userinfo.userorgid,
|
ns['orgid'] = userinfo.userorgid,
|
||||||
ns['biztype'] = self.biztype
|
ns['biztype'] = self.biztype
|
||||||
ns['id'] = getID()
|
ns['id'] = getID()
|
||||||
ns['cur_size'] = 0
|
ns['cur_size'] = 0
|
||||||
ns['max_size'] = await get_params(sor, userinfo.userid, 'folder_max_size);
|
# ns['max_size'] = await get_params(sor, userinfo.userid, 'folder_max_size');
|
||||||
await sor.C('folderinfo', ns)
|
await sor.C('folderinfo', ns)
|
||||||
return True
|
return True
|
||||||
return False
|
|
||||||
|
|
||||||
async def delete_bizinfo_node(self, request, ns):
|
async def delete_bizinfo_node(self, request, ns):
|
||||||
userinfo = await get_session_userinfo(request)
|
|
||||||
dbname = get_dbname()
|
dbname = get_dbname()
|
||||||
db = DBPools()
|
db = DBPools()
|
||||||
async with db.sqlorContext(dbname) as sor:
|
async with db.sqlorContext(dbname) as sor:
|
||||||
ns1['orgid'] = userinfo.userorgid,
|
return await self.sor_delete_bizinfo_node(self, sor, request, ns)
|
||||||
ns1['biztype'] = self.biztype
|
|
||||||
ns1['id'] = ns['id']
|
|
||||||
await sor.D('folderinfo', ns1)
|
|
||||||
return True
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
async def sor_delete_bizinfo_node(self, sor, request, ns):
|
||||||
|
userinfo = await get_session_userinfo(request)
|
||||||
|
ns1['orgid'] = userinfo.userorgid,
|
||||||
|
ns1['biztype'] = self.biztype
|
||||||
|
ns1['id'] = ns['id']
|
||||||
|
await sor.D('folderinfo', ns1)
|
||||||
|
return True
|
||||||
|
|
||||||
async def update_bizinfo_node(self, request, ns):
|
async def update_bizinfo_node(self, request, ns):
|
||||||
userinfo = await get_session_userinfo(request)
|
|
||||||
dbname = get_dbname()
|
dbname = get_dbname()
|
||||||
db = DBPools()
|
db = DBPools()
|
||||||
async with db.sqlorContext(dbname) as sor:
|
async with db.sqlorContext(dbname) as sor:
|
||||||
ns1['orgid'] = userinfo.userorgid,
|
return self.sor_update_bizinfo_node(sor, request, ns)
|
||||||
ns1['biztype'] = self.biztype
|
return False
|
||||||
ns1['id'] = ns['id']
|
|
||||||
recs = await sor.R('folderinfo', ns1)
|
async def sor_update_bizinfo_node(self, sor, request, ns):
|
||||||
if len(recs) > 0:
|
|
||||||
await sor.U('folderinfo', ns1)
|
|
||||||
return True
|
|
||||||
return return
|
|
||||||
|
|
||||||
async def add_folder(self, request, ns):
|
|
||||||
userinfo = await get_session_userinfo(request)
|
userinfo = await get_session_userinfo(request)
|
||||||
dbname = get_dbname()
|
ns1['orgid'] = userinfo.userorgid,
|
||||||
db = DBPools()
|
ns1['biztype'] = self.biztype
|
||||||
async with db.sqlorContext(dbname) as sor:
|
ns1['id'] = ns['id']
|
||||||
ns1['orgid'] = userinfo.userorgid,
|
recs = await sor.R('folderinfo', ns1)
|
||||||
ns1['biztype'] = self.biztype
|
if len(recs) > 0:
|
||||||
ns1['id'] = ns['id']
|
await sor.U('folderinfo', ns1)
|
||||||
await sor.D('folderinfo', ns1)
|
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
async def add_folder(self, request, ns):
|
||||||
|
dbname = get_dbname()
|
||||||
|
db = DBPools()
|
||||||
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
return await self.sor_add_folder(sor, request, ns)
|
||||||
|
return False
|
||||||
|
async def sor_add_folder(self, sor, request, ns):
|
||||||
|
userinfo = await get_session_userinfo(request)
|
||||||
|
ns1['orgid'] = userinfo.userorgid,
|
||||||
|
ns1['biztype'] = self.biztype
|
||||||
|
ns1['id'] = ns['id']
|
||||||
|
await sor.C('folderinfo', ns1)
|
||||||
|
return True
|
||||||
|
|
||||||
async def get_subfolder(self, request, fid, fiid):
|
async def get_subfolder(self, request, fid, fiid):
|
||||||
userinfo = await get_session_userinfo(request)
|
userinfo = await get_session_userinfo(request)
|
||||||
dbname = get_dbname()
|
dbname = get_dbname()
|
||||||
db = DBPools()
|
db = DBPools()
|
||||||
async with db.sqlorContext(dbname) as sor:
|
async with db.sqlorContext(dbname) as sor:
|
||||||
sql = """select a.id as fiid, b.*
|
return await self.sor_get_subfolder(sor, request, fid, fiid)
|
||||||
|
return []
|
||||||
|
|
||||||
|
async def sor_get_subfolder(self, sor, request, fid, fiid):
|
||||||
|
sql = """select x.*, 'folder' as rtype,
|
||||||
|
case when y.id is null then 1
|
||||||
|
else 0 end as is_left
|
||||||
|
from (select a.id as fiid, b.*
|
||||||
from folderinfo a, folder b
|
from folderinfo a, folder b
|
||||||
where a.id = ${fiid}$
|
where a.id = ${fiid}$
|
||||||
and b.fiid = a.id
|
and b.fiid = a.id
|
||||||
and b.parentid = ${fid}$
|
and b.parentid = ${fid}$
|
||||||
and a.orgid = ${orgid}$
|
and a.orgid = ${orgid}$
|
||||||
and a.biztype = ${biztype}$
|
and a.biztype = ${biztype}$
|
||||||
order by name"""
|
order by name) as x left join (
|
||||||
ns = {
|
select unique a.* from folder a left join folder b on a.id = b.par
|
||||||
'fid':fid,
|
entid where b.id is not NULL
|
||||||
'fiid':fiid,
|
) as y
|
||||||
'orgid':userinfo.userorgid,
|
on x.id = y.id
|
||||||
'biztype':self.biztype
|
"""
|
||||||
}
|
ns = {
|
||||||
recs = await sor.sqlExe(sql, ns)
|
'fid':fid,
|
||||||
return recs
|
'fiid':fiid,
|
||||||
await sor.D('folderinfo', ns1)
|
'orgid':userinfo.userorgid,
|
||||||
return []
|
'biztype':self.biztype
|
||||||
|
}
|
||||||
|
recs = await sor.sqlExe(sql, ns)
|
||||||
|
return recs
|
||||||
|
|
||||||
async def get_files(self, request, fid, fiid):
|
async def get_files(self, request, fid, fiid):
|
||||||
userinfo = await get_session_userinfo(request)
|
|
||||||
dbname = get_dbname()
|
dbname = get_dbname()
|
||||||
db = DBPools()
|
db = DBPools()
|
||||||
async with db.sqlorContext(dbname) as sor:
|
async with db.sqlorContext(dbname) as sor:
|
||||||
sql = """select a.id as fiid, b.*
|
return await self.sor_get_files(sor, request, fid, fiid)
|
||||||
|
return []
|
||||||
|
|
||||||
|
async def sor_get_files(self, sor, request, fid, fiid):
|
||||||
|
userinfo = await get_session_userinfo(request)
|
||||||
|
sql = """select a.id as fiid, b.*
|
||||||
from folderinfo a, file b
|
from folderinfo a, file b
|
||||||
where a.id = ${fiid}$
|
where a.id = ${fiid}$
|
||||||
and b.folderid = ${fid}$
|
and b.folderid = ${fid}$
|
||||||
@ -117,18 +145,25 @@ where a.id = ${fiid}$
|
|||||||
and b.userid = ${userid}$
|
and b.userid = ${userid}$
|
||||||
and a.biztype = ${biztype}$
|
and a.biztype = ${biztype}$
|
||||||
order by name"""
|
order by name"""
|
||||||
ns = {
|
ns = {
|
||||||
'fid':fid,
|
'fid':fid,
|
||||||
'fiid':fiid,
|
'fiid':fiid,
|
||||||
'userid':userinfo.userid,
|
'userid':userinfo.userid,
|
||||||
'orgid':userinfo.userorgid,
|
'orgid':userinfo.userorgid,
|
||||||
'biztype':self.biztype
|
'biztype':self.biztype
|
||||||
}
|
}
|
||||||
recs = await sor.sqlExe(sql, ns)
|
recs = await sor.sqlExe(sql, ns)
|
||||||
return recs
|
return recs
|
||||||
return []
|
|
||||||
|
|
||||||
async def get_folderinfo(self, sor, userinfo, fiid):
|
async def get_folderinfo(self, sor, fiid):
|
||||||
|
dbname = get_dbname()
|
||||||
|
db = DBPools()
|
||||||
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
return await self.sor_get_folderinfo(sor, request, fid, fiid)
|
||||||
|
return []
|
||||||
|
|
||||||
|
async def sor_get_folderinfo(self, sor, fiid):
|
||||||
|
userinfo = await get_session_userinfo(request)
|
||||||
sql = """select * from folderinfo
|
sql = """select * from folderinfo
|
||||||
where id = ${fiid}$
|
where id = ${fiid}$
|
||||||
and orgid = ${orgid}$
|
and orgid = ${orgid}$
|
||||||
@ -143,41 +178,32 @@ where id = ${fiid}$
|
|||||||
return recs
|
return recs
|
||||||
return None
|
return None
|
||||||
|
|
||||||
async def add_folder(self, request, ns):
|
|
||||||
userinfo = await get_session_userinfo(request)
|
|
||||||
dbname = get_dbname()
|
|
||||||
db = DBPools()
|
|
||||||
async with db.sqlorContext(dbname) as sor:
|
|
||||||
sql = """select * from folder
|
|
||||||
ns1['orgid'] = userinfo.userorgid,
|
|
||||||
ns1['biztype'] = self.biztype
|
|
||||||
ns1['id'] = ns['id']
|
|
||||||
await sor.D('folderinfo', ns1)
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
async def delete_file(self, request, fid, fiid):
|
async def delete_file(self, request, fid, fiid):
|
||||||
userinfo = await get_session_userinfo(request)
|
|
||||||
dbname = get_dbname()
|
dbname = get_dbname()
|
||||||
db = DBPools()
|
db = DBPools()
|
||||||
async with db.sqlorContext(dbname) as sor:
|
async with db.sqlorContext(dbname) as sor:
|
||||||
sql = """select a.id as fiid, b.*
|
return await self.sor_delete_file(self, sor, request, fid, fiid)
|
||||||
|
return False
|
||||||
|
|
||||||
|
async def sor_delete_file(self, sor, request, fid, fiid):
|
||||||
|
userinfo = await get_session_userinfo(request)
|
||||||
|
sql = """select a.id as fiid, b.*
|
||||||
from folderinfo a, file b
|
from folderinfo a, file b
|
||||||
where a.id = ${fiid}$
|
where a.id = ${fiid}$
|
||||||
and b.id = ${fid}$
|
and b.id = ${fid}$
|
||||||
and a.orgid = ${orgid}
|
and a.orgid = ${orgid}
|
||||||
and b.userid = ${userid}$
|
and b.userid = ${userid}$
|
||||||
and a.biztype = ${biztype}$"""
|
and a.biztype = ${biztype}$"""
|
||||||
ns = {
|
ns = {
|
||||||
'fid':fid,
|
'fid':fid,
|
||||||
'fiid':fiid,
|
'fiid':fiid,
|
||||||
'userid':userinfo.userid,
|
'userid':userinfo.userid,
|
||||||
'orgid':userinfo.userorgid,
|
'orgid':userinfo.userorgid,
|
||||||
'biztype':self.biztype
|
'biztype':self.biztype
|
||||||
}
|
}
|
||||||
recs = await sor.sqlExe(sql, ns)
|
recs = await sor.sqlExe(sql, ns)
|
||||||
if len(recs) > 0:
|
if len(recs) > 0:
|
||||||
await sor.D('file', {'id': fid})
|
await sor.D('file', {'id': fid})
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
3
json/build.sh
Executable file
3
json/build.sh
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
xls2ui -m ../models -o ../wwwroot filemgr *.json
|
@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"tblname": "permission",
|
"tblname": "folder",
|
||||||
"uitype":"tree",
|
"uitype":"tree",
|
||||||
"title":"权限",
|
"title":"目录",
|
||||||
"params":{
|
"params":{
|
||||||
"idField":"id",
|
"idField":"id",
|
||||||
"textField":"path",
|
"textField":"name",
|
||||||
"sortby":"path",
|
"sortby":"name",
|
||||||
"editable":true,
|
"editable":true,
|
||||||
"browserfields":{
|
"browserfields":{
|
||||||
"alters":{}
|
"alters":{}
|
||||||
@ -13,9 +13,28 @@
|
|||||||
"edit_exclouded_fields":[],
|
"edit_exclouded_fields":[],
|
||||||
"parentField":"parentid",
|
"parentField":"parentid",
|
||||||
"toolbar":{
|
"toolbar":{
|
||||||
|
"tools":[
|
||||||
|
{
|
||||||
|
"name":"upload",
|
||||||
|
"label":"上传文件",
|
||||||
|
"icon":"{{entire_url('/bricks/imgs/upload.svg')}}"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"binds":[
|
"binds":[
|
||||||
|
{
|
||||||
|
"wid":"upload",
|
||||||
|
"event":"upload",
|
||||||
|
"actiontype":"urlwidget",
|
||||||
|
"target":"PopupWindow",
|
||||||
|
"popupwindow_options":{
|
||||||
|
"icon":"{{entire_url('/bricks/imgs/app.png')}}",
|
||||||
|
"title":"上传文件"
|
||||||
|
},
|
||||||
|
"options":{
|
||||||
|
"url":"{{entire_url('/filemgr/upload_file.ui')}}"
|
||||||
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,20 +1,21 @@
|
|||||||
{
|
{
|
||||||
"tblname": "users",
|
"tblname": "folderinfo",
|
||||||
"title":"目录信息",
|
"title":"目录信息",
|
||||||
"params": {
|
"params": {
|
||||||
"sortby":"name",
|
"sortby":"name",
|
||||||
|
"logined_userorgid":"orgid",
|
||||||
"browserfields": {
|
"browserfields": {
|
||||||
"exclouded": ["id"],
|
"exclouded": ["id", "biztype", "orgid" ],
|
||||||
"alters": {}
|
"cwidth": {}
|
||||||
},
|
},
|
||||||
"editexclouded": [
|
"editexclouded": [
|
||||||
"id"
|
"id", "orgid"
|
||||||
],
|
],
|
||||||
"subtables": [
|
"subtables": [
|
||||||
{
|
{
|
||||||
"field":"userid",
|
"field":"fiid",
|
||||||
"title":"用户角色",
|
"title":"目录",
|
||||||
"subtable":"userrole"
|
"subtable":"folder"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
4
pyproject.toml
Normal file
4
pyproject.toml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[build-system]
|
||||||
|
requires = ["setuptools>=61", "wheel"]
|
||||||
|
build-backend = "setuptools.build_meta"
|
||||||
|
|
15
setup.cfg
Normal file
15
setup.cfg
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
[metadata]
|
||||||
|
name=filemgr
|
||||||
|
version = 0.0.1
|
||||||
|
description = A folder management package
|
||||||
|
author = "yu moqing"
|
||||||
|
author_email = "yumoqing@gmail.com"
|
||||||
|
readme = "README.md"
|
||||||
|
license = "MIT"
|
||||||
|
[options]
|
||||||
|
packages = find:
|
||||||
|
requires-python = ">=3.8"
|
||||||
|
install_requires =
|
||||||
|
apppublic
|
||||||
|
sqlor
|
||||||
|
ahserver
|
Loading…
Reference in New Issue
Block a user