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