1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
import logging
import os
import sys
from constants import DEFAULT_DATA_PATH
from qt import QFont
debug = logging.getLogger("settings").debug
error = logging.getLogger("settings").error
warn = logging.getLogger("settings").warn
def get_font_value(s):
if s in ('0', 'False'): return 0
else: return 1
class Settings(dict):
def __init__(self, filename=None, path=None, autocreate=False):
dict.__init__(self)
self.filename = filename # settings filename
self.path = path # directory portion of settings file
self.autocreate = autocreate
self.full_path = os.path.join(path, filename) # abs path
if filename:
self.loadSettings()
def __getitem__(self, k):
try:
return dict.__getitem__(self, k)
except:
warn("Could not locate setting %s", k)
return ""
def get(self, k, default=None):
try:
return dict.__getitem__(self, k)
except:
return default
def getFilename(self):
return self.filename
def setFilename(self, filename):
self.filename = filename
self.full_path = os.path.join(self.path, self.filename)
def getPath(self):
return self.path
def setPath(self, path):
self.path = path
self.full_path = os.path.join(self.path, self.filename)
def getFullPath(self):
return self.full_path
def loadSettings(self):
if not self.filename:
warn("Cannot loadSettings")
return
if not os.access(self.full_path, os.R_OK) and self.autocreate:
self.createInitialSettings()
fp = None
try:
fp = open(self.full_path, "r")
for line in fp:
line = line.strip()
if not line or line[0] == '#': continue
name, value = line.split(':', 1)
name = name.strip().lower()
value = value.strip()
dict.__setitem__(self, name, value)
fp.close()
debug("Loaded settings from: %s", self.full_path)
except Exception, e:
error(e)
if fp: fp.close()
def saveSettings(self):
fp = None
err = None
try:
fp = open(self.full_path, "w")
for k,v in self.items():
fp.write("%s: %s\n" % (k,v))
except Exception, e:
error("Could not saveSettings: %s", e)
err = e
if fp: fp.close()
return err
def createInitialSettings(self):
try:
fp = open(self.full_path, "w")
except Exception, e:
error("Could not write file: %s - %s", self.full_path, str(e))
print
print "ReleaseForge could not create it's configuration file:", self.full_path
print "ReleaseForge will attempt to create a configuration file if"
print "it does not already exist.\n"
print "Please refer to the ReleaseForge FAQ for more information:"
print " http://releaseforge.sourceforge.net/faq.html"
sys.exit(1)
debug("Using %s as the data_path in %s", self.path, self.filename)
fp.write("data_path: %s\n" % self.path)
fp.close()
def parseFontStr(self, fontstr):
# parse a font in the form: family:pt size:bold:italic:underline:strikeout
fontstr = fontstr.strip()
parts = fontstr.split(":")
if len(parts) != 6: raise Exception, "Invalid font spec"
f = QFont()
f.setFamily(parts[0])
f.setPointSize(int(parts[1]))
f.setBold(get_font_value(parts[2]))
f.setItalic(get_font_value(parts[3]))
f.setUnderline(get_font_value(parts[4]))
f.setStrikeOut(get_font_value(parts[5]))
return f
def getFont(self, name):
try:
fstr = self.__getitem__(name)
font = self.parseFontStr(fstr)
return font
except Exception, e:
error(e)
return None
def setFont(self, name, font):
value = "%s:%s:%s:%s:%s:%s" % (font.family(), font.pointSize(),
font.bold(), font.italic(),
font.underline(), font.strikeOut())
dict.__setitem__(self, name, value)
|