All pastes #408896 Raw Edit

Mine

public text v1 · immutable
#408896 ·published 2007-03-25 06:24 UTC
rendered paste body
from xml.dom import minidom

from os.path import join, exists
from os import mkdir
import re

class Settings:
    """
        Settings Class
            For reading and writting XML Files to hold the settings for scripts
        Coded by Donno

        getSett, saveXMLfromArray are designed for outside access.

    """
    settingVer = 1.0
    scriptTitle = ""
    filename = ""
    settings = {}
    def __init__(self,filename,scriptTitle):
        self.scriptTitle = scriptTitle
        self.filename = filename
        self.load()

    def getSett(self,settingName, defaultValue):
        """
            Returns the value of the setting
            If the setting doesn't exist it will use default Value
        """
        if self.settings.has_key(settingName):
            return self.settings[settingName].strip()
        else:
            return defaultValue

    def load(self):
        filepath = join("P:\\","script_settings", self.filename)
        if exists(filepath):
            try:
                xmldoc = minidom.parse(filepath)
                xmlsettings = xmldoc.getElementsByTagName("settings")[0]
            except:
                self.create()
                return

            """
            For this to be great xml would need to be in form  <setting name="username">hello</setting>
            xmldoc.getElementsByTagName("setting") would get every setting then could use getAttribute to get the name of the setting 'username'

            Current from here on it does regexp to take the settings from the xml and put them in an array

            So solution is change the formatting, or hack it get  <username>donno</username> working
            """

            data = xmlsettings.toxml()
            regp = '<([^<]*)>([^</]*)</'
            save_info = re.compile(regp,re.IGNORECASE).findall(data)
            for x in save_info:
                self.settings[x[0]] = x[1].strip()
            print self.settings
        else:
            self.create()

    def create(self):
        filepath = join("P:\\","script_settings", self.filename)
        if not exists(filepath):
            self.saveXMLfromArray()

    def setDefaultSettings(self):
        self.settings = {"usernane": "donno","something": "true"}

    def saveXMLfromArray(self):
        """
            saveXMLfromArray
                Creates a dom Document of the settings array and saves it to the xml
        """
        self.setDefaultSettings()
        # File doesn't exist so create it
        xmldoc = minidom.Document()
        # Create the <settings> base element
        settingElem = xmldoc.createElement("settings")
        settingElem.setAttribute("setting-version", str(self.settingVer))
        settingElem.setAttribute("name", self.scriptTitle)
        xmldoc.appendChild(settingElem)

        # Create a element for each setting with the textnode as the value
        for key in self.settings:
            newElem = xmldoc.createElement(key)
            newElem.appendChild(xmldoc.createTextNode(self.settings[key]))
            settingElem.appendChild(newElem)

        self.save(xmldoc)

    def save(self,xmldoc):
        """
            This function takes a xml Document object and saves it to XML
        """
        filepath = join("P:\\","script_settings", self.filename)
        if not exists(join("P:\\","script_settings")):
            mkdir(join("P:\\","script_settings"))

        fsock = open(filepath,"w")
        fsock.write(xmldoc.toprettyxml(indent="    "))
        fsock.close()