X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Futils%2Futils.py;h=cb672639e2e780d06187f641b9b0ac0c5d84ebe7;hb=1a178217e8efd3b2b523afb93775124baf1be05f;hp=d226ef08303bf3fde53064743b73781e3e868158;hpb=37dd60538984a3917354b794a5c96b0a025f8e95;p=mpd-sima.git diff --git a/sima/utils/utils.py b/sima/utils/utils.py index d226ef0..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 # @@ -100,10 +100,6 @@ def exception_log(): sys.exit(1) -class SigHup(Exception): - """SIGHUP raises this Exception""" - - # ArgParse Callbacks class Obsolete(Action): # pylint: disable=R0903 @@ -116,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) @@ -135,16 +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): - 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): @@ -153,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): @@ -166,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() @@ -193,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 @@ -213,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