ocarina/src/base/settings.py

177 lines
3.2 KiB
Python

import os.path
__author__="bjschuma"
__date__ ="$Dec 4, 2009 4:04:24 PM$"
#import bt.message.disp
import os
import sys
import getopt
# Create a dictionary to hold the settings
global settings
settings = dict()
# Return true if settings contains key
def has(key):
global settings
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]
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
from bt.message import error
from bt.file import fopen
from bt.file import join
from bt import xm
# Return the value at key
def get(key, all=False):
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)
# 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 delete(key):
key = key.upper()
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
# Read settings from file
def readfile(file):
write("Reading file: "+file,True)
file = fopen(file)
# Parse the user input
def parseInput():
write("Parsing user input",True)
input = sys.argv[1:]
write(input,True)
optc = "vp:"
long = ["verbose", "path="]
# Attempt to parse user input
try:
opts, args = getopt.getopt(input, optc, long)
for opt in opts:
if opt[0] == "-p":
set("PLUGPATH", opt[1], True)
set("ARGS", args)
except getopt.GetoptError, e:
error(e.msg)
return
def clean():
delete("user")
delete("arch")
delete("write")
delete("args")
delete("plugpath")
delete("verbose")
delete("loop")
delete("loopquit")
def save(path):
clean()
global settings
path = join(path,"settings")
xm.new()
elm = xm.element("settings")
xm.append(elm)
a = settings.keys()
for key in settings.keys():
value = get(key)
if value == None:
continue
e = xm.element(key)
t = xm.text(str(value))
xm.append(t,e)
xm.append(e,elm)
xm.write(path)
def load(path):
global settings
path = join(path,"settings")
xm.load(path)
elm = xm.child()
if elm == None:
return
for node in xm.children(elm):
if xm.isElm(node) == False:
continue
key = xm.name(node)
val = xm.child(node)
set(key,xm.value(val))
# Set default values
# Set verbose first so we can use write()
set("VERBOSE", ('-v' in sys.argv) or ("--verbose" in sys.argv) )
write("Setting default values...", True)
# Find who is running the program
user = os.path.expanduser("~")
#user = os.path.join(user,".ocarina2")
set("USER", user)
set("PLUGPATH", "../core",True)
set("PLUGPATH", "../extra",True)
# Find out what platform we are running on
set("ARCH", sys.platform)
#if get("ARCH") == 'linux2':
# readfile("/etc/ocarina.conf")
parseInput()