allows modifiers in parse_as _rest, thanks Denes
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.4.1-alpha.2+timestamp.2013.01.20.14.51.12
|
Version 2.4.1-alpha.2+timestamp.2013.01.20.21.23.26
|
||||||
|
|||||||
+21
-17
@@ -7209,24 +7209,26 @@ class DAL(object):
|
|||||||
EXAMPLE:
|
EXAMPLE:
|
||||||
|
|
||||||
db.define_table('person',Field('name'),Field('info'))
|
db.define_table('person',Field('name'),Field('info'))
|
||||||
db.define_table('pet',Field('owner',db.person),Field('name'),Field('info'))
|
db.define_table('pet',Field('ownedby',db.person),Field('name'),Field('info'))
|
||||||
|
|
||||||
@request.restful()
|
@request.restful()
|
||||||
def index():
|
def index():
|
||||||
def GET(*args,**vars):
|
def GET(*args,**vars):
|
||||||
patterns = [
|
patterns = [
|
||||||
"/friends[person]",
|
"/friends[person]",
|
||||||
"/{friend.name.startswith}",
|
"/{person.name}/:field",
|
||||||
"/{friend.name}/:field",
|
"/{person.name}/pets[pet.ownedby]",
|
||||||
"/{friend.name}/pets[pet.owner]",
|
"/{person.name}/pets[pet.ownedby]/{pet.name}",
|
||||||
"/{friend.name}/pet[pet.owner]/{pet.name}",
|
"/{person.name}/pets[pet.ownedby]/{pet.name}/:field",
|
||||||
"/{friend.name}/pet[pet.owner]/{pet.name}/:field"
|
("/dogs[pet]", db.pet.info=='dog'),
|
||||||
|
("/dogs[pet]/{pet.name.startswith}", db.pet.info=='dog'),
|
||||||
]
|
]
|
||||||
parser = db.parse_as_rest(patterns,args,vars)
|
parser = db.parse_as_rest(patterns,args,vars)
|
||||||
if parser.status == 200:
|
if parser.status == 200:
|
||||||
return dict(content=parser.response)
|
return dict(content=parser.response)
|
||||||
else:
|
else:
|
||||||
raise HTTP(parser.status,parser.error)
|
raise HTTP(parser.status,parser.error)
|
||||||
|
|
||||||
def POST(table_name,**vars):
|
def POST(table_name,**vars):
|
||||||
if table_name == 'person':
|
if table_name == 'person':
|
||||||
return db.person.validate_and_insert(**vars)
|
return db.person.validate_and_insert(**vars)
|
||||||
@@ -7403,7 +7405,7 @@ def index():
|
|||||||
dbset = db(queries[table])
|
dbset = db(queries[table])
|
||||||
dbset=dbset(db[table])
|
dbset=dbset(db[table])
|
||||||
elif tag==':field' and table:
|
elif tag==':field' and table:
|
||||||
# # print 're3:'+tag
|
# print 're3:'+tag
|
||||||
field = args[i]
|
field = args[i]
|
||||||
if not field in db[table]: break
|
if not field in db[table]: break
|
||||||
# hand-built patterns should respect .readable=False as well
|
# hand-built patterns should respect .readable=False as well
|
||||||
@@ -7411,16 +7413,18 @@ def index():
|
|||||||
return Row({'status':418,'pattern':pattern,
|
return Row({'status':418,'pattern':pattern,
|
||||||
'error':'I\'m a teapot','response':None})
|
'error':'I\'m a teapot','response':None})
|
||||||
try:
|
try:
|
||||||
item = dbset.select(db[table][field],limitby=(0,1)).first()
|
distinct = vars.get('distinct', False) == 'True'
|
||||||
|
offset = int(vars.get('offset',None) or 0)
|
||||||
|
limits = (offset,int(vars.get('limit',None) or 1000)+offset)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return Row({'status':400,'pattern':pattern,
|
return Row({'status':400,'error':'invalid limits','response':None})
|
||||||
'error':'invalid path','response':None})
|
items = dbset.select(db[table][field], distinct=distinct, limitby=limits)
|
||||||
if not item:
|
if items:
|
||||||
return Row({'status':404,'pattern':pattern,
|
return Row({'status':200,'response':items,
|
||||||
'error':'record not found','response':None})
|
|
||||||
else:
|
|
||||||
return Row({'status':200,'response':item[field],
|
|
||||||
'pattern':pattern})
|
'pattern':pattern})
|
||||||
|
else:
|
||||||
|
return Row({'status':404,'pattern':pattern,
|
||||||
|
'error':'no record found','response':None})
|
||||||
elif tag != args[i]:
|
elif tag != args[i]:
|
||||||
break
|
break
|
||||||
otable = table
|
otable = table
|
||||||
@@ -7437,9 +7441,9 @@ def index():
|
|||||||
offset = int(vars.get('offset',None) or 0)
|
offset = int(vars.get('offset',None) or 0)
|
||||||
limits = (offset,int(vars.get('limit',None) or 1000)+offset)
|
limits = (offset,int(vars.get('limit',None) or 1000)+offset)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
Row({'status':400,'error':'invalid limits','response':None})
|
return Row({'status':400,'error':'invalid limits','response':None})
|
||||||
if count > limits[1]-limits[0]:
|
if count > limits[1]-limits[0]:
|
||||||
Row({'status':400,'error':'too many records','response':None})
|
return Row({'status':400,'error':'too many records','response':None})
|
||||||
try:
|
try:
|
||||||
response = dbset.select(limitby=limits,orderby=orderby,*fields)
|
response = dbset.select(limitby=limits,orderby=orderby,*fields)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
|
|||||||
Reference in New Issue
Block a user