119 lines
2.7 KiB
Python
119 lines
2.7 KiB
Python
import os, sys
|
|
from . import inifile
|
|
from . import objproxy
|
|
from .. import preconfig
|
|
|
|
|
|
config = objproxy.Proxy({})
|
|
paths = []
|
|
filenames = []
|
|
|
|
def init(appname=None):
|
|
global paths, filenames
|
|
paths = []
|
|
filenames = []
|
|
if appname != None:
|
|
if os.name == 'posix':
|
|
if 'HOME' in os.environ:
|
|
paths.append(os.path.join(os.environ['HOME'], appname))
|
|
paths.append(os.path.join('/etc', appname))
|
|
filenames.extend([x % (appname) for x in ('%s.conf', '%s.ini', '%s.cfg', '%s.cnf')])
|
|
|
|
elif os.name == 'nt':
|
|
if 'APPDATA' in os.environ:
|
|
paths.append(os.path.join(os.environ['APPDATA'], appname))
|
|
if 'LOCALAPPDATA' in os.environ:
|
|
paths.append(os.path.join(os.environ['LOCALAPPDATA'], appname))
|
|
filenames.extend([x % (appname) for x in ('%s.ini', '%s.conf', '%s.cfg', '%s.cnf')])
|
|
|
|
|
|
if os.name == 'posix':
|
|
if 'HOME' in os.environ:
|
|
paths.append(os.environ['HOME'])
|
|
paths.append('/etc')
|
|
|
|
try:
|
|
paths.append(os.path.abspath(os.path.dirname(__file__)))
|
|
except:
|
|
pass
|
|
|
|
if os.name == 'nt':
|
|
if 'USERPROFILE' in os.environ:
|
|
paths.append(os.environ['USERPROFILE'])
|
|
if 'WINDIR' in os.environ:
|
|
paths.append(os.environ['WINDIR'])
|
|
if 'SYSTEMDRIVE' in os.environ:
|
|
paths.append('%s\\' % (os.environ['SYSTEMDRIVE']),)
|
|
|
|
try:
|
|
paths.append(os.path.abspath(os.path.split(os.path.dirname(__file__))[0]))
|
|
paths.append(os.path.abspath(os.path.dirname(sys.argv[0])))
|
|
except:
|
|
pass
|
|
|
|
if os.name == 'posix':
|
|
filenames.extend(['settings.conf', 'settings.ini', 'settings.cfg', 'settings.cnf'])
|
|
else:
|
|
filenames.extend(['settings.ini', 'settings.conf', 'settings.cfg', 'settings.cnf'])
|
|
|
|
load_config()
|
|
|
|
def locate_config(paths, filenames):
|
|
fd = None
|
|
for p in paths:
|
|
for f in filenames:
|
|
fp = os.path.join(p, f)
|
|
if os.path.exists(fp):
|
|
try:
|
|
fd = inifile.inifile(fp)
|
|
except SystemExit:
|
|
fd = None
|
|
return fd
|
|
|
|
def load_config(fname=None):
|
|
global paths, filenames
|
|
if fname != None:
|
|
fp, fn = os.path.split(fname)
|
|
else:
|
|
fp, fn = None, None
|
|
|
|
if fp:
|
|
pp = [fp]
|
|
else:
|
|
pp = paths[:]
|
|
|
|
if fn:
|
|
ff = [fn]
|
|
else:
|
|
ff = filenames[:]
|
|
|
|
fd = locate_config(pp, ff)
|
|
if fd != None:
|
|
config._setobj(fd)
|
|
|
|
def save_config(original_name=True, make_path=True):
|
|
if original_name:
|
|
fp = config.fname
|
|
else:
|
|
saved = False
|
|
for f in filenames:
|
|
for p in paths:
|
|
if make_path:
|
|
try:
|
|
os.makedirs(p)
|
|
except OSError:
|
|
pass
|
|
if os.path.exists(p):
|
|
fp = os.path.join(p, f)
|
|
config.fname = fp
|
|
try:
|
|
config.write()
|
|
except OSError:
|
|
continue
|
|
saved = True
|
|
break
|
|
if not saved:
|
|
raise(OSError, "No writable path to save configuration")
|
|
|
|
if preconfig.load_config:
|
|
init(preconfig.appname)
|