X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Futils%2Futils.py;h=ff0641057afdb57ce11c57131202f9d6378cbac0;hb=194de8ab2773bd8e456590e3876a0aca1fe4d564;hp=07c317fcba587e584ba1afdf5a12f3a6e2f20628;hpb=0236b2bf31b893ab0b53374c0d3a0bc0ab9deda3;p=mpd-sima.git diff --git a/sima/utils/utils.py b/sima/utils/utils.py index 07c317f..ff06410 100644 --- a/sima/utils/utils.py +++ b/sima/utils/utils.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (c) 2010, 2011, 2013 Jack Kaliko +# Copyright (c) 2010, 2011, 2013, 2014 Jack Kaliko # # This file is part of sima # @@ -18,15 +18,31 @@ # along with sima. If not, see . # # -"""generic tools and utilitaries for sima +"""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 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): + """ + Decode Obfuscated api key. + Only preventing API keys harvesting over the network + https://developer.echonest.com/forums/thread/105 + """ + aka = push(bytes(dic.get('apikey') + '=', 'utf-8')) + aka = getencoder('rot-13')(str((aka), 'utf-8'))[0] + dic.update({'apikey':aka}) def get_mpd_environ(): """ @@ -63,7 +79,9 @@ def exception_log(): log.info('Quiting now!') sys.exit(1) + class SigHup(Exception): + """SIGHUP raises this Exception""" pass # ArgParse Callbacks @@ -130,6 +148,35 @@ class Wdir(FileAction): if not access(self._file, W_OK): self.parser.error('no write access to "{0}"'.format(self._file)) +class Throttle: + """throttle decorator""" + def __init__(self, wait): + self.wait = wait + self.last_called = datetime.now() + + def __call__(self, func): + def wrapper(*args, **kwargs): + while self.last_called + self.wait > datetime.now(): + sleep(0.1) + result = func(*args, **kwargs) + self.last_called = datetime.now() + return result + return wrapper + +# 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