Mercurial > fife-parpg
changeset 273:815354ba295e
* Added function to fife_utils: getUserDataDirectory. Returns the proper path to save setting and data files depending on OS.
* Made rio_de_hola save its settings in the proper location.
author | cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Tue, 16 Jun 2009 14:24:26 +0000 |
parents | b04a2faf7d86 |
children | cf77afb273c4 |
files | clients/editor/scripts/settings.py clients/rio_de_hola/run.py clients/rio_de_hola/settings.py engine/extensions/fife_utils.py |
diffstat | 4 files changed, 81 insertions(+), 58 deletions(-) [+] |
line wrap: on
line diff
--- a/clients/editor/scripts/settings.py Tue Jun 16 11:28:35 2009 +0000 +++ b/clients/editor/scripts/settings.py Tue Jun 16 14:24:26 2009 +0000 @@ -1,5 +1,6 @@ import shutil import os +from fife_utils import getUserDataDirectory try: import xml.etree.cElementTree as ET except: @@ -20,7 +21,7 @@ Settings.instance = self - self._appdata = GetUserDataDirectory("fife", "editor") + self._appdata = getUserDataDirectory("fife", "editor") if os.path.exists(self._appdata+'/settings.xml') is False: shutil.copyfile('settings-dist.xml', self._appdata+'/settings.xml') @@ -219,52 +220,3 @@ dict[kv_pair[0]] = kv_pair[1] return dict -def GetUserDataDirectory(vendor, appname): - """ Gets location to store the settings file, depending on OS. - See: - Brian Vanderburg II @ http://mail.python.org/pipermail/python-list/2008-May/660779.html - """ - dir = "" - - # WINDOWS - if os.name == "nt": - - # Try env APPDATA or USERPROFILE or HOMEDRIVE/HOMEPATH - if "APPDATA" in os.environ: - dir = os.environ["APPDATA"] - - if ((dir is None) or (not os.path.isdir(dir))) and ("USERPROFILE" in os.environ): - dir = os.environ["USERPROFILE"] - if os.path.isdir(os.path.join(dir, "Application Data")): - dir = os.path.join(dir, "Application Data") - - if ((dir is None) or (not os.path.isdir(dir))) and ("HOMEDRIVE" in os.environ) and ("HOMEPATH" in os.environ): - dir = os.environ["HOMEDRIVE"] + os.environ["HOMEPATH"] - if os.path.isdir(os.path.join(dir, "Application Data")): - dir = os.path.join(dir, "Application Data") - - if (dir is None) or (not os.path.isdir(dir)): - dir = os.path.expanduser("~") - - # On windows, add vendor and app name - dir = os.path.join(dir, vendor, appname) - - # Mac - elif os.name == "mac": # ?? may not be entirely correct - dir = os.path.expanduser("~") - dir = os.path.join(dir, "Library", "Application Support") - dir = os.path.join(dir, vendor, appname) - - # Unix/Linux/all others - if dir is None: - dir = os.path.expanduser("~") - dir = os.path.join(dir, "."+vendor, appname) - - # Create vendor/appname folder if it doesn't exist - if not os.path.isdir(dir): - os.makedirs(dir) - - print dir - - return dir -
--- a/clients/rio_de_hola/run.py Tue Jun 16 11:28:35 2009 +0000 +++ b/clients/rio_de_hola/run.py Tue Jun 16 14:24:26 2009 +0000 @@ -12,9 +12,6 @@ if p not in sys.path: sys.path.append(_jp(p)) -if not os.path.exists('settings.xml'): - shutil.copyfile('settings-dist.xml', 'settings.xml') - import fife_compat import fife, fifelog from scripts import world
--- a/clients/rio_de_hola/settings.py Tue Jun 16 11:28:35 2009 +0000 +++ b/clients/rio_de_hola/settings.py Tue Jun 16 14:24:26 2009 +0000 @@ -1,11 +1,20 @@ import shutil import pychan +import os +from fife_utils import getUserDataDirectory try: import xml.etree.cElementTree as ET except: import xml.etree.ElementTree as ET class Setting(object): + def __init__(self, *args, **kwargs): + self._appdata = getUserDataDirectory("fife", "rio_de_hola") + + if not os.path.exists(self._appdata+'/settings.xml'): + shutil.copyfile('settings-dist.xml', self._appdata+'/settings.xml') + + def onOptionsPress(self): self.changesRequireRestart = False self.isSetToDefault = False @@ -32,13 +41,13 @@ self.OptionsDlg.show() def setDefaults(self): - shutil.copyfile('settings-dist.xml', 'settings.xml') + shutil.copyfile('settings-dist.xml', self._appdata+'/settings.xml') self.isSetToDefault = True self.changesRequireRestart = True def readSetting(self, name, type='int', strip=True, text=False): if not hasattr(self, 'tree'): - self.tree = ET.parse('settings.xml') + self.tree = ET.parse(self._appdata+'/settings.xml') self.root_element = self.tree.getroot() element = self.root_element.find(name) if element is not None: @@ -93,7 +102,7 @@ self.changesRequireRestart = True if not self.isSetToDefault: - self.tree.write('settings.xml') + self.tree.write(self._appdata+'/settings.xml') self.OptionsDlg.hide() if self.changesRequireRestart: RestartDlg = pychan.loadXML('gui/changes_require_restart.xml')
--- a/engine/extensions/fife_utils.py Tue Jun 16 11:28:35 2009 +0000 +++ b/engine/extensions/fife_utils.py Tue Jun 16 14:24:26 2009 +0000 @@ -1,13 +1,78 @@ -import fife, re +import fife, re, sys, os -__all__ = ['is_fife_exc'] +__all__ = ['is_fife_exc', 'getUserDataDirectory'] _exc_re = re.compile(r'_\[(\w+)\]_') +""" This file contains some functions that may be useful """ + def is_fife_exc(type, original_exc): + """ Checks if an exception is of given type. + Example: + try: + obj = self.model.createObject(str(id), str(nspace), parent) + except RuntimeError, e: + if is_fife_exc(fife.NameClash, e): + raise NameClash('Tried to create already existing object, ignoring') + raise + """ ret = False m = _exc_re.search(str(original_exc)) if m: if m.group(1) == type('').getTypeStr(): ret = True return ret + +def getUserDataDirectory(vendor, appname): + """ Gets the proper location to save configuration and data files, depending on depending on OS. + + Windows: %APPDATA%\vendor\appname + Mac: ~/Library/Application Support/vendor/appname + Linux/Unix/Other: ~/.vendor/appname + + See: + Brian Vanderburg II @ http://mail.python.org/pipermail/python-list/2008-May/660779.html + """ + dir = "" + + # WINDOWS + if os.name == "nt": + + # Try env APPDATA or USERPROFILE or HOMEDRIVE/HOMEPATH + if "APPDATA" in os.environ: + dir = os.environ["APPDATA"] + + if ((dir is None) or (not os.path.isdir(dir))) and ("USERPROFILE" in os.environ): + dir = os.environ["USERPROFILE"] + if os.path.isdir(os.path.join(dir, "Application Data")): + dir = os.path.join(dir, "Application Data") + + if ((dir is None) or (not os.path.isdir(dir))) and ("HOMEDRIVE" in os.environ) and ("HOMEPATH" in os.environ): + dir = os.environ["HOMEDRIVE"] + os.environ["HOMEPATH"] + if os.path.isdir(os.path.join(dir, "Application Data")): + dir = os.path.join(dir, "Application Data") + + if (dir is None) or (not os.path.isdir(dir)): + dir = os.path.expanduser("~") + + # On windows, add vendor and app name + dir = os.path.join(dir, vendor, appname) + + # Mac + elif os.name == "mac": # ?? may not be entirely correct + dir = os.path.expanduser("~") + dir = os.path.join(dir, "Library", "Application Support") + dir = os.path.join(dir, vendor, appname) + + # Unix/Linux/all others + if dir is None: + dir = os.path.expanduser("~") + dir = os.path.join(dir, "."+vendor, appname) + + # Create vendor/appname folder if it doesn't exist + if not os.path.isdir(dir): + os.makedirs(dir) + + print dir + + return dir