Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e539fed

Browse files
move tables out of demo; make get_apijson_table better; add all setting in tables
1 parent b9dba54 commit e539fed

File tree

19 files changed

+306
-188
lines changed

19 files changed

+306
-188
lines changed

‎demo/apps/apijson_demo/dbinit.py‎

Lines changed: 12 additions & 0 deletions
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‎

Lines changed: 1 addition & 0 deletions
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‎

Lines changed: 4 additions & 0 deletions
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‎

Lines changed: 7 additions & 4 deletions
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‎

Lines changed: 0 additions & 37 deletions
This file was deleted.

‎demo/apps/tables/views.py‎

Lines changed: 0 additions & 21 deletions
This file was deleted.

‎uliweb_apijson/__init__.py‎

Lines changed: 1 addition & 1 deletion
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__ = 'zhangchunlin@gmail.com'

‎uliweb_apijson/apijson/__init__.py‎

Lines changed: 61 additions & 42 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /