home *** CD-ROM | disk | FTP | other *** search
/ Hackers Magazine 57 / CdHackersMagazineNr57.iso / Software / Multimedia / k3d-setup-0.7.11.0.exe / lib / site-packages / cgkit / preferences.py < prev    next >
Encoding:
Python Source  |  2007-01-11  |  4.9 KB  |  172 lines

  1. # ***** BEGIN LICENSE BLOCK *****
  2. # Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3. #
  4. # The contents of this file are subject to the Mozilla Public License Version
  5. # 1.1 (the "License"); you may not use this file except in compliance with
  6. # the License. You may obtain a copy of the License at
  7. # http://www.mozilla.org/MPL/
  8. #
  9. # Software distributed under the License is distributed on an "AS IS" basis,
  10. # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11. # for the specific language governing rights and limitations under the
  12. # License.
  13. #
  14. # The Original Code is the Python Computer Graphics Kit.
  15. #
  16. # The Initial Developer of the Original Code is Matthias Baas.
  17. # Portions created by the Initial Developer are Copyright (C) 2004
  18. # the Initial Developer. All Rights Reserved.
  19. #
  20. # Contributor(s):
  21. #
  22. # Alternatively, the contents of this file may be used under the terms of
  23. # either the GNU General Public License Version 2 or later (the "GPL"), or
  24. # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  25. # in which case the provisions of the GPL or the LGPL are applicable instead
  26. # of those above. If you wish to allow use of your version of this file only
  27. # under the terms of either the GPL or the LGPL, and not to allow others to
  28. # use your version of this file under the terms of the MPL, indicate your
  29. # decision by deleting the provisions above and replace them with the notice
  30. # and other provisions required by the GPL or the LGPL. If you do not delete
  31. # the provisions above, a recipient may use your version of this file under
  32. # the terms of any one of the MPL, the GPL or the LGPL.
  33. #
  34. # ***** END LICENSE BLOCK *****
  35. # $Id: preferences.py,v 1.1.1.1 2004/12/12 14:31:13 mbaas Exp $
  36.  
  37. ## \file preferences.py
  38. ## \brief Contains the Preferences class.
  39.  
  40. import sys, os, os.path, pickle
  41.  
  42. # Preferences
  43. class Preferences(object):
  44.     """This class stores arbitrary values persistently.
  45.  
  46.     This class can be used just like a dictionary.
  47.     """
  48.  
  49.     def __init__(self, filename):
  50.         """Constructor."""
  51.  
  52.         # If filename is no absolute path make it relative to the default
  53.         # config file path
  54.         if not os.path.isabs(filename):
  55.             filename = os.path.join(configPath(), filename)
  56.             
  57.         self._prefs = {}
  58.         self._filename = filename
  59.  
  60.     def __len__(self):
  61.         return len(self._prefs)
  62.  
  63.     def __iter__(self):
  64.         return self._prefs.iteritems()
  65.  
  66.     def __getitem__(self, key):
  67.         if key in self._prefs:
  68.             return self._prefs[key]
  69.         else:
  70.             return None
  71.  
  72.     def __setitem__(self, key, value):
  73.         self._prefs[key]=value
  74.  
  75.     def __delitem__(self, key):
  76.         if key in self._prefs:
  77.             del self._prefs[key]
  78.  
  79.     def __contains__(self, item):
  80.         return item in self._prefs
  81.  
  82.     def get(self, key, default=None):
  83.         return self._prefs.get(key, default)
  84.  
  85.     # load
  86.     def load(self):
  87.         """Load the preferences.
  88.  
  89.         """
  90.  
  91.         f = open(self._filename)
  92.         id = pickle.load(f)
  93.         if id!=1:
  94.             raise Exception, "Unknown config file format"
  95.         self._prefs = pickle.load(f)
  96.         f.close()
  97.  
  98.  
  99.     # save
  100.     def save(self):
  101.         """Save the preferences.
  102.  
  103.         """
  104.         
  105.         self._preparePath(os.path.dirname(self._filename))
  106.         
  107.         f = open(self._filename, "w")
  108.         pickle.dump(1, f)
  109.         pickle.dump(self._prefs, f)
  110.         f.close()
  111.  
  112.  
  113.     ######################################################################
  114.     ## protected:
  115.  
  116.     def _preparePath(self, path):
  117.         """Prepare a path so that every directory on the path exists.
  118.  
  119.         Checks if the path exists and creates it if it does not exist.
  120.         """
  121.         if not os.path.exists(path):
  122.             parent = os.path.dirname(path)
  123.             if parent!="":
  124.                 self._preparePath(parent)
  125.             os.mkdir(path)        
  126.  
  127.     # "filename" property
  128.  
  129.     def _getFilename(self):
  130.         """Return the filename.
  131.  
  132.         This method is used for retrieving the \a filename property.
  133.  
  134.         \return Filename (\c str).
  135.         """
  136.         return self._filename
  137.  
  138.     filename = property(_getFilename, None, None, "File name")
  139.     
  140.  
  141. ######################################################################
  142.  
  143. def configPath(appname="gaia"):
  144.     """Return the full path where config files are located.
  145.  
  146.     \todo Change "gaia" as default application name
  147.     """
  148.     
  149.     # Windows? (XP)
  150.     if sys.platform=="win32":
  151.         if os.environ.has_key("APPDATA"):
  152.             return os.path.abspath(os.path.join(os.environ["APPDATA"], appname.capitalize()))
  153.         else:
  154.             return None
  155.     # Other
  156.     else:
  157.         if os.environ.has_key("HOME"):
  158.             return os.path.abspath(os.environ["HOME"])
  159.         else:
  160.             return None
  161.  
  162.  
  163. ######################################################################
  164.  
  165. if __name__=="__main__":
  166.  
  167.     print configPath()
  168.             
  169.             
  170.  
  171.     
  172.