X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Futils%2Futils.py;h=b9dc980c37f5a109b207e133b660df4bb26517df;hb=d67a78c3f86751a551b370c32aaf3934e772825f;hp=19603ba0da35caa3dbf1b48552d6899855e00a19;hpb=2719d060682e85c9571402a05319acdde3d776e3;p=mpd-sima.git diff --git a/sima/utils/utils.py b/sima/utils/utils.py index 19603ba..b9dc980 100644 --- a/sima/utils/utils.py +++ b/sima/utils/utils.py @@ -30,7 +30,7 @@ from argparse import ArgumentError, Action 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 @@ -43,23 +43,36 @@ def getws(dic): """ aka = push(bytes(dic.get('apikey') + '=', 'utf-8')) aka = getencoder('rot-13')(str((aka), 'utf-8'))[0] - 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 - 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): """Get absolute path @@ -68,6 +81,7 @@ def normalize_path(path): return normpath(join(getcwd(), path)) return path + def exception_log(): """Log unknown exceptions""" log = logging.getLogger(__name__) @@ -82,7 +96,7 @@ def exception_log(): class SigHup(Exception): """SIGHUP raises this Exception""" - pass + # ArgParse Callbacks class Obsolete(Action): @@ -92,6 +106,7 @@ class Obsolete(Action): def __call__(self, parser, namespace, values, option_string=None): raise ArgumentError(self, 'obsolete argument') + class FileAction(Action): """Generic class to inherit from for ArgParse action on file/dir """ @@ -106,7 +121,7 @@ class FileAction(Action): def checks(self): """control method """ - pass + class Wfile(FileAction): # pylint: disable=R0903 @@ -126,6 +141,7 @@ class Wfile(FileAction): if not access(self._file, W_OK): self.parser.error('no write access to "{0}"'.format(self._file)) + class Rfile(FileAction): # pylint: disable=R0903 """Is file readable @@ -138,6 +154,7 @@ class Rfile(FileAction): if not access(self._file, R_OK): self.parser.error('no read access to "{0}"'.format(self._file)) + class Wdir(FileAction): # pylint: disable=R0903 """Is directory writable @@ -150,6 +167,7 @@ class Wdir(FileAction): if not access(self._file, W_OK): self.parser.error('no write access to "{0}"'.format(self._file)) + class Throttle: """throttle decorator""" def __init__(self, wait): @@ -165,28 +183,30 @@ class Throttle: return result return wrapper -# http client exceptions (for webservices) -class WSError(Exception): +class MPDSimaException(Exception): + """Generic MPD_sima Exception""" + + +# http client exceptions (for webservices) +class WSError(MPDSimaException): pass + class WSNotFound(WSError): pass + class WSTimeout(WSError): pass + class WSHTTPError(WSError): pass -class MPDSimaException(Exception): - pass class PluginException(MPDSimaException): pass -class PluginConfException(MPDSimaException): - pass - # VIM MODLINE # vim: ai ts=4 sw=4 sts=4 expandtab