X-Git-Url: https://jfr.im/git/z_archive/twitter.git/blobdiff_plain/a5e40197cf272175a8bc4aa39d4c5b6e545c751c..918b8b48fb41c9026aa37eb83607f941ff407d03:/twitter/util.py diff --git a/twitter/util.py b/twitter/util.py index eda73fb..27142af 100644 --- a/twitter/util.py +++ b/twitter/util.py @@ -5,9 +5,17 @@ Internal utility functions. http://wiki.python.org/moin/EscapingHtml """ +from __future__ import print_function import re -from htmlentitydefs import name2codepoint +import sys +import time + +try: + from html.entities import name2codepoint + unichr = chr +except ImportError: + from htmlentitydefs import name2codepoint def htmlentitydecode(s): return re.sub( @@ -21,13 +29,49 @@ def smrt_input(globals_, locals_, ps1=">>> ", ps2="... "): prompt = ps2 else: prompt = ps1 - inputs.append(raw_input(prompt)) + inputs.append(input(prompt)) try: ret = eval('\n'.join(inputs), globals_, locals_) if ret: - print ret + print(str(ret)) return except SyntaxError: pass +def printNicely(string): + if hasattr(sys.stdout, 'buffer'): + sys.stdout.buffer.write(string.encode('utf8')) + print() + else: + 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)