Began creating a signal system so I don't have to store functions in the
settings module
This commit is contained in:
parent
a4963c51e6
commit
6fad4ceac1
|
@ -1,4 +1,4 @@
|
|||
# This is the base tools package
|
||||
# It contains various tools needed by the base layer of ocarina2
|
||||
|
||||
__all__ = ["file", "proc", "message", "needle", "xm"]
|
||||
__all__ = ["file", "map", "message", "needle", "proc", "signal", "xm"]
|
|
@ -0,0 +1,58 @@
|
|||
#! /usr/bin/python
|
||||
|
||||
# To change this template, choose Tools | Templates
|
||||
# and open the template in the editor.
|
||||
|
||||
__author__="bjschuma"
|
||||
__date__ ="$Jan 19, 2010 11:10:07 PM$"
|
||||
|
||||
|
||||
from collections import deque
|
||||
|
||||
|
||||
class Map(dict):
|
||||
def __init__(self):
|
||||
dict.__init__(self)
|
||||
|
||||
|
||||
def set(self,key,item,right=False):
|
||||
key = key.upper()
|
||||
# Make a new deque if the key doesn't exist
|
||||
if self.has(key) == False:
|
||||
self[key] = deque()
|
||||
|
||||
if right == False:
|
||||
self[key].appendleft(item)
|
||||
else:
|
||||
self[key].append(item)
|
||||
|
||||
|
||||
def get(self,key,all=False):
|
||||
key = key.upper()
|
||||
# Return none if the key doesn't exist
|
||||
if self.has(key) == False:
|
||||
return None
|
||||
|
||||
if all==False:
|
||||
return self[key][0]
|
||||
else:
|
||||
return self[key]
|
||||
|
||||
|
||||
def has(self,key):
|
||||
return (key.upper() in self.keys())
|
||||
|
||||
|
||||
def remove(self,key,item):
|
||||
if self.has(key) == False:
|
||||
return
|
||||
|
||||
items = self.get(key,True)
|
||||
if (item in items) == True:
|
||||
items.remove(item)
|
||||
|
||||
|
||||
def delete(self,key):
|
||||
key = key.upper()
|
||||
if self.has(key) == True:
|
||||
del self[key]
|
|
@ -6,6 +6,7 @@ __date__ ="$Dec 5, 2009 6:46:13 PM$"
|
|||
import os
|
||||
import inspect
|
||||
import settings
|
||||
import bt.signal
|
||||
|
||||
|
||||
def disp(text):
|
||||
|
@ -15,11 +16,12 @@ def disp(text):
|
|||
# Print general text to the screen
|
||||
def write(text,verbose=False):
|
||||
if (verbose==False) or (settings.get("verbose")==True):
|
||||
w = settings.get("write")
|
||||
if w == None:
|
||||
disp(str(text))
|
||||
else:
|
||||
w(str(text))
|
||||
bt.signal.emit("write",str(text))
|
||||
#w = settings.get("write")
|
||||
#if w == None:
|
||||
# disp(str(text))
|
||||
#else:
|
||||
# w(str(text))
|
||||
|
||||
|
||||
# Print an error message
|
||||
|
@ -30,4 +32,5 @@ def error(text):
|
|||
write(filename+" ("+lineno+"): "+text)
|
||||
|
||||
|
||||
settings.set("write", disp)
|
||||
#settings.set("write", disp)
|
||||
bt.signal.register("write",disp)
|
|
@ -0,0 +1,48 @@
|
|||
#! /usr/bin/python
|
||||
|
||||
# To change this template, choose Tools | Templates
|
||||
# and open the template in the editor.
|
||||
|
||||
__author__="bjschuma"
|
||||
__date__ ="$Jan 20, 2010 12:13:21 AM$"
|
||||
|
||||
|
||||
from map import Map
|
||||
global signals, status
|
||||
signals = Map()
|
||||
status = dict()
|
||||
|
||||
|
||||
def register(signal,func):
|
||||
if signals.has(signal) == False:
|
||||
status[signal] = False
|
||||
signals.set(signal,func)
|
||||
|
||||
|
||||
def remove(signal,func):
|
||||
signals.remove(signal,func)
|
||||
|
||||
|
||||
def stop(signal):
|
||||
status[signal] = False
|
||||
|
||||
|
||||
def emit(signal,args=None):
|
||||
if signals.has(signal) == False:
|
||||
return
|
||||
|
||||
funcs = signals.get(signal,True)
|
||||
i = 0
|
||||
status[signal] = True
|
||||
|
||||
for func in funcs:
|
||||
if status[signal] == True:
|
||||
if not args==None:
|
||||
func(args)
|
||||
else:
|
||||
func()
|
||||
else:
|
||||
break
|
||||
|
||||
stop(signal)
|
||||
|
|
@ -6,6 +6,7 @@ __date__ ="$Dec 8, 2009 8:40:36 AM$"
|
|||
import sys
|
||||
from bt.message import *
|
||||
from bt.file import *
|
||||
from bt.signal import *
|
||||
import loader
|
||||
import settings
|
||||
|
||||
|
@ -73,10 +74,11 @@ class Manager:
|
|||
|
||||
# Disable all plugins
|
||||
def shutdown(self):
|
||||
funcs = settings.get("loopquit",True)
|
||||
if not funcs==None:
|
||||
for func in funcs:
|
||||
func()
|
||||
#funcs = settings.get("loopquit",True)
|
||||
#if not funcs==None:
|
||||
# for func in funcs:
|
||||
# func()
|
||||
emit("quit")
|
||||
write("Shutting down manager, disabling all active plugins", True)
|
||||
session = self.findsession()
|
||||
self.savesession(session)
|
||||
|
|
|
@ -13,11 +13,13 @@ from bt.message import write
|
|||
|
||||
# We need this next import to set the process name
|
||||
from bt.proc import setname
|
||||
from bt.signal import emit
|
||||
|
||||
# Import the plugin loader class!
|
||||
import loader
|
||||
import manager
|
||||
|
||||
|
||||
def loadPluginPath(path):
|
||||
loader.load.loaddir(path)
|
||||
manager.manager.addPlugins(loader.load.getPlugins())
|
||||
|
@ -25,7 +27,7 @@ def loadPluginPath(path):
|
|||
|
||||
# Begin our main loop
|
||||
def main():
|
||||
for path in settings.get("PLUGPATH",True):
|
||||
for path in settings.get("PLUGPATH"):
|
||||
loadPluginPath(path)
|
||||
|
||||
write("Welcome to "+settings.get("appname")+"!")
|
||||
|
@ -33,7 +35,8 @@ def main():
|
|||
|
||||
manager.manager.restoresession()
|
||||
manager.manager.startup()
|
||||
settings.get("loop")()
|
||||
emit("run")
|
||||
#settings.get("loop")()
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -12,24 +12,31 @@ import getopt
|
|||
global settings
|
||||
settings = dict()
|
||||
|
||||
#from bt.map import Map
|
||||
#global settings
|
||||
#settings = Map()
|
||||
|
||||
|
||||
# Return true if settings contains key
|
||||
def has(key):
|
||||
global settings
|
||||
#return settings.has(key)
|
||||
return (key.upper() in settings.keys())
|
||||
|
||||
|
||||
# Set key to value
|
||||
# This must be defined before other imports so bt.message can use it
|
||||
def set(key,value,end=False):
|
||||
stack = [value]
|
||||
def set(key,value):
|
||||
key = key.upper()
|
||||
if has(key) == True:
|
||||
if end == False:
|
||||
stack += settings[key]
|
||||
else:
|
||||
stack = settings[key] + stack
|
||||
settings[key.upper()] = stack
|
||||
settings[key] = value
|
||||
#return settings.set(key,value,end)
|
||||
#stack = [value]
|
||||
#key = key.upper()
|
||||
#if has(key) == True:
|
||||
# if end == False:
|
||||
# stack += settings[key]
|
||||
# else:
|
||||
# stack = settings[key] + stack
|
||||
#settings[key.upper()] = stack
|
||||
|
||||
|
||||
from bt.message import write
|
||||
|
@ -40,49 +47,52 @@ from bt import xm
|
|||
|
||||
|
||||
# Return the value at key
|
||||
def get(key, all=False):
|
||||
def get(key):
|
||||
key = key.upper()
|
||||
global settings
|
||||
if has(key)==False:
|
||||
return None
|
||||
if(all == False):
|
||||
return settings[key][0]
|
||||
else:
|
||||
return settings[key]
|
||||
return settings[key]
|
||||
#return settings.get(key,all)
|
||||
#key = key.upper()
|
||||
#global settings
|
||||
#if has(key)==False:
|
||||
# return None
|
||||
#if(all == False):
|
||||
# return settings[key][0]
|
||||
#else:
|
||||
# return settings[key]
|
||||
|
||||
|
||||
# Set key to value only if it is not set yet
|
||||
def init(key,value):
|
||||
if has(key) == False:
|
||||
set(key,value)
|
||||
#def init(key,value):
|
||||
# if settings.has(key) == False:
|
||||
# settings.set(key,value)
|
||||
|
||||
|
||||
# Replace settings[key] with value
|
||||
def replace(key,value):
|
||||
global settings
|
||||
key = key.upper()
|
||||
if (key in settings) == True:
|
||||
del settings[key]
|
||||
set(key,value)
|
||||
#def replace(key,value):
|
||||
# global settings
|
||||
# key = key.upper()
|
||||
# if (key in settings) == True:
|
||||
# del settings[key]
|
||||
# set(key,value)
|
||||
|
||||
|
||||
def delete(key):
|
||||
key = key.upper()
|
||||
global settings
|
||||
#global settings
|
||||
if has(key) == True:
|
||||
del settings[key]
|
||||
|
||||
|
||||
# Pop off the first value at key.upper()
|
||||
def pop(key):
|
||||
key = key.upper()
|
||||
global settings
|
||||
if (key in settings.keys()) == True:
|
||||
item = settings[key].pop(0)
|
||||
if len(settings[key]) == 0:
|
||||
delete(key)
|
||||
return item
|
||||
return None
|
||||
#def pop(key):
|
||||
# key = key.upper()
|
||||
# global settings
|
||||
# if (key in settings.keys()) == True:
|
||||
# item = settings[key].pop(0)
|
||||
# if len(settings[key]) == 0:
|
||||
# delete(key)
|
||||
# return item
|
||||
# return None
|
||||
|
||||
|
||||
# Read settings from file
|
||||
|
@ -168,8 +178,10 @@ write("Setting default values...", True)
|
|||
user = os.path.expanduser("~")
|
||||
#user = os.path.join(user,".ocarina2")
|
||||
set("USER", user)
|
||||
set("PLUGPATH", "../core",True)
|
||||
set("PLUGPATH", "../extra",True)
|
||||
set("PLUGPATH", ["../core", "../extra"])
|
||||
#print get("PLUGPATH")
|
||||
#get("PLUGPATH")+=["../core"]
|
||||
#get("PLUGPATH")+=["../extra"]
|
||||
|
||||
# Find out what platform we are running on
|
||||
set("ARCH", sys.platform)
|
||||
|
|
|
@ -17,6 +17,7 @@ import cline.addch
|
|||
import cline.message
|
||||
#import settings
|
||||
from bt.needle import Needle
|
||||
from bt.signal import *
|
||||
|
||||
|
||||
|
||||
|
@ -25,8 +26,10 @@ def open():
|
|||
write("Starting CLI", True)
|
||||
|
||||
# Tell settings to run this loop
|
||||
settings.set("loop",cline.loop.loop)
|
||||
settings.set("loopquit",cline.loop.quit)
|
||||
#settings.set("loop",cline.loop.loop)
|
||||
#settings.set("loopquit",cline.loop.quit)
|
||||
register("run", cline.loop.loop)
|
||||
register("quit", cline.loop.quit)
|
||||
|
||||
# Initialize a dictionary for key press inputs
|
||||
settings.set("keyinput", dict())
|
||||
|
|
|
@ -40,6 +40,6 @@ def backspace(input):
|
|||
|
||||
# Attempt to run a command
|
||||
def enter(input):
|
||||
write(input)
|
||||
#write(input)
|
||||
input = run(input)
|
||||
return input
|
|
@ -8,6 +8,7 @@ __date__ ="$Dec 19, 2009 9:39:37 PM$"
|
|||
|
||||
|
||||
from bt.message import write
|
||||
from bt.signal import *
|
||||
import manager
|
||||
import settings
|
||||
|
||||
|
@ -36,7 +37,8 @@ def init():
|
|||
settings.set("prompt", ">>> ")
|
||||
settings.set("clinex", 0)
|
||||
settings.set("cliney", 0)
|
||||
settings.set("write", insert)
|
||||
#settings.set("write", insert)
|
||||
register("write", insert)
|
||||
#settings.set("everyloop")
|
||||
|
||||
|
||||
|
@ -62,10 +64,11 @@ def quit():
|
|||
settings.delete("prompt")
|
||||
settings.delete("clinex")
|
||||
settings.delete("cliney")
|
||||
settings.delete("everyloop")
|
||||
#settings.delete("everyloop")
|
||||
|
||||
# Return to previous write function
|
||||
settings.pop("write")
|
||||
remove("write",insert)
|
||||
#settings.pop("write")
|
||||
write("Command line loop has ended",True)
|
||||
|
||||
|
||||
|
@ -83,10 +86,11 @@ def loop():
|
|||
disp(input)
|
||||
|
||||
while halt == False:
|
||||
list = settings.get("everyloop",True)
|
||||
if not list == None:
|
||||
for func in list:
|
||||
func()
|
||||
#emit("loop")
|
||||
#list = settings.get("everyloop",True)
|
||||
#if not list == None:
|
||||
# for func in list:
|
||||
# func()
|
||||
try:
|
||||
input = addch(input)
|
||||
disp(input)
|
||||
|
|
|
@ -10,6 +10,7 @@ __date__ ="$Dec 19, 2009 11:57:19 PM$"
|
|||
import curses
|
||||
import settings
|
||||
import bt.message
|
||||
import bt.signal
|
||||
|
||||
|
||||
def advance(y, maxy, stdscr):
|
||||
|
@ -44,6 +45,8 @@ def insert(string):
|
|||
stdscr.addstr(y, 0, string)
|
||||
advance(y, maxyx[0], stdscr)
|
||||
|
||||
bt.signal.stop("write")
|
||||
|
||||
|
||||
|
||||
# Replace the string on the current line
|
||||
|
|
Loading…
Reference in New Issue