Skip to content

Instantly share code, notes, and snippets.

@prologic
Created June 10, 2015 23:21
Show Gist options
  • Save prologic/9eec2941e89b5bff4cc8 to your computer and use it in GitHub Desktop.
Save prologic/9eec2941e89b5bff4cc8 to your computer and use it in GitHub Desktop.
Sample event flow of a circuits.web Hello World
#!/usr/bin/env python
from circuits import Debugger
from circuits.web import Controller, Server
class Root(Controller):
def index(self, *args, **kwargs):
return "Hello World!"
(Server(("0.0.0.0", 9000)) + Root() + Debugger()).run()
@prologic
Copy link
Author

Setup

mkvirtualenv hello-circuits
pip install -r requirements.txt

Run

$ ./hello.py 
<registered[web] (<TCPServer/web 24339:MainThread (queued=0) [S]>, <Server/web 24339:MainThread (queued=6) [R]> )>
<registered[web] (<HTTP/web 24339:MainThread (queued=0) [S]>, <Server/web 24339:MainThread (queued=7) [R]> )>
<registered[web] (<Dispatcher/web 24339:MainThread (queued=0) [S]>, <HTTP/web 24339:MainThread (queued=0) [S]> )>
<registered[/] (<Root// 24339:MainThread (queued=0) [S]>, <Server/web 24339:MainThread (queued=5) [R]> )>
<registered[*] (<Debugger/* 24339:MainThread (queued=0) [S]>, <Server/web 24339:MainThread (queued=4) [R]> )>
<started[web] (<Server/web 24339:MainThread (queued=3) [R]> )>
<registered[select] (<Select/select 24339:MainThread (queued=0) [S]>, <TCPServer/web 24339:MainThread (queued=0) [S]> )>
<ready[web] (<TCPServer/web 24339:MainThread (queued=0) [S]>, ('0.0.0.0', 9000) )>
circuits.web/3.1.0 ready! Listening on: http://0.0.0.0:9000
<_read[web] (<socket._socketobject object at 0x7fbcdb459600> )>
<connect[web] (<socket._socketobject object at 0x7fbcdb4593d0>, '127.0.0.1', 34030 )>
<_read[web] (<socket._socketobject object at 0x7fbcdb4593d0> )>
<read[web] (<socket._socketobject object at 0x7fbcdb4593d0>, 'GET / HTTP/1.1\r\nUser-Agent: curl/7.35.0\r\nHost: localhost:9000\r\nAccept: */*\r\n\r\n' )>
<request[web] (<Request GET / HTTP/1.1>, <Response 200 OK None (0)> )>
<index[/] (<Request GET / HTTP/1.1>, <Response 200 OK None (0)> )>
<request_success[web] (<request[web] (<Request GET / HTTP/1.1>, <Response 200 OK None (0)> )>, None )>
<request_complete[web] (<request[web] (<Request GET / HTTP/1.1>, <Response 200 OK None (0)> )>, None )>
<response[web] (<Response 200 OK None (0)> )>
<write[web] (<socket._socketobject object at 0x7fbcdb4593d0>, 'HTTP/1.1 200 OK\r\n' )>
<write[web] (<socket._socketobject object at 0x7fbcdb4593d0>, 'Date: Wed, 10 Jun 2015 23:18:21 GMT\r\nContent-Length: 12\r\nContent-Type: text/html; charset=utf-8\r\nServer: circuits.web/3.1.0\r\n\r\n' )>
<write[web] (<socket._socketobject object at 0x7fbcdb4593d0>, 'Hello World!' )>
<response_success[web] (<response[web] (<Response 200 OK text/html; charset=utf-8 (0)> )>, None )>
<response_complete[web] (<response[web] (<Response 200 OK text/html; charset=utf-8 (0)> )>, None )>
<_write[web] (<socket._socketobject object at 0x7fbcdb4593d0> )>
<_write[web] (<socket._socketobject object at 0x7fbcdb4593d0> )>
<_write[web] (<socket._socketobject object at 0x7fbcdb4593d0> )>
<_read[web] (<socket._socketobject object at 0x7fbcdb4593d0> )>
<disconnect[web] (<socket._socketobject object at 0x7fbcdb4593d0> )>
^C<signal[web] (2, <frame object at 0x1cd6380> )>
<stopped[web] (<Server/web 24339:MainThread (queued=2) [S]> )>
<close[web] ( )>
<registered[*] (<Timer/* 24339:MainThread (queued=0) [S]>, <Server/web 24339:MainThread (queued=3) [S]> )>
<close[web] ( )>
<disconnect[web] (<socket._socketobject object at 0x7fbcdb459600> )>
<closed[web] ( )>
<closed[web] ( )>

Test

$ curl -v -o - http://localhost:9000/
* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 9000 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:9000
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Wed, 10 Jun 2015 23:18:21 GMT
< Content-Length: 12
< Content-Type: text/html; charset=utf-8
* Server circuits.web/3.1.0 is not blacklisted
< Server: circuits.web/3.1.0
< 
* Connection #0 to host localhost left intact
Hello World!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment