X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Futils%2Futils.py;h=475a54859305d2dbbff604546a6333b05c97eac6;hb=78a694ddcd2a6ecc8b2b1fd3c74ee2d938707305;hp=c3bc6c0175db30f36325c941d41d63d378c5f36e;hpb=528e8d1b722d1e85d7e17eac636f764d457cc050;p=mpd-sima.git diff --git a/sima/utils/utils.py b/sima/utils/utils.py index c3bc6c0..475a548 100644 --- a/sima/utils/utils.py +++ b/sima/utils/utils.py @@ -20,6 +20,7 @@ # """generic tools and utilities for sima """ +# pylint: disable=C0111 import traceback import sys @@ -27,9 +28,10 @@ import sys from argparse import ArgumentError, Action from base64 import b64decode as push from codecs import getencoder -from datetime import datetime +from datetime import datetime, timedelta 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 def getws(dic): @@ -77,7 +79,23 @@ def exception_log(): log.info('Quiting now!') sys.exit(1) +def purge_cache(obj, age=4): + """purge old entries in http client cache + """ + 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): + """SIGHUP raises this Exception""" pass # ArgParse Callbacks @@ -144,7 +162,8 @@ class Wdir(FileAction): 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() @@ -158,7 +177,8 @@ class Throttle(): return result return wrapper -class Cache(): +class Cache: + """Plain cache object""" def __init__(self, elem, last=None): self.elem = elem self.requestdate = last @@ -171,5 +191,21 @@ class Cache(): def get(self): return self.elem + +# http client exceptions (for webservices) + +class WSError(Exception): + pass + +class WSNotFound(WSError): + pass + +class WSTimeout(WSError): + pass + +class WSHTTPError(WSError): + pass + + # VIM MODLINE # vim: ai ts=4 sw=4 sts=4 expandtab