X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Futils%2Futils.py;h=cb672639e2e780d06187f641b9b0ac0c5d84ebe7;hb=refs%2Fheads%2Fdev;hp=b9dc980c37f5a109b207e133b660df4bb26517df;hpb=d67a78c3f86751a551b370c32aaf3934e772825f;p=mpd-sima.git diff --git a/sima/utils/utils.py b/sima/utils/utils.py index b9dc980..cb67263 100644 --- a/sima/utils/utils.py +++ b/sima/utils/utils.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (c) 2010, 2011, 2013, 2014, 2015, 2020 kaliko +# Copyright (c) 2010, 2011, 2013, 2014, 2015, 2020, 2021, 2024 kaliko # # This file is part of sima # @@ -34,6 +34,9 @@ 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 musicpd import VERSION as mversion +from sima.info import __version__ as sversion + def getws(dic): """ @@ -45,6 +48,7 @@ def getws(dic): aka = getencoder('rot-13')(str((aka), 'utf-8'))[0] dic.update({'apikey': aka}) + def parse_mpd_host(value): passwd = host = None # If password is set: MPD_HOST=pass@host @@ -87,6 +91,8 @@ def exception_log(): 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 :)') @@ -94,10 +100,6 @@ def exception_log(): sys.exit(1) -class SigHup(Exception): - """SIGHUP raises this Exception""" - - # ArgParse Callbacks class Obsolete(Action): # pylint: disable=R0903 @@ -110,7 +112,7 @@ class Obsolete(Action): 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) @@ -129,17 +131,16 @@ class Wfile(FileAction): """ def checks(self): if isdir(self._file): - self.parser.error('need a file not a directory: {}'.format(self._file)) + self.parser.error(f'need a file not a directory: {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)) + self.parser.error(f'directory does not exist: {self._dir}') if not exists(self._file): # Is parent directory writable then if not access(self._dir, W_OK): - self.parser.error('no write access to "{0}"'.format(self._dir)) + self.parser.error(f'no write access to "{self._dir}"') else: if not access(self._file, W_OK): - self.parser.error('no write access to "{0}"'.format(self._file)) + self.parser.error(f'no write access to "{self._file}"') class Rfile(FileAction): @@ -148,11 +149,11 @@ class Rfile(FileAction): """ def checks(self): if not exists(self._file): - self.parser.error('file does not exist: {0}'.format(self._file)) + self.parser.error(f'file does not exist: {self._file}') if not isfile(self._file): - self.parser.error('not a file: {0}'.format(self._file)) + self.parser.error(f'not a file: {self._file}') if not access(self._file, R_OK): - self.parser.error('no read access to "{0}"'.format(self._file)) + self.parser.error(f'no read access to "{self._file}"') class Wdir(FileAction): @@ -161,15 +162,16 @@ class Wdir(FileAction): """ def checks(self): if not exists(self._file): - self.parser.error('directory does not exist: {0}'.format(self._file)) + self.parser.error(f'directory does not exist: {self._file}') if not isdir(self._file): - self.parser.error('not a directory: {0}'.format(self._file)) + self.parser.error(f'not a directory: {self._file}') if not access(self._file, W_OK): - self.parser.error('no write access to "{0}"'.format(self._file)) + self.parser.error(f'no write access to "{self._file}"') class Throttle: """throttle decorator""" + # pylint: disable=R0903 def __init__(self, wait): self.wait = wait self.last_called = datetime.now() @@ -188,6 +190,10 @@ class MPDSimaException(Exception): """Generic MPD_sima Exception""" +class SigHup(MPDSimaException): + """SIGHUP raises this Exception""" + + # http client exceptions (for webservices) class WSError(MPDSimaException): pass @@ -208,5 +214,21 @@ class WSHTTPError(WSError): class PluginException(MPDSimaException): pass + +# Wrap Exception decorator +def get_decorator(errors=(OSError, TimeoutError), wrap_into=Exception): + def decorator(func): + def w_func(*args, **kwargs): + try: + return func(*args, **kwargs) + except errors as err: + strerr = str(err) + if hasattr(err, 'strerror'): + if err.strerror: + strerr = err.strerror + raise wrap_into(strerr) from err + return w_func + return decorator + # VIM MODLINE # vim: ai ts=4 sw=4 sts=4 expandtab