]> kaliko git repositories - mpd-sima.git/blobdiff - sima/utils/utils.py
Some style formating
[mpd-sima.git] / sima / utils / utils.py
index d0edcd4ab6f8ca671143df6fbfe8e0e97ac44cc0..187d6dad96c25e2f01435da02a10202eac8c087d 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 #
 # -*- coding: utf-8 -*-
 #
-# Copyright (c) 2010, 2011, 2013 Jack Kaliko <kaliko@azylum.org>
+# Copyright (c) 2010, 2011, 2013, 2014, 2015, 2020 kaliko <kaliko@azylum.org>
 #
 #  This file is part of sima
 #
 #
 #  This file is part of sima
 #
 #
 """generic tools and utilities for sima
 """
 #
 """generic tools and utilities for sima
 """
+# pylint: disable=C0111
 
 
+import logging
 import traceback
 import sys
 
 from argparse import ArgumentError, Action
 from base64 import b64decode as push
 from codecs import getencoder
 import traceback
 import sys
 
 from argparse import ArgumentError, Action
 from base64 import b64decode as push
 from codecs import getencoder
-from datetime import datetime, timedelta
+from datetime import datetime
 from os import environ, access, getcwd, W_OK, R_OK
 from os.path import dirname, isabs, join, normpath, exists, isdir, isfile
 from time import sleep
 from os import environ, access, getcwd, W_OK, R_OK
 from os.path import dirname, isabs, join, normpath, exists, isdir, isfile
 from time import sleep
@@ -41,7 +43,8 @@ def getws(dic):
     """
     aka = push(bytes(dic.get('apikey') + '=', 'utf-8'))
     aka = getencoder('rot-13')(str((aka), 'utf-8'))[0]
     """
     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 get_mpd_environ():
     """
 
 def get_mpd_environ():
     """
@@ -59,6 +62,7 @@ def get_mpd_environ():
             passwd = mpd_host_env[1]
     return (host, environ.get('MPD_PORT', None), passwd)
 
             passwd = mpd_host_env[1]
     return (host, environ.get('MPD_PORT', None), passwd)
 
+
 def normalize_path(path):
     """Get absolute path
     """
 def normalize_path(path):
     """Get absolute path
     """
@@ -66,10 +70,10 @@ def normalize_path(path):
         return normpath(join(getcwd(), path))
     return path
 
         return normpath(join(getcwd(), path))
     return path
 
+
 def exception_log():
     """Log unknown exceptions"""
 def exception_log():
     """Log unknown exceptions"""
-    import logging
-    log = logging.getLogger('sima')
+    log = logging.getLogger(__name__)
     log.error('Unhandled Exception!!!')
     log.error(''.join(traceback.format_exc()))
     log.info('Please report the previous message'
     log.error('Unhandled Exception!!!')
     log.error(''.join(traceback.format_exc()))
     log.info('Please report the previous message'
@@ -78,21 +82,10 @@ def exception_log():
     log.info('Quiting now!')
     sys.exit(1)
 
     log.info('Quiting now!')
     sys.exit(1)
 
-def purge_cache(obj, age=4):
-    now = datetime.utcnow()
-    if now.hour == obj.timestamp.hour:
-        return
-    obj.timestamp = datetime.utcnow()
-    cache = obj.cache
-    delta = timedelta(hours=age)
-    for url in list(cache.keys()):
-        timestamp = cache.get(url).created()
-        if now - timestamp > delta:
-            cache.pop(url)
-
 
 class SigHup(Exception):
 
 class SigHup(Exception):
-    pass
+    """SIGHUP raises this Exception"""
+
 
 # ArgParse Callbacks
 class Obsolete(Action):
 
 # ArgParse Callbacks
 class Obsolete(Action):
@@ -102,6 +95,7 @@ class Obsolete(Action):
     def __call__(self, parser, namespace, values, option_string=None):
         raise ArgumentError(self, 'obsolete argument')
 
     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
     """
 class FileAction(Action):
     """Generic class to inherit from for ArgParse action on file/dir
     """
@@ -118,14 +112,17 @@ class FileAction(Action):
         """
         pass
 
         """
         pass
 
+
 class Wfile(FileAction):
     # pylint: disable=R0903
     """Is file writable
     """
     def checks(self):
 class Wfile(FileAction):
     # pylint: disable=R0903
     """Is file writable
     """
     def checks(self):
+        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))
         if not exists(self._dir):
             #raise ArgumentError(self, '"{0}" does not exist'.format(self._dir))
-            self.parser.error('file does not exist: {0}'.format(self._dir))
+            self.parser.error('directory does not exist: {0}'.format(self._dir))
         if not exists(self._file):
             # Is parent directory writable then
             if not access(self._dir, W_OK):
         if not exists(self._file):
             # Is parent directory writable then
             if not access(self._dir, W_OK):
@@ -134,6 +131,7 @@ class Wfile(FileAction):
             if not access(self._file, W_OK):
                 self.parser.error('no write access to "{0}"'.format(self._file))
 
             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
 class Rfile(FileAction):
     # pylint: disable=R0903
     """Is file readable
@@ -146,6 +144,7 @@ class Rfile(FileAction):
         if not access(self._file, R_OK):
             self.parser.error('no read access to "{0}"'.format(self._file))
 
         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
 class Wdir(FileAction):
     # pylint: disable=R0903
     """Is directory writable
@@ -158,7 +157,9 @@ class Wdir(FileAction):
         if not access(self._file, W_OK):
             self.parser.error('no write access to "{0}"'.format(self._file))
 
         if not access(self._file, W_OK):
             self.parser.error('no write access to "{0}"'.format(self._file))
 
-class Throttle():
+
+class Throttle:
+    """throttle decorator"""
     def __init__(self, wait):
         self.wait = wait
         self.last_called = datetime.now()
     def __init__(self, wait):
         self.wait = wait
         self.last_called = datetime.now()
@@ -172,34 +173,30 @@ class Throttle():
             return result
         return wrapper
 
             return result
         return wrapper
 
-class Cache():
-    def __init__(self, elem, last=None):
-        self.elem = elem
-        self.requestdate = last
-        if not last:
-            self.requestdate = datetime.utcnow()
-
-    def created(self):
-        return self.requestdate
 
 
-    def get(self):
-        return self.elem
+class MPDSimaException(Exception):
+    """Generic MPD_sima Exception"""
 
 
 # http client exceptions (for webservices)
 
 
 # http client exceptions (for webservices)
-
-class WSError(Exception):
+class WSError(MPDSimaException):
     pass
 
     pass
 
+
 class WSNotFound(WSError):
     pass
 
 class WSNotFound(WSError):
     pass
 
+
 class WSTimeout(WSError):
     pass
 
 class WSTimeout(WSError):
     pass
 
+
 class WSHTTPError(WSError):
     pass
 
 
 class WSHTTPError(WSError):
     pass
 
 
+class PluginException(MPDSimaException):
+    pass
+
 # VIM MODLINE
 # vim: ai ts=4 sw=4 sts=4 expandtab
 # VIM MODLINE
 # vim: ai ts=4 sw=4 sts=4 expandtab