Skip to content

Instantly share code, notes, and snippets.

@w0rm
Last active May 13, 2021 17:16

Revisions

  1. w0rm revised this gist Jul 20, 2013. 2 changed files with 20 additions and 17 deletions.
    19 changes: 11 additions & 8 deletions restful_app.py
    Original file line number Diff line number Diff line change
    @@ -1,25 +1,28 @@
    import web
    import json
    from restful_controller import RESTfulController

    urls = (
    r'/resources(?:/(?P<resource_id>[0-9]+))?(?:\.(?P<format>[a-z]+))?',
    r'/resources(?:/(?P<resource_id>[0-9]+))?',
    'ResourceController',
    )


    class ResourceController(RESTfulController):

    def list(self, format):
    def list(self):
    return "list resources", format

    def get(self, resource_id, format):
    return "retrieved resource", resource_id, format
    def get(self, resource_id):
    return "retrieved resource", resource_id

    def create(self, format):
    return "created resource", format
    def create(self):
    resource = json.loads(web.data())
    return "created resource", resource

    def update(self, resource_id, format):
    return "replaced resource", resource_id, format
    def update(self, resource_id):
    resource = json.loads(web.data())
    return "updated resource", resource_id, resource

    def delete(self, resource_id):
    return "deleted resource", resource_id
    18 changes: 9 additions & 9 deletions restful_controller.py
    Original file line number Diff line number Diff line change
    @@ -12,25 +12,25 @@ def __getattr__(self, name):
    else:
    raise AttributeError

    def GET(self, resource_id=None, format=None):
    def GET(self, resource_id=None):
    if resource_id is None:
    return self.list(format)
    return self.list()
    else:
    return self.get(resource_id, format)
    return self.get(resource_id)

    def POST(self, resource_id=None, format=None):
    def POST(self, resource_id=None):
    if resource_id is None:
    return self.create(format)
    return self.create()
    else:
    raise web.badrequest()

    def PUT(self, resource_id=None, format=None):
    def PUT(self, resource_id=None):
    if resource_id is None:
    return self.update_collection(format)
    return self.update_collection()
    else:
    return self.update(resource_id, format)
    return self.update(resource_id)

    def DELETE(self, resource_id=None, format=None):
    def DELETE(self, resource_id=None):
    if resource_id is None:
    return self.delete_collection()
    else:
  2. w0rm revised this gist Jul 20, 2013. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions restful_controller.py
    Original file line number Diff line number Diff line change
    @@ -32,6 +32,6 @@ def PUT(self, resource_id=None, format=None):

    def DELETE(self, resource_id=None, format=None):
    if resource_id is None:
    return self.delete_collection(resource_id)
    return self.delete_collection()
    else:
    return self.delete()
    return self.delete(resource_id)
  3. w0rm renamed this gist Oct 17, 2012. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  4. w0rm created this gist Oct 17, 2012.
    30 changes: 30 additions & 0 deletions restful_app
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,30 @@
    import web
    from restful_controller import RESTfulController

    urls = (
    r'/resources(?:/(?P<resource_id>[0-9]+))?(?:\.(?P<format>[a-z]+))?',
    'ResourceController',
    )


    class ResourceController(RESTfulController):

    def list(self, format):
    return "list resources", format

    def get(self, resource_id, format):
    return "retrieved resource", resource_id, format

    def create(self, format):
    return "created resource", format

    def update(self, resource_id, format):
    return "replaced resource", resource_id, format

    def delete(self, resource_id):
    return "deleted resource", resource_id

    app = web.application(urls, globals())

    if __name__ == "__main__":
    app.run()
    37 changes: 37 additions & 0 deletions restful_controller.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,37 @@
    import web


    class RESTfulController:

    methods = ("list", "get", "create", "update", "delete",
    "update_collection", "delete_collection")

    def __getattr__(self, name):
    if name in self.methods and "headers" in web.ctx:
    raise web.badrequest()
    else:
    raise AttributeError

    def GET(self, resource_id=None, format=None):
    if resource_id is None:
    return self.list(format)
    else:
    return self.get(resource_id, format)

    def POST(self, resource_id=None, format=None):
    if resource_id is None:
    return self.create(format)
    else:
    raise web.badrequest()

    def PUT(self, resource_id=None, format=None):
    if resource_id is None:
    return self.update_collection(format)
    else:
    return self.update(resource_id, format)

    def DELETE(self, resource_id=None, format=None):
    if resource_id is None:
    return self.delete_collection(resource_id)
    else:
    return self.delete()