#
"""generic tools and utilities for sima
"""
+# pylint: disable=C0111
import traceback
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):
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
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()
return result
return wrapper
-class Cache():
+class Cache:
+ """Plain cache object"""
def __init__(self, elem, last=None):
self.elem = elem
self.requestdate = last
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