Python: Networked IDLE/Redo IDLE front-end while using the same back-end?

Posted by Rosarch on Stack Overflow See other posts from Stack Overflow or by Rosarch
Published on 2010-05-23T20:51:26Z Indexed on 2010/05/24 6:11 UTC
Read the original article Hit count: 365

Filed under:
|
|
|

Is there any existing web app that lets multiple users work with an interactive IDLE type session at once?

Something like:

IDLE 2.6.4
Morgan: >>> letters = list("abcdefg")
Morgan: >>> # now, how would you iterate over letters?
Jack: >>> for char in letters:
    print "char %s" % char


char a
char b
char c
char d
char e
char f
char g
Morgan: >>> # nice nice

If not, I would like to create one. Is there some module I can use that simulates an interactive session? I'd want an interface like this:

def class InteractiveSession():
    ''' An interactive Python session '''

    def putLine(line):
        ''' Evaluates line '''
        pass

    def outputLines():
        ''' A list of all lines that have been output by the session '''
        pass

    def currentVars():
        ''' A dictionary of currently defined variables and their values '''
        pass

(Although that last function would be more of an extra feature.)

To formulate my problem another way: I'd like to create a new front end for IDLE. How can I do this?

UPDATE: Or maybe I can simulate IDLE through eval()?

UPDATE 2: What if I did something like this:

  • I already have a simple GAE Python chat app set up, that allows users to sign in, make chat rooms, and chat with each other.

  • Instead of just saving incoming messages to the datastore, I could do something like this:


def putLine(line, user, chat_room):
''' Evaluates line for the session used by chat_room '''

# get the interactive session for this chat room
curr_vars = InteractiveSession.objects.where("chatRoom = %s" % chat_room).get()

result = eval(prepared_line, curr_vars.state, {})

curr_vars.state = curr_globals

curr_vars.lines.append((user, line))
if result:
    curr_vars.lines.append(('SELF', result.__str__()))

curr_vars.put()

The InteractiveSession model:

def class InteractiveSession(db.Model):


 # a dictionary mapping variables to values
    # it looks like GAE doesn't actually have a dictionary field, so what would be best to use here?
    state = db.DictionaryProperty()

    # a transcript of the session
    #
    # a list of tuples of the form (user, line_entered)
    #
    # looks something like:
    #
    # [('Morgan', '# hello'),
    #  ('Jack', 'x = []'),
    #  ('Morgan', 'x.append(1)'),
    #  ('Jack', 'x'),
    #  ('SELF', '[1]')]
    lines = db.ListProperty()

Could this work, or am I way off/this approach is infeasible/I'm duplicating work when I should use something already built?

© Stack Overflow or respective owner

Related posts about python

Related posts about gui