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

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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy