Ticket #2458 (closed enhancement: fixed)

Opened 1 month ago

Last modified 3 weeks ago

[PATCH] Allow custom REST-like methods in RestController

Reported by: lento Assigned to:
Priority: normal Milestone: 2.1b2
Component: TurboGears Version: 2.1
Severity: normal Keywords:
Cc:

Description

This allows to have a consistent API in case you have custom methods in your RestController, exposing them the same way as the default REST verbs.

For example you can define get_archive() and post_archive() in your "movies" controller from the moviedemo example:

    custom_actions = ['archive']

    @expose('moviedemo.templates.forms.form')
    def get_archive(self, movie_id, **kwargs):
        """Display a ARCHIVE confirmation form."""

    @expose('moviedemo.templates.forms.result')
    def post_archive(self, movie_id):
        """Archive a movie"""

or just

    custom_actions = ['archive']

    @expose('moviedemo.templates.forms.result')
    def archive(self, movie_id):
        """Archive a project"""

and use them like this:

GET /movies/1/archive

POST /movies/1?_method=ARCHIVE

Attachments

REST_custom_get_actions.patch (3.5 kB) - added by lento on 02/03/10 03:39:36.

Change History

02/03/10 03:39:36 changed by lento

  • attachment REST_custom_get_actions.patch added.

02/03/10 03:40:18 changed by lento

  • version changed from 2.0b7 to trunk.

02/23/10 09:15:50 changed by jorge.vargas

  • version changed from trunk to 2.1.
  • milestone changed from __unclassified__ to 2.1b2.

This patch looks good.

02/23/10 12:03:23 changed by percious

  • status changed from new to closed.
  • resolution set to fixed.

implemented in http://bitbucket.org/turbogears/tg-dev/changeset/39da27c2c339/ (2.1b2 release) uses _custom_actions instead of custom_actions for the attribute. Needs to be documented. Tests have been added for the use case.