]> kaliko git repositories - mpd-sima.git/blobdiff - sima/utils/config.py
Fixed startup
[mpd-sima.git] / sima / utils / config.py
index c9240ea1c8a094d9b244c4708f5cf6588196d2c6..1df4e9e5eb430c013f62a19b8eb12192c7325e82 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (c) 2009-2015, 2019-2020 kaliko <kaliko@azylum.org>
+# Copyright (c) 2009-2015, 2019-2021 kaliko <kaliko@azylum.org>
 # Copyright (c) 2019 sacha <sachahony@gmail.com>
 #
 #  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 <http://www.gnu.org/licenses/>.
 #
-# 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,
@@ -87,6 +86,26 @@ DEFAULT_CONF = {
             'track_to_add': 1,
             'priority': 50,
             },
+        'tags': {
+            'comment': "",
+            'date': "",
+            'genre': "",
+            '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,
+            },
         }
 #
 
@@ -119,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):
@@ -134,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):
@@ -159,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):
@@ -171,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"""
@@ -185,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"""
@@ -209,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:
@@ -223,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)
@@ -233,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