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

Commit33687af

Browse files
authored
Merge pull request#50 from zhangchunlin/master
Sync
2 parentsf238e53 +f3e308d commit33687af

File tree

2 files changed

+83
-7
lines changed

2 files changed

+83
-7
lines changed

‎tests/test.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -867,6 +867,45 @@ def test_apijson_get():
867867
>>> print(d)
868868
{'code': 200, 'msg': 'success', '[]': [{'moment': {'user_id': 2, 'date': '2018-11-01 00:00:00', 'content': 'test moment', 'picture_list': '[]', 'id': 1}}]}
869869
870+
>>> #query array, {} <= with datetime
871+
>>> data ='''{
872+
... "[]":{
873+
... "moment": {
874+
... "date{}": "<='2018-11-02 00:00'"
875+
... }
876+
... }
877+
... }'''
878+
>>> r = handler.post('/apijson/get', data=data, pre_call=pre_call_as("admin"), middlewares=[])
879+
>>> d = json_loads(r.data)
880+
>>> print(d)
881+
{'code': 200, 'msg': 'success', '[]': [{'moment': {'user_id': 2, 'date': '2018-11-01 00:00:00', 'content': 'test moment', 'picture_list': '[]', 'id': 1}}, {'moment': {'user_id': 3, 'date': '2018-11-02 00:00:00', 'content': 'test moment from b', 'picture_list': '[]', 'id': 2}}]}
882+
883+
>>> #query array, {} >= with datetime
884+
>>> data ='''{
885+
... "[]":{
886+
... "moment": {
887+
... "date{}": ">='2018-11-02 00:00'"
888+
... }
889+
... }
890+
... }'''
891+
>>> r = handler.post('/apijson/get', data=data, pre_call=pre_call_as("admin"), middlewares=[])
892+
>>> d = json_loads(r.data)
893+
>>> print(d)
894+
{'code': 200, 'msg': 'success', '[]': [{'moment': {'user_id': 3, 'date': '2018-11-02 00:00:00', 'content': 'test moment from b', 'picture_list': '[]', 'id': 2}}, {'moment': {'user_id': 4, 'date': '2018-11-06 00:00:00', 'content': 'test moment from c', 'picture_list': '[]', 'id': 3}}]}
895+
896+
>>> #query array, {} >= with a invalid datetime
897+
>>> data ='''{
898+
... "[]":{
899+
... "moment": {
900+
... "date{}": ">='2018-11-42 00:00'"
901+
... }
902+
... }
903+
... }'''
904+
>>> r = handler.post('/apijson/get', data=data, pre_call=pre_call_as("admin"), middlewares=[])
905+
>>> d = json_loads(r.data)
906+
>>> print(d)
907+
{'code': 400, 'msg': "''2018-11-42 00:00'' cannot convert to datetime"}
908+
870909
>>> #query array, !{} <
871910
>>> data ='''{
872911
... "[]":{
@@ -951,6 +990,21 @@ def test_apijson_get():
951990
>>> print(d)
952991
{'code': 200, 'msg': 'success', '[]': [{'user': {'username': 'userb', 'nickname': 'User B', 'id': 3}}, {'user': {'username': 'userc', 'nickname': 'User C', 'id': 4}}]}
953992
993+
>>> #query array, &{} condition list
994+
>>> data ='''{
995+
... "[]":{
996+
... "user": {
997+
... "@role": "ADMIN",
998+
... "date_join&{}": ">='2018-1-1 00:00',<='2018-2-2 00:00'",
999+
... "@column": "username,nickname,id,date_join"
1000+
... }
1001+
... }
1002+
... }'''
1003+
>>> r = handler.post('/apijson/get', data=data, pre_call=pre_call_as("admin"), middlewares=[])
1004+
>>> d = json_loads(r.data)
1005+
>>> print(d)
1006+
{'code': 200, 'msg': 'success', '[]': [{'user': {'username': 'admin', 'nickname': 'Administrator', 'date_join': '2018-01-01 00:00:00', 'id': 1}}, {'user': {'username': 'usera', 'nickname': 'User A', 'date_join': '2018-02-02 00:00:00', 'id': 2}}]}
1007+
9541008
>>> #query array, {} multiple condition to a same field
9551009
>>> data ='''{
9561010
... "[]":{

‎uliweb_apijson/apijson/views.py

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
#coding=utf-8
2-
fromuliwebimportexpose,functions,models,UliwebError
2+
fromuliwebimportexpose,functions,models,UliwebError,request
33
fromuliweb.ormimportModelNotFound
44
fromuliweb.utils._compatimportstring_types
5+
fromuliweb.utils.dateimportto_datetime
56
fromsqlalchemy.sqlimportand_,or_,not_
67
fromjsonimportloads
78
fromcollectionsimportOrderedDict
89
importlogging
910
importtraceback
11+
fromdatetimeimportdatetime
1012
from .importApiJsonModelQuery
1113

1214
log=logging.getLogger('apijson')
@@ -274,7 +276,7 @@ def _get_filter_condition(self,model,model_param,item,expr=False):
274276
returnfcond
275277
eliflen(cond_list)>1:
276278
fcond=self._get_filter_condition_from_str(col,cond_list[0])
277-
forcincond_list:
279+
forcincond_list[1:]:
278280
fc=self._get_filter_condition_from_str(col,c)
279281
ifoperator=="&":
280282
fcond=and_(fcond,fc)
@@ -293,20 +295,40 @@ def _get_filter_condition(self,model,model_param,item,expr=False):
293295
def_get_filter_condition_from_str(self,col,cond_str):
294296
cond_str=cond_str.strip()
295297
c1,c2=cond_str[0],cond_str[1]
298+
v=None
299+
def_conver():
300+
nonlocalv
301+
ifvandcol.type.python_type==datetime:
302+
_v=v
303+
v=to_datetime(v,tzinfo=getattr(request,"tzinfo",None))
304+
ifv==None:
305+
raiseUliwebError("'%s' cannot convert to datetime"%(_v))
296306
ifc1=='>':
297307
ifc2=="=":
298-
returncol>=cond_str[2:]
308+
v=cond_str[2:]
309+
_conver()
310+
returncol>=v
299311
else:
312+
v=cond_str[1:]
313+
_conver()
300314
returncol>cond_str[1:]
301315
elifc1=='<':
302316
ifc2=="=":
303-
returncol<=cond_str[2:]
317+
v=cond_str[2:]
318+
_conver()
319+
returncol<=v
304320
else:
305-
returncol<cond_str[1:]
321+
v=cond_str[1:]
322+
_conver()
323+
returncol<v
306324
elifc1=="=":
307-
returncol==cond_str[1:]
325+
v=cond_str[1:]
326+
_conver()
327+
returncol==v
308328
elifc1=="!"andc2=="=":
309-
returncol!=cond_str[2:]
329+
v=cond_str[2:]
330+
_conver()
331+
returncol!=v
310332
raiseUliwebError("not support '%s'"%(cond_str))
311333

312334
defhead(self):

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp