I pushed some of the refactored code from my little test project out today. Can't say I'm in love with the code, nor with how it was written (I'm afraid I hacked it from spike test right up to final implementation). Anyway, the result is a poll/long-poll/streaming channel-server for Tornado + JQuery. You use it something like this:
class ChannelHandler( longpoll.LongPollMixin, basehandler.BaseHandler ):
def can_access( self, sub ):
'''Override to provide authenication for channels'''
if not(super(ChannelHandler,self).can_access(sub)):
return False
if my_logic_says_this_user_cannot_see_this_channel( sub ):
return False
return True
class Application(tornado.web.Application):
def _init_(self):
handlers = [
(r"^/channels$", ChannelHandler),
(r"^/([-a-zA-Z]+)$",YourInitialUploadHandler),
]
settings = dict(
# Note: you must copy longpoll.js to the static file directory!
static_path=os.path.join(os.path.dirname(_file_), "static"),
)
tornado.web.Application._init_(self, handlers, **settings)
With the Javascript looking like this:
var subscriptions = $.longPollSubscriptions( {
url: '/channels',
stream: true
} );
subscriptions.subscribe( 'some-channel', function( msg ) { } );
You write standard Handlers to handle initial state transfer, posting messages to the channel, etceteras, so you use your application's normal authorization scheme for that. To write to a channel:
torchannels.channels.Channels.get_channel( channel_name ).send( { } )
Anyway, the code is extremely alpha, but it's up on LaunchPad if you want to play with it.
bzr branch lp:torchannels
Have fun.


Comments
2010-07-25 14:02
> and would have no Trac integ ration The trac-bzr plugin[ 1] seems to provide good integ ration between bzr and t [...]
2010-07-13 21:47
I've always been fascinated wi th the Asterisk AMI interface. So much so that I married tha t fascination with the [...]
2010-07-03 21:32
Yes, only references in dicti onaries are replaced, so hold ing references in lists, tuple s, etceteras keeps them alive.
2010-07-03 11:18
They hold references to remove and install?
2010-06-24 08:34
There's higher-level objects w hich are tracking what is repl aced (the actual Mock objects) . They hold references [...]
2010-06-24 08:23
I haven't tried it, but it see ms to me like this approach ha s one fundamental problem: If you replace all refs o [...]
2010-06-24 08:22
That's the "magic" that made m e go "ooh shiny"
2010-06-24 06:03
That's even more evil than the mock patch decorator...
2010-06-06 18:33
blush Oh.
2010-06-06 11:07
That's what the module does (a utomatically), but on a per-te st-run basis, and only for the process being tested (i [...]
2010-06-06 02:43
Maybe I'm missing something im portant here, but why not just write small scripts to mimic whatever dangerous utili [...]
2010-06-05 15:17
I thought about stubbing out t he python call to the process in the current process, but I want something which stu [...]
2010-06-05 14:47
Hmm... if Mock isn't flexibl e enough to handle mocking pro cesses adequately then I'd lik e to know how it could b [...]
2010-05-19 10:27
Hey, maybe it's a stupid new bie question, but where and ho w exactly should the patching of the core take place? [...]
2010-05-04 14:36
I used Qemu and VirtualBox pre tty extensively back when I wa s working for the OLPC, but mo st of the stuff we were [...]