X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fxdg%2FIniFile.py;fp=src%2Fxdg%2FIniFile.py;h=0000000000000000000000000000000000000000;hb=94695a8c9a3ebf78e1f4c32d854e6b5a163d4667;hp=f3f08c79cf7089eed1981a40a08e680685cae1de;hpb=75247cf58d8d7f5a420aa300a01b1f50e4bffb23;p=drlaunch diff --git a/src/xdg/IniFile.py b/src/xdg/IniFile.py deleted file mode 100644 index f3f08c7..0000000 --- a/src/xdg/IniFile.py +++ /dev/null @@ -1,406 +0,0 @@ -""" -Base Class for DesktopEntry, IconTheme and IconData -""" - -import re, os, stat, codecs -from Exceptions import * -import xdg.Locale - -class IniFile: - defaultGroup = '' - fileExtension = '' - - filename = '' - - tainted = False - - def __init__(self, filename=None): - self.content = dict() - if filename: - self.parse(filename) - - def __cmp__(self, other): - return cmp(self.content, other.content) - - def parse(self, filename, headers=None): - # for performance reasons - content = self.content - - if not os.path.isfile(filename): - raise ParsingError("File not found", filename) - - try: - fd = file(filename, 'r') - except IOError, e: - if debug: - raise e - else: - return - - # parse file - for line in fd: - line = line.strip() - # empty line - if not line: - continue - # comment - elif line[0] == '#': - continue - # new group - elif line[0] == '[': - currentGroup = line.lstrip("[").rstrip("]") - if debug and self.hasGroup(currentGroup): - raise DuplicateGroupError(currentGroup, filename) - else: - content[currentGroup] = {} - # key - else: - index = line.find("=") - key = line[0:index].strip() - value = line[index+1:].strip() - try: - if debug and self.hasKey(key, currentGroup): - raise DuplicateKeyError(key, currentGroup, filename) - else: - content[currentGroup][key] = value - except (IndexError, UnboundLocalError): - raise ParsingError("Parsing error on key, group missing", filename) - - fd.close() - - self.filename = filename - self.tainted = False - - # check header - if headers: - for header in headers: - if content.has_key(header): - self.defaultGroup = header - break - else: - raise ParsingError("[%s]-Header missing" % headers[0], filename) - - # start stuff to access the keys - def get(self, key, group=None, locale=False, type="string", list=False): - # set default group - if not group: - group = self.defaultGroup - - # return key (with locale) - if self.content.has_key(group) and self.content[group].has_key(key): - if locale: - value = self.content[group][self.__addLocale(key, group)] - else: - value = self.content[group][key] - else: - if debug: - if not self.content.has_key(group): - raise NoGroupError(group, self.filename) - elif not self.content[group].has_key(key): - raise NoKeyError(key, group, self.filename) - else: - value = "" - - if list == True: - values = self.getList(value) - result = [] - else: - values = [value] - - for value in values: - if type == "string" and locale == True: - value = value.decode("utf-8", "ignore") - elif type == "boolean": - value = self.__getBoolean(value) - elif type == "integer": - try: - value = int(value) - except ValueError: - value = 0 - elif type == "numeric": - try: - value = float(value) - except ValueError: - value = 0.0 - elif type == "regex": - value = re.compile(value) - elif type == "point": - value = value.split(",") - - if list == True: - result.append(value) - else: - result = value - - return result - # end stuff to access the keys - - # start subget - def getList(self, string): - if re.search(r"(? 0: - key = key + "[" + xdg.Locale.langs[0] + "]" - - try: - if isinstance(value, unicode): - self.content[group][key] = value.encode("utf-8", "ignore") - else: - self.content[group][key] = value - except KeyError: - raise NoGroupError(group, self.filename) - - self.tainted = (value == self.get(key, group)) - - def addGroup(self, group): - if self.hasGroup(group): - if debug: - raise DuplicateGroupError(group, self.filename) - else: - pass - else: - self.content[group] = {} - self.tainted = True - - def removeGroup(self, group): - existed = group in self.content - if existed: - del self.content[group] - self.tainted = True - else: - if debug: - raise NoGroupError(group, self.filename) - return existed - - def removeKey(self, key, group=None, locales=True): - # set default group - if not group: - group = self.defaultGroup - - try: - if locales: - for (name, value) in self.content[group].items(): - if re.match("^" + key + xdg.Locale.regex + "$", name) and name != key: - value = self.content[group][name] - del self.content[group][name] - value = self.content[group][key] - del self.content[group][key] - self.tainted = True - return value - except KeyError, e: - if debug: - if e == group: - raise NoGroupError(group, self.filename) - else: - raise NoKeyError(key, group, self.filename) - else: - return "" - - # misc - def groups(self): - return self.content.keys() - - def hasGroup(self, group): - if self.content.has_key(group): - return True - else: - return False - - def hasKey(self, key, group=None): - # set default group - if not group: - group = self.defaultGroup - - if self.content[group].has_key(key): - return True - else: - return False - - def getFileName(self): - return self.filename