78 lines
1.3 KiB
Python
78 lines
1.3 KiB
Python
#! /usr/bin/python
|
|
|
|
# To change this template, choose Tools | Templates
|
|
# and open the template in the editor.
|
|
|
|
__author__="bjschuma"
|
|
__date__ ="$Feb 24, 2010 9:13:41 PM$"
|
|
|
|
|
|
from ct.dict import Dict
|
|
from ct.slist import Slist
|
|
|
|
|
|
# Maintain the list of guests
|
|
class GuestList(Slist):
|
|
def __init__(self,name):
|
|
Slist.__init__(self)
|
|
self.name = name
|
|
self.active = False
|
|
|
|
|
|
|
|
|
|
class Event(Dict):
|
|
def __init__(self):
|
|
Dict.__init__(self)
|
|
|
|
|
|
def type(self,guest):
|
|
return type(guest).__name__
|
|
|
|
|
|
# Add a "guest" (function or script) to this event
|
|
def invite(self, name, guest, priority=None):
|
|
type = self.type(guest)
|
|
if priority==None:
|
|
if type=='str' or type=='unicode':
|
|
priority = 200
|
|
else:
|
|
priority = 100
|
|
if self.has(name) == False:
|
|
self[name] = GuestList(name)
|
|
self[name].add(guest, priority)
|
|
|
|
|
|
# Remove a guest from the guest list
|
|
def uninvite(self, name, guest):
|
|
self[name].remove(guest)
|
|
|
|
|
|
def stop(self,name):
|
|
self[name].active = False
|
|
|
|
|
|
# Start the party!
|
|
def start(self,name,args=None):
|
|
if self.has(name) == False:
|
|
return
|
|
|
|
self[name].active = True
|
|
|
|
for priority,guest in self[name]:
|
|
if self[name].active == True:
|
|
if self.type(guest)=='unicode' or self.type(guest)=='str':
|
|
import scripting
|
|
scripting.runScript(guest)
|
|
elif args==None:
|
|
guest()
|
|
else:
|
|
guest(args)
|
|
|
|
self.stop(name)
|
|
|
|
|
|
|
|
|
|
|