diff options
author | RaNaN <Mast3rRaNaN@hotmail.de> | 2011-07-14 19:42:27 +0200 |
---|---|---|
committer | RaNaN <Mast3rRaNaN@hotmail.de> | 2011-07-14 19:42:27 +0200 |
commit | 4612984d4bd929f814a56118620faa02cbf74577 (patch) | |
tree | e3c2a158e5dfcee061f18e6edf2975c184f8d941 /module/ConfigParser.py | |
parent | new DLC plugins, adapted irc interface - needs testing (diff) | |
download | pyload-4612984d4bd929f814a56118620faa02cbf74577.tar.xz |
fixed config on webif + show description
Diffstat (limited to 'module/ConfigParser.py')
-rw-r--r-- | module/ConfigParser.py | 234 |
1 files changed, 114 insertions, 120 deletions
diff --git a/module/ConfigParser.py b/module/ConfigParser.py index 5804a15cf..aa8367fb4 100644 --- a/module/ConfigParser.py +++ b/module/ConfigParser.py @@ -41,181 +41,175 @@ class ConfigParser: self.config = {} # the config values self.plugin = {} # the config for plugins self.oldRemoteData = {} - + self.checkVersion() - + self.readConfig() self.deleteOldPlugins() - + #---------------------------------------------------------------------- def checkVersion(self, n=0): """determines if config need to be copied""" try: if not exists("pyload.conf"): - copy(join(pypath,"module", "config", "default.conf"), "pyload.conf") - + copy(join(pypath, "module", "config", "default.conf"), "pyload.conf") + if not exists("plugin.conf"): f = open("plugin.conf", "wb") - f.write("version: "+str(CONF_VERSION)) + f.write("version: " + str(CONF_VERSION)) f.close() - + f = open("pyload.conf", "rb") v = f.readline() f.close() - v = v[v.find(":")+1:].strip() - + v = v[v.find(":") + 1:].strip() + if not v or int(v) < CONF_VERSION: - copy(join(pypath,"module", "config", "default.conf"), "pyload.conf") + copy(join(pypath, "module", "config", "default.conf"), "pyload.conf") print "Old version of config was replaced" - + f = open("plugin.conf", "rb") v = f.readline() f.close() - v = v[v.find(":")+1:].strip() - + v = v[v.find(":") + 1:].strip() + if not v or int(v) < CONF_VERSION: f = open("plugin.conf", "wb") - f.write("version: "+str(CONF_VERSION)) + f.write("version: " + str(CONF_VERSION)) f.close() print "Old version of plugin-config replaced" except: if n < 3: sleep(0.3) - self.checkVersion(n+1) + self.checkVersion(n + 1) else: raise - + #---------------------------------------------------------------------- def readConfig(self): """reads the config file""" - - self.config = self.parseConfig(join(pypath,"module", "config", "default.conf")) + + self.config = self.parseConfig(join(pypath, "module", "config", "default.conf")) self.plugin = self.parseConfig("plugin.conf") - + try: homeconf = self.parseConfig("pyload.conf") if homeconf["remote"].has_key("username"): if homeconf["remote"].has_key("password"): - self.oldRemoteData = {"username": homeconf["remote"]["username"]["value"], "password": homeconf["remote"]["username"]["value"]} + self.oldRemoteData = {"username": homeconf["remote"]["username"]["value"], + "password": homeconf["remote"]["username"]["value"]} del homeconf["remote"]["password"] del homeconf["remote"]["username"] self.updateValues(homeconf, self.config) - + except Exception, e: print "Config Warning" print_exc() - + #---------------------------------------------------------------------- def parseConfig(self, config): """parses a given configfile""" - + f = open(config) - + config = f.read() config = config.splitlines()[1:] - + conf = {} - - section, option, value, typ, desc = "","","","","" - + + section, option, value, typ, desc = "", "", "", "", "" + listmode = False - - for line in config: + for line in config: comment = line.rfind("#") - if line.find(":", comment) < 0 and line.find("=", comment) < 0 and comment > 0 and line[comment-1].isspace(): + if line.find(":", comment) < 0 and line.find("=", comment) < 0 and comment > 0 and line[ + comment - 1].isspace(): line = line.rpartition("#") # removes comments if line[1]: line = line[0] else: line = line[2] - + line = line.strip() - + try: - if line == "": continue elif line.endswith(":"): section, none, desc = line[:-1].partition('-') section = section.strip() desc = desc.replace('"', "").strip() - conf[section] = { "desc" : desc } + conf[section] = {"desc": desc} else: if listmode: - if line.endswith("]"): listmode = False - line = line.replace("]","") - + line = line.replace("]", "") + value += [self.cast(typ, x.strip()) for x in line.split(",") if x] - + if not listmode: - conf[section][option] = { "desc" : desc, - "type" : typ, - "value" : value} - - + conf[section][option] = {"desc": desc, + "type": typ, + "value": value} + + else: content, none, value = line.partition("=") - + content, none, desc = content.partition(":") - + desc = desc.replace('"', "").strip() - + typ, none, option = content.strip().rpartition(" ") value = value.strip() - + if value.startswith("["): - if value.endswith("]"): + if value.endswith("]"): listmode = False value = value[:-1] else: listmode = True - + value = [self.cast(typ, x.strip()) for x in value[1:].split(",") if x] else: value = self.cast(typ, value) - + if not listmode: - conf[section][option] = { "desc" : desc, - "type" : typ, - "value" : value} - + conf[section][option] = {"desc": desc, + "type": typ, + "value": value} + except Exception, e: print "Config Warning" print_exc() - f.close() return conf - - - + + #---------------------------------------------------------------------- def updateValues(self, config, dest): """sets the config values from a parsed config file to values in destination""" - + for section in config.iterkeys(): - if dest.has_key(section): - for option in config[section].iterkeys(): - - if option == "desc": continue - + if option in ("desc", "outline"): continue + if dest[section].has_key(option): dest[section][option]["value"] = config[section][option]["value"] - - #else: - # dest[section][option] = config[section][option] - - - #else: - # dest[section] = config[section] + + #else: + # dest[section][option] = config[section][option] + + + #else: + # dest[section] = config[section] #---------------------------------------------------------------------- def saveConfig(self, config, filename): @@ -225,80 +219,79 @@ class ConfigParser: f.write("version: %i \n" % CONF_VERSION) for section in config.iterkeys(): f.write('\n%s - "%s":\n' % (section, config[section]["desc"])) - + for option, data in config[section].iteritems(): - - if option == "desc": continue - + if option in ("desc", "outline"): continue + if isinstance(data["value"], list): value = "[ \n" for x in data["value"]: value += "\t\t" + str(x) + ",\n" value += "\t\t]\n" else: - if type(data["value"]) in (str,unicode): + if type(data["value"]) in (str, unicode): value = data["value"] + "\n" else: value = str(data["value"]) + "\n" try: - f.write('\t%s %s : "%s" = %s' % (data["type"], option, data["desc"], value) ) + f.write('\t%s %s : "%s" = %s' % (data["type"], option, data["desc"], value)) except UnicodeEncodeError: - f.write('\t%s %s : "%s" = %s' % (data["type"], option, data["desc"], value.encode("utf8")) ) + f.write('\t%s %s : "%s" = %s' % (data["type"], option, data["desc"], value.encode("utf8"))) def cast(self, typ, value): """cast value to given format""" if type(value) not in (str, unicode): return value - + elif typ == "int": return int(value) elif typ == "bool": - return True if value.lower() in ("1","true", "on", "an","yes") else False + return True if value.lower() in ("1", "true", "on", "an", "yes") else False elif typ == "time": if not value: value = "0:00" - if not ":" in value: value+=":00" + if not ":" in value: value += ":00" return value - elif typ in ("str","file","folder"): + elif typ in ("str", "file", "folder"): try: return value.encode("utf8") except: return value else: return value - + #---------------------------------------------------------------------- def save(self): """saves the configs to disk""" - + self.saveConfig(self.config, "pyload.conf") self.saveConfig(self.plugin, "plugin.conf") - + #---------------------------------------------------------------------- def __getitem__(self, section): """provides dictonary like access: c['section']['option']""" return Section(self, section) - + #---------------------------------------------------------------------- def get(self, section, option): """get value""" val = self.config[section][option]["value"] try: - if type(val) in (str,unicode): + if type(val) in (str, unicode): return val.decode("utf8") else: return val except: return val - + #---------------------------------------------------------------------- def set(self, section, option, value): """set value""" value = self.cast(self.config[section][option]["type"], value) - + self.config[section][option]["value"] = value self.save() - + #---------------------------------------------------------------------- def getPlugin(self, plugin, option): """gets a value for a plugin""" @@ -310,13 +303,13 @@ class ConfigParser: return val except: return val - + #---------------------------------------------------------------------- def setPlugin(self, plugin, option, value): """sets a value for a plugin""" value = self.cast(self.plugin[plugin][option]["type"], value) - + self.plugin[plugin][option]["value"] = value self.save() @@ -325,23 +318,25 @@ class ConfigParser: return self.config[section][option] #---------------------------------------------------------------------- - def addPluginConfig(self, config): - """adds config option with tuple (plugin, name, type, desc, default)""" - - if not self.plugin.has_key(config[0]): - self.plugin[config[0]] = { "desc" : config[0], - config[1] : { - "desc" : config[3], - "type" : config[2], - "value" : self.cast(config[2], config[4]) - } } + def addPluginConfig(self, name, config, outline=""): + """adds config options with tuples (name, type, desc, default)""" + if not self.plugin.has_key(name): + conf = {"desc": name, + "outline": outline} + self.plugin[name] = conf else: - if not self.plugin[config[0]].has_key(config[1]): - self.plugin[config[0]][config[1]] = { - "desc" : config[3], - "type" : config[2], - "value" : self.cast(config[2], config[4]) - } + conf = self.plugin[name] + conf["outline"] = outline + + for item in config: + if conf.has_key(item[0]): + conf[item[0]]["type"] = item[1] + else: + conf[item[0]] = { + "desc": item[2], + "type": item[1], + "value": self.cast(config[1], config[3]) + } def deleteOldPlugins(self): """ remove old plugins from config """ @@ -359,32 +354,31 @@ class Section: """Constructor""" self.parser = parser self.section = section - + #---------------------------------------------------------------------- def __getitem__(self, item): """getitem""" return self.parser.get(self.section, item) - + #---------------------------------------------------------------------- def __setitem__(self, item, value): """setitem""" self.parser.set(self.section, item, value) - - + if __name__ == "__main__": pypath = "" from time import time - + a = time() - + c = ConfigParser() - + b = time() - - print "sec", b-a - + + print "sec", b - a + print c.config - + c.saveConfig(c.config, "user.conf") |