X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Futils%2Fconfig.py;h=0e775ecc54d5c1294daebdc643b1250fe3037d0f;hb=1481a05d7060c8cfd615850b3df9d66a52fb0ff4;hp=cdaefd198022a23bf71d54300383dd80623a1937;hpb=8bf0d37a99b80af5674a639bfbc155db18ac557d;p=mpd-sima.git diff --git a/sima/utils/config.py b/sima/utils/config.py index cdaefd1..0e775ec 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 # @@ -25,18 +25,19 @@ Parse configuration file and set defaults for missing options. # IMPORTS import configparser +import logging import sys from configparser import Error -from os import (makedirs, environ, stat, chmod) -from os.path import (join, isdir, isfile) +from os import (access, makedirs, environ, stat, chmod, W_OK, R_OK) +from os.path import (join, isdir, isfile, dirname, exists) from stat import (S_IMODE, ST_MODE, S_IRWXO, S_IRWXG) from . import utils # DEFAULTS DIRNAME = 'mpd_sima' -CONF_FILE = 'sima.cfg' +CONF_FILE = 'mpd_sima.cfg' DEFAULT_CONF = { 'MPD': { @@ -49,8 +50,9 @@ DEFAULT_CONF = { 'contrib': "", 'user_db': "false", 'history_duration': 8, - 'queue_length': 1, + 'queue_length': 2, 'var_dir': 'empty', + 'musicbrainzid': "true", }, 'daemon':{ 'daemon': False, @@ -105,8 +107,8 @@ class ConfMan(object): # CONFIG MANAGER CLASS * command line options (overrides previous) """ - def __init__(self, logger, options=None): - self.log = logger + def __init__(self, options=None): + self.log = logging.getLogger('sima') # options settings priority: # defauts < env. var. < conf. file < command line self.conf_file = options.get('conf_file') @@ -119,20 +121,39 @@ class ConfMan(object): # CONFIG MANAGER CLASS ## INIT CALLS self.init_config() self.supersedes_config_with_cmd_line_options() - - def get_pw(self): - try: - self.config.getboolean('MPD', 'password') - self.log.debug('No password set, proceeding without ' + - 'authentication...') - return None - except ValueError: - # ValueError if password not a boolean, hence an actual password. - pwd = self.config.get('MPD', 'password') - if not pwd: - self.log.debug('Password set as an empty string.') - return None - return pwd + # Controls files access + self.control_facc() + # generate dbfile + self.config['sima']['db_file'] = join(self.config['sima']['var_dir'], 'sima.db') + + def control_facc(self): + """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 op, ftochk in [('log', self.config['log']['logfile']), + ('pidfile', self.config['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}" ({1})'.format(filedir, op)) + ok = False + else: + if not access(ftochk, W_OK): + 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): """ @@ -202,13 +223,12 @@ class ConfMan(object): # CONFIG MANAGER CLASS 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 self.config['sima']['var_dir'] = join(data_dir) - self.config['sima']['db_file'] = join(data_dir, 'sima.db') # If no conf file present, uses defaults if not isfile(self.conf_file):