# 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
* 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')
## INIT CALLS
self.init_config()
self.supersedes_config_with_cmd_line_options()
+ # Controls files access
+ self.control_facc()
+ # generate dbfile
+ self.config['sima']['db_file'] = join(self.config['sima']['var_dir'], 'sima.db')
- 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
+ def control_facc(self):
+ """TODO: redundant with startopt cli args controls
+ """
+ ok = True
+ for op, ftochk in [('log', self.config['log']['logfile']),
+ ('pidfile', self.config['daemon']['pidfile']),]:
+ if not ftochk:
+ continue
+ 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:
+ sys.exit(2)
def control_mod(self):
"""
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):