Mulib/Examples

From Second Life Wiki
< Mulib
Revision as of 17:02, 3 January 2008 by Which Linden (talk | contribs) (→‎stacked: Slightly more python highlighting. The repls looks stupid with the python highlighting though, so left them alone.)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Mulib Examples

These are some short examples to give a flavor of using mulib. You can find all the example code in the examples directory of a mulib checkout.

hello world

The following program will bring up a webserver listening on port 8080 which can respond to a single request, "GET /", with the response "hello, world":

<python># hello_world.py: from mulib import mu

from eventlet import api, httpd

class HelloWorld(mu.Resource):

   def handle_get(self, req):
       req.write("hello, world\n")


if __name__ == "__main__":

   root = HelloWorld()
   httpd.server(
       api.tcp_listener(('0.0.0.0', 8080)),
       mu.SiteMap(root))</python>

CGI

You can treat this resource as a CGI, by writing a second, wrapper, file that refers to it:

<python># hello_world.cgi:

  1. !/usr/bin/python

from mulib import cgiadapter

cgiadapter.run_as_cgi('hello_world', 'HelloWorld')</python>

Configure your web server to execute hello_world.cgi, and you should be able to interact with it just like the standalone version.

stacked

Stacked is a pure REST server, and you can use it to traverse native python objects like dicts. You invoke these special capabilities of Stacked by placing a python dict or list in the resource hierarchy instead of a mu.Resource, in this case at the root.

<python>from mulib import mu

from eventlet import api, httpd

root = {:'hello, world\n',

       'other':"hello, other\n"}

httpd.server(api.tcp_listener(('0.0.0.0', 8080)), mu.SiteMap(root))</python>

You can then access this dictionary as a REST resource, e.g.

 > curl http://localhost:8080/     
 hello, world
 > curl http://localhost:8080/other
 hello, other
 > curl -X PUT -d "the new data" http://localhost:8080/third
 > curl http://localhost:8080/third
 the new data

Mu/stacked can do content negotiation:

 > curl -X PUT -H "Content-type: application/json" -d '{"hi": "there"}' http://localhost:8080/fourth
 > curl http://localhost:8080/fourth/hi
 there
 > curl -H "Accept: application/json" http://localhost:8080/fourth
 {'hi': 'there'}

Note: This means that anyone who has access to your stacked web service can modify the data in your process! In the future we might have a 'read-only' implementation.