From d1fa283dc44bdb9b7078b91f014a5dc286c2cf7b Mon Sep 17 00:00:00 2001 From: yumoqing Date: Wed, 16 Jul 2025 14:20:27 +0800 Subject: [PATCH] first commit --- README.md | 3 + json/build.sh | 3 + json/uapi.json | 37 +++++++ json/uapiset.json | 20 ++++ json/upapp.json | 25 +++++ json/upapp1.json | 20 ++++ json/upappapis.json | 33 ++++++ json/upappkey.json | 14 +++ models/uapi.xlsx | Bin 0 -> 17327 bytes models/uapiset.xlsx | Bin 0 -> 16602 bytes models/upapp.xlsx | Bin 0 -> 16788 bytes models/upappapis.xlsx | Bin 0 -> 16587 bytes models/upappkey.xlsx | Bin 0 -> 16662 bytes pyproject.toml | 4 + requirements.txt | 1 + script/perms.json | 40 +++++++ setup.cfg | 19 ++++ test/.t.py.swp | Bin 0 -> 12288 bytes test/t.py | 32 ++++++ uapi/__init__.py | 0 uapi/appapi.py | 238 ++++++++++++++++++++++++++++++++++++++++++ uapi/init.py | 7 ++ 22 files changed, 496 insertions(+) create mode 100644 README.md create mode 100755 json/build.sh create mode 100644 json/uapi.json create mode 100644 json/uapiset.json create mode 100644 json/upapp.json create mode 100644 json/upapp1.json create mode 100644 json/upappapis.json create mode 100644 json/upappkey.json create mode 100644 models/uapi.xlsx create mode 100644 models/uapiset.xlsx create mode 100644 models/upapp.xlsx create mode 100644 models/upappapis.xlsx create mode 100644 models/upappkey.xlsx create mode 100644 pyproject.toml create mode 100644 requirements.txt create mode 100644 script/perms.json create mode 100644 setup.cfg create mode 100644 test/.t.py.swp create mode 100644 test/t.py create mode 100644 uapi/__init__.py create mode 100644 uapi/appapi.py create mode 100644 uapi/init.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..af0c479 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# uapi + +universe api \ No newline at end of file diff --git a/json/build.sh b/json/build.sh new file mode 100755 index 0000000..948b4ba --- /dev/null +++ b/json/build.sh @@ -0,0 +1,3 @@ +#!/usr/bin/bash + +xls2ui -m ../models -o ../wwwroot appbase *.json diff --git a/json/uapi.json b/json/uapi.json new file mode 100644 index 0000000..5ba992d --- /dev/null +++ b/json/uapi.json @@ -0,0 +1,37 @@ +{ + "tblname":"uapi", + "params":{ + "toolbar":{ + "tools":[ + { + "selected_row":true, + "name":"test", + "icon":"{{entire_url('/imgs/test.svg')}}", + "label": "api测试" + } + ] + }, + "binds":[ + { + "wid":"self", + "event":"test", + "actiontype": "urlwidget", + "target":"PopupWindow", + "options":{ + "methid":"POST", + "params":{}, + "url":"{{entire_url('/uapi/uapi_test.ui')}}" + } + } + ], + + "title":"API", + "description":"API定义", + "sortby":"name", + "browserfields":{ + "exclouded":["id"], + "alters":{} + }, + "editexclouded":["id", "usid"] + } +} diff --git a/json/uapiset.json b/json/uapiset.json new file mode 100644 index 0000000..cc404f4 --- /dev/null +++ b/json/uapiset.json @@ -0,0 +1,20 @@ +{ + "tblname":"uapiset", + "params":{ + "title":"API接口集", + "description":"支持的所有API接口", + "sortby":"name", + "browserfields":{ + "exclouded":["id"], + "alters":{} + }, + "editexclouded":["id"], + "subtables":[ + { + "field":"usid", + "subtable": "uapi", + "title": "API" + } + ] + } +} diff --git a/json/upapp.json b/json/upapp.json new file mode 100644 index 0000000..839383f --- /dev/null +++ b/json/upapp.json @@ -0,0 +1,25 @@ +{ + "tblname":"upapp", + "params":{ + "title":"上位系统", + "description":"上位系统", + "sortby":"name", + "browserfields":{ + "exclouded":["id"], + "alters":{} + }, + "editexclouded":["id"], + "subtables":[ + { + "field":"upappid", + "subtable": "upappapis", + "title": "API集" + }, + { + "field":"upappid", + "subtable": "upappkey", + "title": "APIKEY" + } + ] + } +} diff --git a/json/upapp1.json b/json/upapp1.json new file mode 100644 index 0000000..a4b9083 --- /dev/null +++ b/json/upapp1.json @@ -0,0 +1,20 @@ +{ + "tblname":"upapp", + "alias":"upapp1", + "params":{ + "title":"上位系统", + "sortby":"name", + "noedit":true, + "browserfields":{ + "exclouded":["id"], + "alters":{} + }, + "subtables":[ + { + "field":"upappid", + "subtable":"upappkey", + "title":"应用密码" + } + ] + } +} diff --git a/json/upappapis.json b/json/upappapis.json new file mode 100644 index 0000000..cab250d --- /dev/null +++ b/json/upappapis.json @@ -0,0 +1,33 @@ +{ + "tblname":"upappapis", + "params":{ + "toolbar":{ + "tools":[ + { + "name":"test", + "icon":"{{entire_url('/imgs/test.svg')}}", + "label": "测试", + "selected_row":true + } + ] + }, + "binds":[ + { + "wid":"self", + "event":"test", + "actiontype": "urlwidget", + "options":{ + "url":"{{entire_url('/uapi/apitest.dspy')}}" + } + } + ], + "title":"使用api集", + "description":"此系统使用的API集", + "sortby":"name", + "browserfields":{ + "exclouded":["id"], + "alters":{} + }, + "editexclouded":["id", "upappid"] + } +} diff --git a/json/upappkey.json b/json/upappkey.json new file mode 100644 index 0000000..c57b081 --- /dev/null +++ b/json/upappkey.json @@ -0,0 +1,14 @@ +{ + "tblname":"upappkey", + "params":{ + "title":"上位系统密码", + "logined_userorgid":"ownerid", + "description":"上位系统密码", + "confidential_fields":["apikey", "apipasswd" ], + "browserfields":{ + "exclouded":["id", "ownerid"], + "alters":{} + }, + "editexclouded":["id", "upappid", "ownerid"] + } +} diff --git a/models/uapi.xlsx b/models/uapi.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..1e775a51db38cf00aa5c5ba6bb24e26ad59d6d14 GIT binary patch literal 17327 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
50ac;=BP8d!i=u+K z^zWPDkehB!5ItQ6;IIqMiP2Ux&ItnOnQx!zRL>G{j#48BN(B0*v#N0=hs8hLmj@xG zqB+Do90w{5z1p9z(x#m2J1{-ZOuR!bi*mNS4XiRy6-L5*-mh&uVu>edrPWT1uNUsu zs}Uxr3gW0=!$xjXfH^iz6Zztaso?A79)8SpH8tjd7u_T70lQyJOn)G}90@f&TRx?m;Vu5xJ%HL(j(9Z7v1P6G_{%gxj=>9{w zhMa-lB88kreYb%L5mINa$M?{z0RedKnebpy%7hHz3}>6B5JDXzx~#00e zF%lD-@XdCbB{e(dbn%G;)bgg$I*a|=LDJ(wIu5mJ=2}2aHu(H0d^1uW;L9F z-z$u=eWrQ1PP*0yKDU4O)7dLkEmeWiZVqhgK>fS48{0aV{-3!2x3GhNc*QHp^fF-t zZ$Q3@4tr)4%*u%@`j2E2z`0O&25-B-TPDPdwY_-G+LRH7$8hd_k8xxe#(HWE@BGGN zdQC7L^aZA#N%>%$pd!N5E0lDvCApmiZ+9OAiT?7aOqNX+2cB_(&7cDe8#3NSmd&yL zrqd9IwV8im(1$5i~SI zL2I*W_r{yQChH>n&*Xn=!}%TM_vVAY zP_lu2ZU1!%e@FS%itszi@1@j#pdD^$elN87 z3&5A~A1~uq+0E}Lzh~zELP;d~h4OEC`ri=(f6Jl$g+NF7C&K?^)PA4(d%XOwsh;nD z{|WyXJ^vl>_we&yfZjl2{llaA6^#BJ<@cc0UnthVpvFI-{0edXj`FY0$X^&BAW!Td zAphW+{0{K17U|ysIJy1?@L%@n@3a4Ph5!3(3f{lX{_pkv_vycD<-Y)``G4Jm{~sN# XC<6&p5g;IFz`uT=dY=>cWAFa~Srq}c literal 0 HcmV?d00001 diff --git a/models/uapiset.xlsx b/models/uapiset.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..cdf493933f5bc34dfcf50bf90dd3d0880c94c9d2 GIT binary patch literal 16602 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

3C6 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 HarOTI?{Mei literal 0 HcmV?d00001 diff --git a/models/upapp.xlsx b/models/upapp.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..858f1c539647d96c943853abbd907930c5ca249c GIT binary patch literal 16788 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", "wheel"] +build-backend = "setuptools.build_meta" + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..ee4ba4f --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +aiohttp diff --git a/script/perms.json b/script/perms.json new file mode 100644 index 0000000..7059c09 --- /dev/null +++ b/script/perms.json @@ -0,0 +1,40 @@ +[ +{ + "path": "/uapi/upapp", + "perms": [ + { + "orgtype": "customer", + "roles":["operator"] + }, + { + "orgtype": "owner", + "roles":["operator"] + } + ] +}, +{ + "path": "/uapi/jsonhttpapi", + "perms": [ + { + "orgtype": "customer", + "roles":["operator"] + }, + { + "orgtype": "owner", + "roles":["operator"] + } + ] +}, +{ + "path":"/uapi/upappkey", + "perm":[ + { + "orgtype": "customer", + "roles":["operator"] + }, + { + "orgtype": "owner", + "roles":["operator"] + } + ] +} diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..73d9929 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,19 @@ +# setup.cfg + +[metadata] +name=uapi +version = 0.0.1 +description = Your project description +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 + diff --git a/test/.t.py.swp b/test/.t.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..7bc7f2367ca574fbd5211f71ed7ee5550c8a0388 GIT binary patch literal 12288 zcmeI2PiPcZ9LJwUiYwZRy^6e;!_30&Y*M93R&vlNn3B+t8vmSzw=-{d$IQI8}>Wz&HMd% zzu#xxo^~4}XQpTAgf~jy+DFLIifpfpWIKNxBcz)w+0}o&61fzKmafjS;JB2F)wxu9 zu?$$eE%GuXtf_7-V=Af{u1(E&s=LhzACUkOc>M%2)2xo~C5PW19kI!W4-L`x_Ak8t zeJ~>uKmter2_OL^fCP{L5ZC+UC6z|PxN#(SndJFtQ>N4|&`41Ge`YsRaF4D zRV-zRp3H}GosiNnot-~-J~%QlvwZqO_w-Em(V4~ZiFvwp@8{n7+U6HGw(i`AJ1G^3 zD3mdOWbER?hpapHK{z#KM)gc`wsX>(8z~*)}_Vv;u`XDuvdJQ+Il| z?ryAqxAD^_y|2H8&*l$zdTZAagK3_n*3>pe>3XfU6fx0c!fUW7%o+jrfT;D&`-RdkK_9>aW(&vW zrd`0sMaOG#A%oafAJpwZ1DDKIUnMrzb_nMxQu7CuOYNK#FG6@f;yVD zxI?V*m3rMo*caRc^8J(GF=dYejS?kO)9*hwvbOHG 0: + rec = recs[0] + rec.apikey = password_decode(rec.apikey) + if rec.secretkey: + rec.secretkey = password_decode(rec.secretkey) + if rec.need_auth and self.auth_api is None: + self.auth_api = await self.get_authapi(sor) + if rec.need_auth and self.auth_api is None: + e = Exception(f'{rec.appname} app has not auth api but need') + exception(f'{e=}, {format_exc()}') + raise e + rec.auth_api = self.auth_api + rec.apikey_orgid = orgid + return recs[0] + return None + diff --git a/uapi/init.py b/uapi/init.py new file mode 100644 index 0000000..cb41627 --- /dev/null +++ b/uapi/init.py @@ -0,0 +1,7 @@ +from ahserver.serverenv import ServerEnv +from .appapi import UAPI + +def load_uapi(): + g = ServerEnv() + g.UAPI = UAPI +