X-Git-Url: https://vcs.fsf.org/?p=rainbowstream.git;a=blobdiff_plain;f=rainbowstream%2Fdraw.py;h=c2119ff779e03cf0ca77631991ddccf81398f0f2;hp=2586289d8e85c100d7330f86738616805c19e93b;hb=e9f5200b8602ad0427da3cc86d4406f6dcfd3141;hpb=9c7342ca2f74dcafad845ca0010013181e2ca16f diff --git a/rainbowstream/draw.py b/rainbowstream/draw.py index 2586289..c2119ff 100644 --- a/rainbowstream/draw.py +++ b/rainbowstream/draw.py @@ -1,11 +1,13 @@ -""" -Draw -""" +import random +import itertools import requests import datetime import time from twitter.util import printNicely +from functools import wraps +from pyfiglet import figlet_format +from functools import reduce from StringIO import StringIO from dateutil import parser from .c_image import * @@ -13,8 +15,68 @@ from .colors import * from .config import * from .db import * + db = RainbowDB() +def init_cycle(): + """ + Init the cycle + """ + colors_shuffle = [globals()[i.encode('utf8')] + if not i.startswith('RGB_') + else RGB(int(i[4:])) + for i in c['CYCLE_COLOR']] + return itertools.cycle(colors_shuffle) +cyc = init_cycle() + +def order_rainbow(s): + """ + Print a string with ordered color with each character + """ + c = [colors_shuffle[i % 7](s[i]) for i in xrange(len(s))] + return reduce(lambda x, y: x + y, c) + + +def random_rainbow(s): + """ + Print a string with random color with each character + """ + c = [random.choice(colors_shuffle)(i) for i in s] + return reduce(lambda x, y: x + y, c) + + +def Memoize(func): + """ + Memoize decorator + """ + cache = {} + + @wraps(func) + def wrapper(*args): + if args not in cache: + cache[args] = func(*args) + return cache[args] + return wrapper + + +@Memoize +def cycle_color(s): + """ + Cycle the colors_shuffle + """ + return next(cyc)(s) + + +def ascii_art(text): + """ + Draw the Ascii Art + """ + fi = figlet_format(text, font='doom') + print('\n'.join( + [next(cyc)(i) for i in fi.split('\n')] + )) + + def check_theme(): """ Check current theme and update if necessary