]> kaliko git repositories - mpd-sima.git/blobdiff - sima/utils/config.py
Use os.getenv instead of os.environ.get
[mpd-sima.git] / sima / utils / config.py
index 2778422369aee46c1ae139a2926fd7e0f43510ae..fd5cab6c9056d0129a71fea98a328c9f822fe258 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
 # -*- 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
 # Copyright (c) 2019 sacha <sachahony@gmail.com>
 #
 #  This file is part of sima
@@ -30,7 +30,7 @@ import logging
 import sys
 
 from configparser import Error
 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)
 
 from os.path import (join, isdir, isfile, dirname, exists)
 from stat import (S_IMODE, ST_MODE, S_IRWXO, S_IRWXG)
 
@@ -49,14 +49,14 @@ DEFAULT_CONF = {
         'sima': {
             'internal': "Crop, Lastfm, Random",
             'contrib': "",
         'sima': {
             'internal': "Crop, Lastfm, Random",
             'contrib': "",
-            'user_db': "false",
+            'user_db': False,
             'history_duration': 8,
             'queue_length': 2,
             'var_dir': 'empty',
             '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,
             },
         'daemon': {
             'daemon': False,
@@ -73,7 +73,7 @@ DEFAULT_CONF = {
         'lastfm': {
             'queue_mode': "track",  # TODO control values
             'max_art': 10,
         'lastfm': {
             'queue_mode': "track",  # TODO control values
             'max_art': 10,
-            'single_album': "false",
+            'single_album': False,
             'track_to_add': 1,
             'album_to_add': 1,
             'shuffle_album': False,
             'track_to_add': 1,
             'album_to_add': 1,
             'shuffle_album': False,
@@ -87,11 +87,31 @@ DEFAULT_CONF = {
             'track_to_add': 1,
             'priority': 50,
             },
             '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,
+            },
         }
 #
 
 
         }
 #
 
 
-class ConfMan(object):  # CONFIG MANAGER CLASS
+class ConfMan:  # CONFIG MANAGER CLASS
     """
     Configuration manager.
     Default configuration is stored in DEFAULT_CONF dictionnary.
     """
     Configuration manager.
     Default configuration is stored in DEFAULT_CONF dictionnary.
@@ -119,13 +139,13 @@ class ConfMan(object):  # CONFIG MANAGER CLASS
         self.use_envar()
         self.startopt = options
 
         self.use_envar()
         self.startopt = options
 
-        ## INIT CALLS
+        # INIT CALLS
         self.init_config()
         self.supersedes_config_with_cmd_line_options()
         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')
         # set dbfile
         self.config['sima']['db_file'] = join(self.config['sima']['var_dir'], 'sima.db')
+        # Controls files access
+        self.control_facc()
 
         # Create directories
         data_dir = self.config['sima']['var_dir']
 
         # Create directories
         data_dir = self.config['sima']['var_dir']
@@ -138,11 +158,12 @@ class ConfMan(object):  # CONFIG MANAGER CLASS
         """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
         """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')),
         """
         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):
             if not ftochk:
                 continue
             if isdir(ftochk):
@@ -159,8 +180,6 @@ class ConfMan(object):  # CONFIG MANAGER CLASS
                     self.log.critical('no write access to "%s" (%s)', ftochk, op)
                     ok = False
         if not ok:
                     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):
             sys.exit(2)
 
     def control_mod(self):
@@ -185,10 +204,11 @@ class ConfMan(object):  # 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'):
         # honor MPD_HOST format as in mpc(1)  for command line option --host
         if self.startopt.get('host'):
             if '@' in self.startopt.get('host'):
-                print(self.startopt.get('host').split('@'))
-                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"""
 
     def use_envar(self):
         """Use MPD en.var. to set defaults"""
@@ -210,10 +230,10 @@ class ConfMan(object):  # CONFIG MANAGER CLASS
         http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html
         """
 
         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:
         elif homedir and isdir(homedir) and homedir not in ['/']:
             data_dir = join(homedir, '.local', 'share', DIRNAME)
         else:
@@ -224,8 +244,9 @@ class ConfMan(object):  # CONFIG MANAGER CLASS
         if self.startopt.get('conf_file'):
             # No need to handle conf file location
             pass
         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)
         elif homedir and isdir(homedir) and homedir not in ['/']:
             conf_dir = join(homedir, '.config', DIRNAME)
             self.conf_file = join(conf_dir, CONF_FILE)
@@ -234,7 +255,7 @@ class ConfMan(object):  # CONFIG MANAGER CLASS
             self.log.critical('Please use "--config" to locate the conf file')
             sys.exit(1)
 
             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
         self.config['sima']['var_dir'] = join(data_dir)
 
         # If no conf file present, uses defaults