]> kaliko git repositories - mpd-sima.git/blobdiff - sima/utils/utils.py
Big cleanup, pyling warning, style, error
[mpd-sima.git] / sima / utils / utils.py
index 8e07e7ae965e5f7342b5425a3094a46f61730bc3..cc81f61643153ffec7d9c56b325fb74c2f27bd2f 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 #
 # -*- coding: utf-8 -*-
 #
-# Copyright (c) 2010, 2011, 2013, 2014, 2015, 2020 kaliko <kaliko@azylum.org>
+# Copyright (c) 2010, 2011, 2013, 2014, 2015, 2020, 2021 kaliko <kaliko@azylum.org>
 #
 #  This file is part of sima
 #
 #
 #  This file is part of sima
 #
@@ -30,10 +30,13 @@ from argparse import ArgumentError, Action
 from base64 import b64decode as push
 from codecs import getencoder
 from datetime import datetime
 from base64 import b64decode as push
 from codecs import getencoder
 from datetime import datetime
-from os import environ, access, getcwd, W_OK, R_OK
+from os import getenv, access, getcwd, W_OK, R_OK
 from os.path import dirname, isabs, join, normpath, exists, isdir, isfile
 from time import sleep
 
 from os.path import dirname, isabs, join, normpath, exists, isdir, isfile
 from time import sleep
 
+from musicpd import VERSION as mversion
+from sima.info import __version__ as sversion
+
 
 def getws(dic):
     """
 
 def getws(dic):
     """
@@ -46,21 +49,33 @@ def getws(dic):
     dic.update({'apikey': aka})
 
 
     dic.update({'apikey': aka})
 
 
+def parse_mpd_host(value):
+    passwd = host = None
+    # If password is set: MPD_HOST=pass@host
+    if '@' in value:
+        mpd_host_env = value.split('@', 1)
+        if mpd_host_env[0]:
+            # A password is actually set
+            passwd = mpd_host_env[0]
+            if mpd_host_env[1]:
+                host = mpd_host_env[1]
+        elif mpd_host_env[1]:
+            # No password set but leading @ is an abstract socket
+            host = '@'+mpd_host_env[1]
+    else:
+        # MPD_HOST is a plain host
+        host = value
+    return host, passwd
+
+
 def get_mpd_environ():
     """
     Retrieve MPD env. var.
     """
     passwd = host = None
 def get_mpd_environ():
     """
     Retrieve MPD env. var.
     """
     passwd = host = None
-    mpd_host_env = environ.get('MPD_HOST')
-    if mpd_host_env:
-        # If password is set:
-        # mpd_host_env = ['pass', 'host'] because MPD_HOST=pass@host
-        mpd_host_env = mpd_host_env.split('@')
-        mpd_host_env.reverse()
-        host = mpd_host_env[0]
-        if len(mpd_host_env) > 1 and mpd_host_env[1]:
-            passwd = mpd_host_env[1]
-    return (host, environ.get('MPD_PORT', None), passwd)
+    if getenv('MPD_HOST'):
+        host, passwd = parse_mpd_host(getenv('MPD_HOST'))
+    return (host, getenv('MPD_PORT', None), passwd)
 
 
 def normalize_path(path):
 
 
 def normalize_path(path):
@@ -76,6 +91,8 @@ def exception_log():
     log = logging.getLogger(__name__)
     log.error('Unhandled Exception!!!')
     log.error(''.join(traceback.format_exc()))
     log = logging.getLogger(__name__)
     log.error('Unhandled Exception!!!')
     log.error(''.join(traceback.format_exc()))
+    log.info('musicpd python module version: %s', mversion)
+    log.info('MPD_sima version: %s', sversion)
     log.info('Please report the previous message'
              ' along with some log entries right before the crash.')
     log.info('thanks for your help :)')
     log.info('Please report the previous message'
              ' along with some log entries right before the crash.')
     log.info('thanks for your help :)')
@@ -83,10 +100,6 @@ def exception_log():
     sys.exit(1)
 
 
     sys.exit(1)
 
 
-class SigHup(Exception):
-    """SIGHUP raises this Exception"""
-
-
 # ArgParse Callbacks
 class Obsolete(Action):
     # pylint: disable=R0903
 # ArgParse Callbacks
 class Obsolete(Action):
     # pylint: disable=R0903
@@ -99,7 +112,7 @@ class Obsolete(Action):
 class FileAction(Action):
     """Generic class to inherit from for ArgParse action on file/dir
     """
 class FileAction(Action):
     """Generic class to inherit from for ArgParse action on file/dir
     """
-    # pylint: disable=R0903
+    # pylint: disable=R0903,W0201
     def __call__(self, parser, namespace, values, option_string=None):
         self._file = normalize_path(values)
         self._dir = dirname(self._file)
     def __call__(self, parser, namespace, values, option_string=None):
         self._file = normalize_path(values)
         self._dir = dirname(self._file)
@@ -120,7 +133,6 @@ class Wfile(FileAction):
         if isdir(self._file):
             self.parser.error('need a file not a directory: {}'.format(self._file))
         if not exists(self._dir):
         if isdir(self._file):
             self.parser.error('need a file not a directory: {}'.format(self._file))
         if not exists(self._dir):
-            #raise ArgumentError(self, '"{0}" does not exist'.format(self._dir))
             self.parser.error('directory does not exist: {0}'.format(self._dir))
         if not exists(self._file):
             # Is parent directory writable then
             self.parser.error('directory does not exist: {0}'.format(self._dir))
         if not exists(self._file):
             # Is parent directory writable then
@@ -159,6 +171,7 @@ class Wdir(FileAction):
 
 class Throttle:
     """throttle decorator"""
 
 class Throttle:
     """throttle decorator"""
+    # pylint: disable=R0903
     def __init__(self, wait):
         self.wait = wait
         self.last_called = datetime.now()
     def __init__(self, wait):
         self.wait = wait
         self.last_called = datetime.now()
@@ -177,6 +190,10 @@ class MPDSimaException(Exception):
     """Generic MPD_sima Exception"""
 
 
     """Generic MPD_sima Exception"""
 
 
+class SigHup(MPDSimaException):
+    """SIGHUP raises this Exception"""
+
+
 # http client exceptions (for webservices)
 class WSError(MPDSimaException):
     pass
 # http client exceptions (for webservices)
 class WSError(MPDSimaException):
     pass