X-Git-Url: https://jfr.im/git/z_archive/twitter.git/blobdiff_plain/30e61103778fb19b374dd087e1adf205d8905b13..918b8b48fb41c9026aa37eb83607f941ff407d03:/twitter/util.py diff --git a/twitter/util.py b/twitter/util.py index b78a108..27142af 100644 --- a/twitter/util.py +++ b/twitter/util.py @@ -5,18 +5,22 @@ Internal utility functions. http://wiki.python.org/moin/EscapingHtml """ +from __future__ import print_function import re import sys +import time + try: from html.entities import name2codepoint + unichr = chr except ImportError: from htmlentitydefs import name2codepoint def htmlentitydecode(s): return re.sub( '&(%s);' % '|'.join(name2codepoint), - lambda m: chr(name2codepoint[m.group(1)]), s) + lambda m: unichr(name2codepoint[m.group(1)]), s) def smrt_input(globals_, locals_, ps1=">>> ", ps2="... "): inputs = [] @@ -42,3 +46,32 @@ def printNicely(string): print(string.encode('utf8')) __all__ = ["htmlentitydecode", "smrt_input"] + +def err(msg=""): + print(msg, file=sys.stderr) + +class Fail(object): + """A class to count fails during a repetitive task. + + Args: + maximum: An integer for the maximum of fails to allow. + exit: An integer for the exit code when maximum of fail is reached. + + Methods: + count: Count a fail, exit when maximum of fails is reached. + wait: Same as count but also sleep for a given time in seconds. + """ + def __init__(self, maximum=10, exit=1): + self.i = maximum + self.exit = exit + + def count(self): + self.i -= 1 + if self.i == 0: + err("Too many consecutive fails, exiting.") + raise SystemExit(self.exit) + + def wait(self, delay=0): + self.count() + if delay > 0: + time.sleep(delay)