SWEET! I'm not even going to bother fixing the mess I made :) This looks awesome!
I'll be spending a good chunk of time on this later this evening and will post results/feedback and anything else you'd like to see or have me test. Thanks Mart :) On Mar 17, 4:26 pm, Massimo Di Pierro <massimo.dipie...@gmail.com> wrote: > No. This is an action > > @request.restful() > def api(): > def GET(*args,**vars): > parsed = db.parse_as_rest('auto',args,vars) > if parsed.status==200: return dict(content=parsed.response) > raise HTTP(parsed.status,parsed.error) > return locals() > > ix exposes the APIs so it goes in controller. If instead of 'auto' you > choose to define your own patterns, perhaps you should that in a > model: > > APIPATTERNS=[ > ... > ] > > and then pass APIPATTERNS instead of 'auto' > > Massimo > > On Mar 17, 3:05 pm, "David J." <da...@styleflare.com> wrote: > > > > > > > > > For clarification; This gets put in the model code not controller code > > correct? > > > So for example in "db.py" > > > Thanks. > > > On 3/17/11 3:58 PM, Massimo Di Pierro wrote: > > > > This is now in trunk. Some API changes are still possible. > > > > Right now it supports fiels of type, id, integer, double, date, > > > datetime, time, boolean, reference, list and string fields with "slug" > > > in the name. > > > > If you have a model like this > > > > db.define_table('person',Field('name'),Field('birthdate','date'),Field('age > > > ','integer'),Field('married','boolean'),Field('tags','list:string')) > > > db.define_table('dog',Field('name'),Field('owner',db.person),Field('info',' > > > text')) > > > > simply add this to your model > > > > @request.restful() > > > def api(): > > > def GET(*args,**vars): > > > parsed = db.parse_as_rest('auto',args,vars) > > > if parsed.status==200: return dict(content=parsed.response) > > > raise HTTP(parsed.status,parsed.error) > > > return locals() > > > > and it will expose APIs like > > > > /yourapp/default/api/person/id/5 > > > /yourapp/default/api/person/married/true > > > /yourapp/default/api/person/birthdate/2008 > > > /yourapp/default/api/person/age/10/30 # notice it is a range > > > /yourapp/default/api/person/id/5/name # notice a field > > > /yourapp/default/api/person/id/5/dog # notice a reference (his > > > dogs) > > > > Here is a complete list of the APIs automatically generated. > > > > /person/id/{person.id} > > > /person/id/{person.id}/:field > > > /person/id/{person.id}/dog[dog.owner] > > > /person/id/{person.id}/dog[dog.owner]/id/{dog.id} > > > /person/id/{person.id}/dog[dog.owner]/id/{dog.id}/:field > > > /person/id/{person.id}/dog[dog.owner]/owner/{dog.owner} > > > /person/id/{person.id}/dog[dog.owner]/owner/{dog.owner}/:field > > > /person/name/dog[dog.owner] > > > /person/name/dog[dog.owner]/id/{dog.id} > > > /person/name/dog[dog.owner]/id/{dog.id}/:field > > > /person/name/dog[dog.owner]/owner/{dog.owner} > > > /person/name/dog[dog.owner]/owner/{dog.owner}/:field > > > /person/birthdate/{person.birthdate.year} > > > /person/birthdate/{person.birthdate.year}/:field > > > /person/birthdate/{person.birthdate.year}/{person.birthdate.month} > > > /person/birthdate/{person.birthdate.year}/ > > > {person.birthdate.month}/:field > > > /person/birthdate/{person.birthdate.year}/{person.birthdate.month}/ > > > {person.birthdate.day} > > > /person/birthdate/{person.birthdate.year}/{person.birthdate.month}/ > > > {person.birthdate.day}/:field > > > /person/birthdate/{person.birthdate.year}/{person.birthdate.month}/ > > > {person.birthdate.day}/dog[dog.owner] > > > /person/birthdate/{person.birthdate.year}/{person.birthdate.month}/ > > > {person.birthdate.day}/dog[dog.owner]/id/{dog.id} > > > /person/birthdate/{person.birthdate.year}/{person.birthdate.month}/ > > > {person.birthdate.day}/dog[dog.owner]/id/{dog.id}/:field > > > /person/birthdate/{person.birthdate.year}/{person.birthdate.month}/ > > > {person.birthdate.day}/dog[dog.owner]/owner/{dog.owner} > > > /person/birthdate/{person.birthdate.year}/{person.birthdate.month}/ > > > {person.birthdate.day}/dog[dog.owner]/owner/{dog.owner}/:field > > > /person/age/{person.age.ge}/{person.age.lt} > > > /person/age/{person.age.ge}/{person.age.lt}/:field > > > /person/age/{person.age.ge}/{person.age.lt}/dog[dog.owner] > > > /person/age/{person.age.ge}/{person.age.lt}/dog[dog.owner]/id/{dog.id} > > > /person/age/{person.age.ge}/{person.age.lt}/dog[dog.owner]/id/ > > > {dog.id}/:field > > > /person/age/{person.age.ge}/{person.age.lt}/dog[dog.owner]/owner/ > > > {dog.owner} > > > /person/age/{person.age.ge}/{person.age.lt}/dog[dog.owner]/owner/ > > > {dog.owner}/:field > > > /person/married/{person.married} > > > /person/married/{person.married}/:field > > > /person/married/{person.married}/dog[dog.owner] > > > /person/married/{person.married}/dog[dog.owner]/id/{dog.id} > > > /person/married/{person.married}/dog[dog.owner]/id/{dog.id}/:field > > > /person/married/{person.married}/dog[dog.owner]/owner/{dog.owner} > > > /person/married/{person.married}/dog[dog.owner]/owner/ > > > {dog.owner}/:field > > > /person/tags/{person.tags.contains} > > > /person/tags/{person.tags.contains}/:field > > > /person/tags/{person.tags.contains}/dog[dog.owner] > > > /person/tags/{person.tags.contains}/dog[dog.owner]/id/{dog.id} > > > /person/tags/{person.tags.contains}/dog[dog.owner]/id/{dog.id}/:field > > > /person/tags/{person.tags.contains}/dog[dog.owner]/owner/{dog.owner} > > > /person/tags/{person.tags.contains}/dog[dog.owner]/owner/ > > > {dog.owner}/:field > > > /dog/id/{dog.id} > > > /dog/id/{dog.id}/:field > > > /dog/owner/{dog.owner} > > > /dog/owner/{dog.owner}/:field > > > > You can cut and paste the output of > > > > /yourapp/default/api/patterns > > > > back in the code as patterns and change them. > > > > You can disable some by making the corresponding fields readable=False > > > in the api action. > > > > Hope this is useful. Please send comments. > > > > On Mar 16, 6:32 pm, Massimo Di Pierro<massimo.dipie...@gmail.com> > > > wrote: > > >>http://vimeo.com/21133657