Skip to content

Commit 4ab96bb

Browse files
authored
Merge branch 'zhangchunlin:master' into master
2 parents 0325de5 + e539fed commit 4ab96bb

File tree

19 files changed

+306
-188
lines changed

19 files changed

+306
-188
lines changed

demo/apps/apijson_demo/dbinit.py

+12
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,11 @@
7575
"date" : "2018-11-6",
7676
"content" : "test moment from c",
7777
},
78+
{
79+
"username" : "admin",
80+
"date" : "2018-11-7",
81+
"content" : "test moment from admin",
82+
},
7883
]
7984

8085
comment_list = [
@@ -99,6 +104,13 @@
99104
"date" : "2018-12-9",
100105
"content" : "comment hoho",
101106
},
107+
{
108+
"username" : "admin",
109+
"to_username" : "usera",
110+
"moment_id" : 4,
111+
"date" : "2018-12-10",
112+
"content" : "comment kaka",
113+
},
102114
]
103115

104116
for d in user_list:

demo/apps/settings.ini

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ INSTALLED_APPS = [
1717
'uliweb_comui',
1818
'uliweb_comapps.auth.login',
1919
'uliweb_comapps.auth.user_admin',
20+
'uliweb_comapps.auth.rbac_admin',
2021
'uliweb_apijson.apijson',
2122
'apijson_demo',
2223
'tables',

demo/apps/tables/config.ini

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[DEPENDS]
2+
REQUIRED_APPS = [
3+
'uliweb_apijson.tables',
4+
]

demo/apps/tables/settings.ini

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
[APIJSON_TABLES]
2-
user = {
3-
"editable" : "auto",
4-
}
2+
user = {"model_name":"user", "tableui_name":"users"}
3+
role = {"model_name":"role", "tableui_name":"roles", "role":"ADMIN"}
4+
permission = {"model_name":"permission", "tableui_name":"permissions", "role":"ADMIN"}
5+
moment = {"role":"OWNER"}
6+
comment = {"role":"OWNER"}
7+
8+
[APIJSON_TABLE_UI]
59
moment = {
610
"editable" : "auto",
711
"table_fields" : [
@@ -20,7 +24,6 @@ moment = {
2024
{"title":"Content","key":"content","type":"textarea"},
2125
],
2226
}
23-
2427
comment = {
2528
"editable" : "auto",
2629
"table_fields" : [

demo/apps/tables/templates/Tables/list.html

-37
This file was deleted.

demo/apps/tables/views.py

-21
This file was deleted.

uliweb_apijson/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
__version__ = '0.2.2'
1+
__version__ = '0.3.0'
22
__url__ = 'https://github.com/zhangchunlin/uliweb-apijson'
33
__author__ = 'Chunlin Zhang'
44
__email__ = '[email protected]'

uliweb_apijson/apijson/__init__.py

+61-42
Original file line numberDiff line numberDiff line change
@@ -2,57 +2,76 @@
22

33
from uliweb import settings, models, request, functions, UliwebError
44
from uliweb.orm import ModelNotFound
5+
from json import dumps as json_dumps
56
import logging
67

78
log = logging.getLogger('apijson')
89

9-
def get_apijson_tables(role="UNKNOWN"):
10-
from uliweb import settings
1110

12-
s = settings.APIJSON_TABLES
13-
if s:
14-
apijson_tables = dict(s.iteritems())
15-
else:
16-
return {}
17-
for n in apijson_tables:
18-
c = apijson_tables[n]
19-
editable = c.get("editable",False)
20-
_model_name = c.get("@model_name") or n
21-
if editable=="auto":
11+
class ApijsonTable(object):
12+
def __init__(self, model_name, request_tag=None, role=None, tableui_name=None, table_name=None):
13+
self.model_name = model_name
14+
self.request_tag = request_tag or self.model_name
15+
self.role = role
16+
self.tableui_name = tableui_name or self.model_name
17+
self.table_name = table_name
18+
self._get_tableui()
19+
self._apply_auto()
20+
21+
def _get_tableui(self):
22+
self.tableui = settings.APIJSON_TABLE_UI.get(self.tableui_name, {})
23+
if not self.tableui:
24+
log.warn("cannot find setting for {} in settings.APIJSON_TABLE_UI".format(self.tableui_name))
25+
26+
def _apply_auto(self):
27+
editable = self.tableui.get("editable", False)
28+
if editable == "auto":
2229
editable = False
23-
POST = settings.APIJSON_MODELS.get(_model_name,{}).get("POST")
30+
POST = settings.APIJSON_MODELS.get(self.model_name, {}).get("POST")
2431
if POST:
2532
roles = POST["roles"]
2633
if roles:
27-
editable = role in roles
28-
c["editable"] = editable
29-
return apijson_tables
30-
31-
def get_apijson_table(role="UNKNOWN",name=None):
32-
from uliweb import settings
33-
34-
if not name:
35-
return {}
36-
s = settings.APIJSON_TABLES
37-
if s:
38-
apijson_tables = dict(s.iteritems())
39-
else:
40-
return {}
41-
42-
c = apijson_tables.get(name)
43-
if not c:
44-
return {}
45-
editable = c.get("editable",False)
46-
_model_name = c.get("@model_name") or n
47-
if editable=="auto":
48-
editable = False
49-
POST = settings.APIJSON_MODELS.get(_model_name,{}).get("POST")
50-
if POST:
51-
roles = POST["roles"]
52-
if roles:
53-
editable = role in roles
54-
c["editable"] = editable
55-
return c
34+
editable = self.role in roles
35+
self.tableui["editable"] = editable
36+
37+
def to_dict(self):
38+
return dict(model_name=self.model_name,
39+
request_tag=self.request_tag,
40+
role=self.role,
41+
tableui_name=self.tableui_name,
42+
table_name=self.table_name,
43+
tableui=self.tableui)
44+
45+
46+
def get_apijson_tables():
47+
def iter_table():
48+
s = settings.APIJSON_TABLES
49+
apijson_tables = dict(s.iteritems()) if s else {}
50+
if apijson_tables:
51+
for k in apijson_tables:
52+
v = apijson_tables[k]
53+
model_name = v.get("model_name") or k
54+
tableui_name = v.get("tableui_name") or model_name
55+
if not model_name:
56+
model_name = tableui_name
57+
if model_name and tableui_name:
58+
request_tag = v.get("request_tag")
59+
role = v.get("role")
60+
yield(ApijsonTable(model_name=model_name, request_tag=request_tag, role=role, tableui_name=tableui_name, table_name=k))
61+
else:
62+
apison_table_ui = dict(
63+
settings.APIJSON_TABLE_UI.iteritems())
64+
for tableui_name in apison_table_ui:
65+
tableui = apison_table_ui[tableui_name]
66+
model_name = tableui.get("@model_name") or tableui_name
67+
request_tag = model_name
68+
role = None
69+
yield(ApijsonTable(model_name=model_name, request_tag=request_tag, role=role, tableui_name=tableui_name))
70+
return list(iter_table())
71+
72+
73+
def get_apijson_table(*args, **kwargs):
74+
return ApijsonTable(*args, **kwargs)
5675

5776
class ApiJsonModelQuery(object):
5877
def __init__(self,name,params,parent,key):

0 commit comments

Comments
 (0)