I am trying to convert the mini chat flask application to web2py.

link: https://github.com/sdiehl/minichat

(1) in the flask code, I can access rooms. and users. 
%flask output.
users
{u'test': <__main__.User object at 0x0000000003A7F198>}

When I do a conversion in web2py, I can't access the class variables users. 
or room. I needed to redefine rooms in main in the default.py (action).

How do I access the class variable or make them global?


Here is my web2py conversion.


# -*- coding: utf-8 -*-
# this file is released under public domain and you can use without 
limitations

#########################################################################
## This is a sample controller
## - index is the default action of any application
## - user is required for authentication and authorization
## - download is for downloading files uploaded in the db (does streaming)
#########################################################################
from gevent import monkey

from flask import Flask, json

from gevent import queue
from gevent.pywsgi import WSGIServer

app = Flask(__name__)
app.debug = True

class Room(object):

    def __init__(self):
        self.users = set()
        self.messages = []

    def backlog(self, size=25):
        return self.messages[-size:]

    def subscribe(self, user):
        self.users.add(user)

    def add(self, message):
        for user in self.users:
            print user
            user.queue.put_nowait(message)
        self.messages.append(message)

class User(object):
    def __init__(self):
        self.queue = queue.Queue()




rooms = {
        'python': Room(),
        'django': Room(),}

users = {}



def index():
 
    return dict(message=T('Welcome to web2py!'))


def choose():
    
    form = FORM('Your name:', INPUT(_name='name'), INPUT(_type='submit'))
    
    if form.process().accepted:
        name = form.vars.name;
        uname = unicode(unicode(form.vars.name))
        redirect(URL('default','main', args = uname, extension = ''), 
client_side = True);        
    
    return dict(form = form)



def main():
    
    rooms = {
        'python': Room(),
        'django': Room(),}    
    uname = unicode(request.args(0))
    rooms=rooms.keys()
    return dict(rooms = rooms, uname = uname)



def room():
    room = []
    messages = []
  
    
    room = unicode(request.args(0))
    uid = unicode(request.args(1))
    user = users.get(uid, None)


    if not user:
        users[uid] = user = User()

    active_room = rooms[room]
    print 'subscribe', active_room, user
    messages = active_room.backlog()
        
    return dict(room = room, uid = uid, messages = messages, users = users)




def put():
    
    uid = unicode(request.args(0))
    room = unicode(request.args(1))
    users = request.args(2)
    
    user = users[uid]
    room = rooms[room]

    message = request.vars['message']
    room.add(':'.join([uid, message]))

    return locals()



def poll():
    uid = unicode(request.args(0))
    msg = []
    #users = request.args(1)
    #try:
    #    msg = users[uid].queue.get(timeout=10)
        #msg = auth.user.id.queue.get(timeout=10)
    #except queue.Empty:
    #    msg = []
    return json.dumps(msg)



-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to