Movatterモバイル変換


[0]ホーム

URL:


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

Commit6962b31

Browse files
authored
Merge pull request#41 from zhangchunlin/master
Sync
2 parentsc98d7b0 +cbee292 commit6962b31

File tree

10 files changed

+513
-39
lines changed

10 files changed

+513
-39
lines changed

‎demo/apps/apijson_demo/settings.ini

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,17 @@ comment = {
3131
}
3232

3333
[APIJSON_REQUESTS]
34+
user = {
35+
"POST" :{
36+
"ADD":{"@role":"ADMIN"},
37+
"DISALLOW" : ["id"],
38+
"NECESSARY" : ["username","nickname"],
39+
},
40+
"PUT" :{
41+
"ADD":{"@role":"OWNER"},
42+
"NECESSARY" : ["id"],
43+
},
44+
}
3445
moment = {
3546
"POST" :{
3647
"ADD":{"@role":"OWNER"},

‎demo/apps/tables/settings.ini

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
[APIJSON_TABLES]
2+
user = {
3+
"editable" :"auto",
4+
}
25
moment = {
36
"editable" :"auto",
47
"table_fields" : [

‎tests/demo/apps/apijson_demo/dbinit.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,25 +15,25 @@
1515
"username":"admin",
1616
"nickname":"Administrator",
1717
"email":"admin@localhost",
18-
"date_join":"2018-1-1",
18+
"date_join":"2018-1-1 0:0:0",
1919
},
2020
{
2121
"username":"usera",
2222
"nickname":"User A",
2323
"email":"usera@localhost",
24-
"date_join":"2018-2-2",
24+
"date_join":"2018-2-2 0:0:0",
2525
},
2626
{
2727
"username":"userb",
2828
"nickname":"User B",
2929
"email":"userb@localhost",
30-
"date_join":"2018-3-3",
30+
"date_join":"2018-3-3 0:0:0",
3131
},
3232
{
3333
"username":"userc",
3434
"nickname":"User C",
3535
"email":"userc@localhost",
36-
"date_join":"2018-4-4",
36+
"date_join":"2018-4-4 0:0:0",
3737
},
3838
]
3939

‎tests/demo/apps/apijson_demo/settings.ini

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ user = {
1010
"secret_fields" : ["password"],
1111
"GET" : {"roles" : ["LOGIN","ADMIN","OWNER"] },
1212
"HEAD" : {"roles" : ["LOGIN","ADMIN","OWNER"] },
13-
"POST" : {"roles" : ["ADMIN"] },
13+
#"POST" : { "roles" : ["ADMIN"] }, #remove for test case
1414
"PUT" : {"roles" : ["ADMIN","OWNER"] },
1515
"DELETE" : {"roles" : ["ADMIN"] },
1616
}
@@ -63,7 +63,7 @@ comment = {
6363
"POST" :{
6464
"ADD" :{"@role":"OWNER"},
6565
"DISALLOW" : ["id"],
66-
"NECESSARY" : ["content"]
66+
"NECESSARY" : ["moment_id","content"]
6767
},
6868
"PUT" :{
6969
"ADD":{"@role":"OWNER"},

‎tests/test.py

Lines changed: 434 additions & 2 deletions
Large diffs are not rendered by default.

‎uliweb_apijson/apijson/README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ uliweb-apijson is a subset and slightly different variation of [apijson](https:/
44

55
#Difference with original apijson
66

7-
| feature| apijson(java)| uliweb-apijson| comment|
8-
| --------| -------------| --------------| ------------------------------------------------------------|
9-
|@combine| ✔️| ✖️| Example: "@combine":"&key0,&key1,\|key2,key3"|
10-
|@expr| ✖️| ✔️| Example: "@expr":[["username$","&","email$"],"&",["!","nickname$"]]|
7+
| feature| apijson(java)| uliweb-apijson| comment|
8+
| -------------------| ---------------| ----------------| ------------------------------------------------------------|
9+
|@combine| ✔️| ✖️| Example: "@combine":"&key0,&key1,\|key2,key3"|
10+
|@expr| ✖️| ✔️| Example: "@expr":[["username$","&","email$"],"&",["!","nickname$"]]|
11+
| tag in apijson post/put| "tag": "Moment"| "@tag": "Moment"||
1112

1213

1314

‎uliweb_apijson/apijson/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ def _get_array_q(self,params):
163163

164164
#@expr
165165
model_expr=params.get("@expr")
166-
ifmodel_expr:
166+
ifmodel_expr!=None:
167167
c=self.parent._expr(self.model,params,model_expr)
168168
q=q.filter(c)
169169
else:
@@ -258,5 +258,4 @@ def associated_query_array(self):
258258
delparams[i]
259259
params.update(refs)
260260
q=self._get_array_q(params)
261-
q=q.limit(1)
262261
item[self.name]=self._get_info(q.one())

‎uliweb_apijson/apijson/templates/vue/inc_apijson_table.html

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
varthisp=this
5454
return{
5555
l_request_tag:null,
56+
role:"{{=role or ''}}",
5657

5758
loading:false,
5859
modal_view:false,
@@ -176,10 +177,13 @@
176177
"@page":thisp.current_page-1,
177178
"@query":2
178179
}
179-
arr_params[thisp.model_name]={
180-
"@order":thisp.sort_key+thisp.sort_order,
181-
"@role":"{{=role}}"
180+
varmodel_params={
181+
"@order":thisp.sort_key+thisp.sort_order
182182
}
183+
if(thisp.role!=""){
184+
model_params["@role"]=thisp.role
185+
}
186+
arr_params[thisp.model_name]=model_params
183187
varparams={
184188
"[]":arr_params,
185189
"total@":"/[]/total"
@@ -253,15 +257,15 @@
253257
}
254258
}
255259
else{
256-
this.viewedit_items.push({title:"id",value:row.id,component:"input"})
260+
this.viewedit_items.push({key:"id",title:"id",value:row.id,component:"input"})
257261
vartype2comp={
258262
"boolean":"checkbox"
259263
}
260264
for(varkinrow){
261265
if(k!="id"&&k[0]!="_"){
262266
varvalue=row[k]
263267
varcomp=type2comp[typeofvalue]||"input"
264-
this.viewedit_items.push({title:k,value:value,component:comp})
268+
this.viewedit_items.push({title:k,key:k,value:value,component:comp})
265269
}
266270
}
267271
}
@@ -297,6 +301,9 @@
297301
record_params[d.key]=d.value
298302
}
299303
}
304+
if(thisp.role!=""){
305+
record_params["@role"]=thisp.role
306+
}
300307
params[thisp.l_request_tag]=record_params
301308
params=thisp.ajax_hook("apijson_put","update",params)
302309
$.ajax({
@@ -377,9 +384,13 @@
377384
varparams={
378385
"@tag":thisp.l_request_tag
379386
}
380-
params[thisp.l_request_tag]={
387+
varmodel_params={
381388
"id":thisp.delete_params.row.id
382389
}
390+
if(thisp.role!=""){
391+
model_params["@role"]=thisp.role
392+
}
393+
params[thisp.l_request_tag]=model_params
383394
params=thisp.ajax_hook("apijson_delete","delete",params)
384395
$.ajax({
385396
type:"POST",
@@ -433,6 +444,9 @@
433444
vard=thisp.add_items[k]
434445
post_params[d.key]=d.value
435446
}
447+
if(thisp.role!=""){
448+
post_params["@role"]=thisp.role
449+
}
436450
params[this.l_request_tag]=post_params
437451
params=thisp.ajax_hook("apijson_post","add",params)
438452
$.ajax({

‎uliweb_apijson/apijson/templates/vue/inc_apijson_viewedit.html

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
data:function(){
2626
return{
2727
l_request_tag:null,
28-
role:"{{=role}}",
28+
role:"{{=role or ''}}",
2929
row:{},
3030
row_saved:{},
3131
viewedit_items:[],
@@ -38,8 +38,10 @@
3838
init_viewedit:function(){
3939
varparams={}
4040
varmodel_params={
41-
"id":this.id,
42-
"@role":this.role
41+
"id":this.id
42+
}
43+
if(this.role!=''){
44+
model_params["@role"]=this.role
4345
}
4446
params[this.model_name]=model_params
4547
varthisp=this
@@ -89,6 +91,9 @@
8991
this.row[d.key]=d.value
9092
}
9193
}
94+
if(this.role!=''){
95+
record_params["@role"]=this.role
96+
}
9297
params[this.l_request_tag]=record_params
9398
params=this.ajax_hook("apijson_put","update",params)
9499
varthisp=this

‎uliweb_apijson/apijson/views.py

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,12 @@ def _get_one(self,key):
112112
roles=GET.get("roles")
113113
permission_check_ok=False
114114
ifnotparams_role:
115-
ifhasattr(request,"user"):
115+
ifhasattr(request,"user")andrequest.user:
116116
params_role="LOGIN"
117117
else:
118118
params_role="UNKNOWN"
119119
elifparams_role!="UNKNOWN":
120-
ifnothasattr(request,"user"):
120+
ifnot(hasattr(request,"user")andrequest.user):
121121
returnjson({"code":400,"msg":"no login user for role '%s'"%(params_role)})
122122
ifparams_rolenotinroles:
123123
returnjson({"code":400,"msg":"'%s' not accessible by role '%s'"%(model_name,params_role)})
@@ -200,57 +200,61 @@ def _filter_owner(self,model,model_setting,q):
200200

201201
def_expr(self,model,model_param,model_expr):
202202
ifnotisinstance(model_expr,list):
203-
raiseUliwebError("only accept array in @expr: '%s'"%(model_expr))
203+
raiseUliwebError("only accept array in @expr, but get '%s'"%(model_expr))
204204
num=len(model_expr)
205205
if (num<2ornum>3):
206-
raiseUliwebError("only accept 2 or 3 items in @expr: '%s'"%(model_expr))
206+
raiseUliwebError("only accept 2 or 3 items in @expr, but get '%s'"%(model_expr))
207207
op=model_expr[-2]
208208
ifop=='&':
209209
ifnum!=3:
210-
raiseUliwebError("'&'(and) expression need 3 items: '%s'"%(model_expr))
210+
raiseUliwebError("'&'(and) expression need 3 items, but get '%s'"%(model_expr))
211211
c1=self._get_filter_condition(model,model_param,model_expr[0],expr=True)
212212
c2=self._get_filter_condition(model,model_param,model_expr[2],expr=True)
213213
returnand_(c1,c2)
214214
elifop=='|':
215215
ifnum!=3:
216-
raiseUliwebError("'|'(or) expression need 3 items: '%s'"%(model_expr))
216+
raiseUliwebError("'|'(or) expression need 3 items, but get '%s'"%(model_expr))
217217
c1=self._get_filter_condition(model,model_param,model_expr[0],expr=True)
218218
c2=self._get_filter_condition(model,model_param,model_expr[2],expr=True)
219219
returnor_(c1,c2)
220220
elifop=='!':
221221
ifnum!=2:
222-
raiseUliwebError("'!'(not) expression need 2 items: '%s'"%(model_expr))
222+
raiseUliwebError("'!'(not) expression need 2 items, but get '%s'"%(model_expr))
223223
returnnot_(self._get_filter_condition(model,model_param,model_expr[1],expr=True))
224224
else:
225225
raiseUliwebError("unknown operator: '%s'"%(op))
226226

227227
def_get_filter_condition(self,model,model_param,item,expr=False):
228+
#item can be param key, or expr which expected to be a list
228229
ifisinstance(item,list):
229230
ifexpr:
230231
returnself._expr(model,model_param,model_expr=item)
231232
else:
232-
raiseUliwebError("item can be array only in @expr: '%s'"%(item))
233+
#current implementation won't run here, but keep for safe
234+
raiseUliwebError("item can be list only in @expr: '%s'"%(item))
233235
ifnotisinstance(item,string_types):
236+
#current implementation won't run here, but keep for safe
234237
raiseUliwebError("item should be array or string: '%s'"%(item))
235238
n=item
236239
ifn[0]=="@":
240+
#current implementation won't run here, but keep for safe
237241
raiseUliwebError("param key should not begin with @: '%s'"%(n))
238242
ifn[-1]=="$":
239243
name=n[:-1]
240244
ifhasattr(model,name):
241245
returngetattr(model.c,name).like(model_param[n])
242246
else:
243-
raiseUliwebError("'%s' does not have '%s'"%(model_name,name))
247+
raiseUliwebError("model does not havethis column:'%s'"%(name))
244248
elifn[-1]=="}"andn[-2]=="{":
245249
name=n[:-2]
246250
ifhasattr(model,name):
247-
# TODO
251+
# TODO: https://github.com/APIJSON/APIJSON/blob/master/Document.md#32-%E5%8A%9F%E8%83%BD%E7%AC%A6
248252
pass
249253
raiseUliwebError("still not support '%s'"%(name))
250254
elifhasattr(model,n):
251255
returngetattr(model.c,n)==model_param[n]
252256
else:
253-
raiseUliwebError("not support item: '%s'"%(item))
257+
raiseUliwebError("non-existent column ornot support item: '%s'"%(item))
254258

255259
defhead(self):
256260
try:
@@ -286,18 +290,21 @@ def _head(self,key):
286290
roles=HEAD.get("roles")
287291
permission_check_ok=False
288292
ifnotparams_role:
289-
ifrequest.user:
293+
ifhasattr(request,"user")andrequest.user:
290294
params_role="LOGIN"
291295
else:
292296
params_role="UNKNOWN"
293297
ifparams_rolenotinroles:
294-
returnjson({"code":400,"msg":"'%s' notaccessible by role'%s'"%(model_name,params_role)})
298+
returnjson({"code":400,"msg":"role'%s' nothave permission HEAD for'%s'"%(params_role,model_name)})
295299
ifparams_role=="UNKNOWN":
296300
permission_check_ok=True
301+
elifnot (hasattr(request,"user")andrequest.user):
302+
returnjson({"code":400,"msg":"no login user for role '%s'"%(params_role)})
297303
eliffunctions.has_role(request.user,params_role):
298304
permission_check_ok=True
299305
else:
300306
returnjson({"code":400,"msg":"user doesn't have role '%s'"%(params_role)})
307+
#current implementation won't run here, but keep for safe
301308
ifnotpermission_check_ok:
302309
returnjson({"code":400,"msg":"no permission"})
303310

@@ -381,7 +388,7 @@ def _post_one(self,key,tag):
381388
ifroles:
382389
forroleinroles:
383390
ifrole=="OWNER":
384-
ifrequest.user:
391+
ifhasattr(request,"user")andrequest.user:
385392
permission_check_ok=True
386393
ifuser_id_field:
387394
params[user_id_field]=request.user.id
@@ -500,7 +507,7 @@ def _put_one(self,key,tag):
500507
ifroles:
501508
forroleinroles:
502509
ifrole=="OWNER":
503-
ifrequest.user:
510+
ifhasattr(request,"user")andrequest.user:
504511
ifuser_id_field:
505512
ifobj.to_dict().get(user_id_field)==request.user.id:
506513
permission_check_ok=True
@@ -535,6 +542,8 @@ def _put_one(self,key,tag):
535542
forkinparams:
536543
ifk=="id":
537544
continue
545+
elifk[0]=="@":
546+
continue
538547
elifhasattr(obj,k):
539548
kwargs[k]=params[k]
540549
else:
@@ -621,7 +630,7 @@ def _delete_one(self,key,tag):
621630
ifroles:
622631
forroleinroles:
623632
ifrole=="OWNER":
624-
ifrequest.user:
633+
ifhasattr(request,"user")andrequest.user:
625634
ifuser_id_field:
626635
ifobj.to_dict().get(user_id_field)==request.user.id:
627636
permission_check_ok=True

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp