X-Git-Url: http://git.kaliko.me/?a=blobdiff_plain;f=sima%2Futils%2Fconfig.py;h=92d3fb916c4b6ff2b499c712e7c4f1f284e6725a;hb=8c72e63ba4d41c4d9722ddff3c000de314ff66dc;hp=cd16a14482bc45008e297b219462d47cf0e5e30c;hpb=d62b8c3db5a87accb40a49d0347255bfe467911b;p=mpd-sima.git diff --git a/sima/utils/config.py b/sima/utils/config.py index cd16a14..92d3fb9 100644 --- a/sima/utils/config.py +++ b/sima/utils/config.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2009, 2010, 2011, 2013, 2014 Jack Kaliko +# Copyright (c) 2009, 2010, 2011, 2013, 2014, 2015 Jack Kaliko # # This file is part of sima # @@ -37,7 +37,7 @@ from . import utils # DEFAULTS DIRNAME = 'mpd_sima' -CONF_FILE = 'sima.cfg' +CONF_FILE = 'mpd_sima.cfg' DEFAULT_CONF = { 'MPD': { @@ -46,12 +46,13 @@ DEFAULT_CONF = { 'port': 6600, }, 'sima': { - 'internal': "Crop, Lastfm, RandomFallBack", + 'internal': "Crop, Lastfm, Random", 'contrib': "", 'user_db': "false", 'history_duration': 8, - 'queue_length': 1, + 'queue_length': 2, 'var_dir': 'empty', + 'musicbrainzid': "true", }, 'daemon':{ 'daemon': False, @@ -63,6 +64,7 @@ DEFAULT_CONF = { }, 'crop': { 'consume': 10, + 'priority': 0, }, 'echonest': { 'queue_mode': "track", #TODO control values @@ -71,6 +73,7 @@ DEFAULT_CONF = { 'track_to_add': 1, 'album_to_add': 1, 'depth': 1, + 'priority': 100, }, 'lastfm': { 'queue_mode': "track", #TODO control values @@ -80,11 +83,13 @@ DEFAULT_CONF = { 'album_to_add': 1, 'depth': 1, 'cache': True, + 'priority': 100, }, - 'randomfallback': { + 'random': { 'flavour': "sensible", # in pure, sensible 'track_to_add': 1, - } + 'priority': 50, + }, } # @@ -122,29 +127,45 @@ class ConfMan(object): # CONFIG MANAGER CLASS self.supersedes_config_with_cmd_line_options() # Controls files access self.control_facc() - # generate dbfile + # set dbfile self.config['sima']['db_file'] = join(self.config['sima']['var_dir'], 'sima.db') + # Create directories + data_dir = self.config['sima']['var_dir'] + if not isdir(data_dir): + self.log.trace('Creating "{}"'.format(data_dir)) + makedirs(data_dir) + chmod(data_dir, 0o700) + def control_facc(self): - """TODO: redundant with startopt cli args controls + """Controls file access. + This is relevant only for file provided through the configuration file + since files provided on the command line are already checked with + argparse. """ ok = True - for ftochk in [self.config['log']['logfile'], - self.config['daemon']['pidfile'],]: + for op, ftochk in [('logfile', self.config.get('log','logfile')), + ('pidfile', self.config.get('daemon', 'pidfile')),]: + if not ftochk: + continue + if isdir(ftochk): + self.log.critical('Need a file not a directory: "{}"'.format(ftochk)) + ok = False if not exists(ftochk): # Is parent directory writable then filedir = dirname(ftochk) if not access(filedir, W_OK): - self.log.critical('no write access to "{0}"'.format(filedir)) + self.log.critical('no write access to "{0}" ({1})'.format(filedir, op)) ok = False else: if not access(ftochk, W_OK): - self.log.critical('no write access to "{0}"'.format(ftochk)) + self.log.critical('no write access to "{0}" ({1})'.format(ftochk, op)) ok = False if not ok: + if exists(self.conf_file): + self.log.warning('Try to check the configuration file: {}'.format(self.conf_file)) sys.exit(2) - def control_mod(self): """ Controls conf file permissions. @@ -192,14 +213,10 @@ class ConfMan(object): # CONFIG MANAGER CLASS elif homedir and isdir(homedir) and homedir not in ['/']: data_dir = join(homedir, '.local', 'share', DIRNAME) else: - self.log.error('Can\'t find a suitable location for data folder (XDG_DATA_HOME)') - self.log.error('Please use "--var_dir" to set a proper location') + self.log.critical('Can\'t find a suitable location for data folder (XDG_DATA_HOME)') + self.log.critical('Please use "--var-dir" to set a proper location') sys.exit(1) - if not isdir(data_dir): - makedirs(data_dir) - chmod(data_dir, 0o700) - if self.startopt.get('conf_file'): # No need to handle conf file location pass @@ -207,14 +224,10 @@ class ConfMan(object): # CONFIG MANAGER CLASS conf_dir = join(environ.get('XDG_CONFIG_HOME'), DIRNAME) elif homedir and isdir(homedir) and homedir not in ['/']: conf_dir = join(homedir, '.config', DIRNAME) - # Create conf_dir if necessary - if not isdir(conf_dir): - makedirs(conf_dir) - chmod(conf_dir, 0o700) self.conf_file = join(conf_dir, CONF_FILE) else: - self.log.error('Can\'t find a suitable location for config folder (XDG_CONFIG_HOME)') - self.log.error('Please use "--config" to locate the conf file') + self.log.critical('Can\'t find a suitable location for config folder (XDG_CONFIG_HOME)') + self.log.critical('Please use "--config" to locate the conf file') sys.exit(1) ## Sima sqlite DB