]> kaliko git repositories - mpd-sima.git/blobdiff - sima/utils/utils.py
Cleanup PlayerError exception wrapper
[mpd-sima.git] / sima / utils / utils.py
index c3e80d4139b097f18b80595d042321e6665a36c7..cb672639e2e780d06187f641b9b0ac0c5d84ebe7 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 #
-# Copyright (c) 2010, 2011, 2013, 2014, 2015, 2020 kaliko <kaliko@azylum.org>
+# Copyright (c) 2010, 2011, 2013, 2014, 2015, 2020, 2021, 2024 kaliko <kaliko@azylum.org>
 #
 #  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,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):
@@ -154,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):
@@ -167,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()
@@ -194,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
@@ -214,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