X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Futils%2Fconfig.py;h=1df4e9e5eb430c013f62a19b8eb12192c7325e82;hb=eead40921859927953e73327840bd6ff090b77fe;hp=182b036593a58ada977596653ef7569c20a0fd80;hpb=5fac9ffaccbb3060f59ed45d9a83b5429a0d5310;p=mpd-sima.git diff --git a/sima/utils/config.py b/sima/utils/config.py index 182b036..1df4e9e 100644 --- a/sima/utils/config.py +++ b/sima/utils/config.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2009-2015, 2019-2020 kaliko +# Copyright (c) 2009-2015, 2019-2021 kaliko # Copyright (c) 2019 sacha # # This file is part of sima @@ -17,7 +17,6 @@ # You should have received a copy of the GNU General Public License # along with sima. If not, see . # -# pylint: disable=bad-continuation """ Deal with configuration and data files. @@ -30,7 +29,7 @@ import logging import sys from configparser import Error -from os import (access, makedirs, environ, stat, chmod, W_OK) +from os import (access, makedirs, getenv, stat, chmod, W_OK) from os.path import (join, isdir, isfile, dirname, exists) from stat import (S_IMODE, ST_MODE, S_IRWXO, S_IRWXG) @@ -49,14 +48,14 @@ DEFAULT_CONF = { 'sima': { 'internal': "Crop, Lastfm, Random", 'contrib': "", - 'user_db': "false", + 'user_db': False, 'history_duration': 8, 'queue_length': 2, 'var_dir': 'empty', - 'musicbrainzid': "true", - 'repeat_disable_queue': "true", - 'single_disable_queue': "true", - 'mopidy_compat': "false", + 'musicbrainzid': True, + 'repeat_disable_queue': True, + 'single_disable_queue': True, + 'mopidy_compat': False, }, 'daemon': { 'daemon': False, @@ -72,8 +71,8 @@ DEFAULT_CONF = { }, 'lastfm': { 'queue_mode': "track", # TODO control values - 'max_art': 10, - 'single_album': "false", + 'max_art': 20, + 'single_album': False, 'track_to_add': 1, 'album_to_add': 1, 'shuffle_album': False, @@ -94,9 +93,19 @@ DEFAULT_CONF = { 'label': "", 'originaldate': "", 'filter': "", + 'queue_mode': "track", + 'single_album': False, 'track_to_add': 1, + 'album_to_add': 1, 'priority': 80, - } + }, + 'genre': { + 'queue_mode': "track", + 'single_album': False, + 'track_to_add': 1, + 'album_to_add': 1, + 'priority': 80, + }, } # @@ -129,14 +138,11 @@ class ConfMan: # CONFIG MANAGER CLASS self.use_envar() self.startopt = options - ## INIT CALLS + # INIT CALLS self.init_config() self.supersedes_config_with_cmd_line_options() - # Controls files access - self.control_facc() # 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): @@ -144,15 +150,19 @@ class ConfMan: # CONFIG MANAGER CLASS makedirs(data_dir) chmod(data_dir, 0o700) + # Controls files access + self.control_facc() + 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. + argparse. Also add config['sima']['db_file'] contructed here in init """ ok = True for op, ftochk in [('logfile', self.config.get('log', 'logfile')), - ('pidfile', self.config.get('daemon', 'pidfile')),]: + ('pidfile', self.config.get('daemon', 'pidfile')), + ('db file', self.config.get('sima', 'db_file'))]: if not ftochk: continue if isdir(ftochk): @@ -169,8 +179,6 @@ class ConfMan: # CONFIG MANAGER CLASS self.log.critical('no write access to "%s" (%s)', ftochk, op) ok = False if not ok: - if exists(self.conf_file): - self.log.warning('Try to check the configuration file: %s', self.conf_file) sys.exit(2) def control_mod(self): @@ -181,10 +189,8 @@ class ConfMan: # CONFIG MANAGER CLASS self.log.debug('file permission is: %o', mode) if mode & S_IRWXO or mode & S_IRWXG: self.log.warning('File is readable by "other" and/or' + - ' "group" (actual permission %o octal).' % - mode) - self.log.warning('Consider setting permissions' + - ' to 600 octal.') + ' "group" (actual permission %o octal).', mode) + self.log.warning('Consider setting permissions to 600 octal.') def supersedes_config_with_cmd_line_options(self): """Updates defaults settings with command line options""" @@ -195,9 +201,11 @@ class ConfMan: # CONFIG MANAGER CLASS # honor MPD_HOST format as in mpc(1) for command line option --host if self.startopt.get('host'): if '@' in self.startopt.get('host'): - passwd, host = self.startopt.get('host').split('@') - self.config.set('MPD', 'password', passwd) - self.config.set('MPD', 'host', host) + host, passwd = utils.parse_mpd_host(self.startopt.get('host')) + if passwd: + self.config.set('MPD', 'password', passwd) + if host: + self.config.set('MPD', 'host', host) def use_envar(self): """Use MPD en.var. to set defaults""" @@ -219,10 +227,10 @@ class ConfMan: # CONFIG MANAGER CLASS http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html """ - homedir = environ.get('HOME') + homedir = getenv('HOME') - if environ.get('XDG_DATA_HOME'): - data_dir = join(environ.get('XDG_DATA_HOME'), DIRNAME) + if getenv('XDG_DATA_HOME'): + data_dir = join(getenv('XDG_DATA_HOME'), DIRNAME) elif homedir and isdir(homedir) and homedir not in ['/']: data_dir = join(homedir, '.local', 'share', DIRNAME) else: @@ -233,8 +241,9 @@ class ConfMan: # CONFIG MANAGER CLASS if self.startopt.get('conf_file'): # No need to handle conf file location pass - elif environ.get('XDG_CONFIG_HOME'): - conf_dir = join(environ.get('XDG_CONFIG_HOME'), DIRNAME) + elif getenv('XDG_CONFIG_HOME'): + conf_dir = join(getenv('XDG_CONFIG_HOME'), DIRNAME) + self.conf_file = join(conf_dir, CONF_FILE) elif homedir and isdir(homedir) and homedir not in ['/']: conf_dir = join(homedir, '.config', DIRNAME) self.conf_file = join(conf_dir, CONF_FILE) @@ -243,7 +252,7 @@ class ConfMan: # CONFIG MANAGER CLASS self.log.critical('Please use "--config" to locate the conf file') sys.exit(1) - ## Sima sqlite DB + # Sima sqlite DB self.config['sima']['var_dir'] = join(data_dir) # If no conf file present, uses defaults