X-Git-Url: https://vcs.fsf.org/?p=rainbowstream.git;a=blobdiff_plain;f=rainbowstream%2Fdraw.py;h=a94750682dda5753ead9be7092acc3a48cad3e90;hp=202b629a31220b33aa61e6f891222f63847e4d7b;hb=72f58edbf0bd853f8cb5a2a0f25d48de5c0e8268;hpb=841260feb5d0bc4d556b3fab34d2f7efbeb78a51 diff --git a/rainbowstream/draw.py b/rainbowstream/draw.py index 202b629..a947506 100644 --- a/rainbowstream/draw.py +++ b/rainbowstream/draw.py @@ -38,6 +38,7 @@ def start_cycle(): """ dg['cyc'] = init_cycle() dg['cache'] = {} + dg['humanize_unsupported'] = False def order_rainbow(s): @@ -146,6 +147,33 @@ def color_func(func_name): return globals()[func_name] +def fallback_humanize(date, fallback_format=None, use_fallback=False): + """ + Format date with arrow and a fallback format + """ + # Convert to local timezone + date = arrow.get(date).to('local') + # Set default fallback format + if not fallback_format: + fallback_format = '%Y/%m/%d %H:%M:%S' + # Determine using fallback format or not by a variable + if use_fallback: + return date.datetime.strftime(fallback_format) + try: + # Use Arrow's humanize function + lang, encode = locale.getdefaultlocale() + clock = date.humanize(locale=lang) + except: + # Notice at the 1st time only + if not dg['humanize_unsupported']: + dg['humanize_unsupported'] = True + printNicely( + light_magenta('Humanized date display method does not support your $LC_ALL.')) + # Fallback when LC_ALL is not supported + clock = date.datetime.strftime(fallback_format) + return clock + + def draw(t, keyword=None, humanize=True, noti=False, fil=[], ig=[]): """ Draw the rainbow @@ -162,17 +190,13 @@ def draw(t, keyword=None, humanize=True, noti=False, fil=[], ig=[]): favorited = t['favorited'] retweet_count = t['retweet_count'] favorite_count = t['favorite_count'] + client = t['source'] date = parser.parse(created_at) - date = arrow.get(date).to('local') - if humanize: - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) - else: - try: - clock_format = c['FORMAT']['TWEET']['CLOCK_FORMAT'] - except: - clock_format = '%Y/%m/%d %H:%M:%S' - clock = date.datetime.strftime(clock_format) + try: + clock_format = c['FORMAT']['TWEET']['CLOCK_FORMAT'] + except: + clock_format = '%Y/%m/%d %H:%M:%S' + clock = fallback_humanize(date, clock_format, not humanize) # Pull extended retweet text try: @@ -192,6 +216,12 @@ def draw(t, keyword=None, humanize=True, noti=False, fil=[], ig=[]): # Unescape HTML character text = unescape(text) + # Get client name + try: + client = client.split('>')[-2].split('<')[0] + except: + client = None + # Get expanded url try: expanded_url = [] @@ -298,6 +328,7 @@ def draw(t, keyword=None, humanize=True, noti=False, fil=[], ig=[]): formater = nick.join(formater.split('#nick')) formater = fav.join(formater.split('#fav')) formater = tweet.join(formater.split('#tweet')) + formater = emojize(formater) # Change clock word word = [wo for wo in formater.split() if '#clock' in wo][0] delimiter = color_func(c['TWEET']['clock'])( @@ -317,7 +348,11 @@ def draw(t, keyword=None, humanize=True, noti=False, fil=[], ig=[]): delimiter = color_func(c['TWEET']['favorite_count'])( str(favorite_count).join(word.split('#fa_count'))) formater = delimiter.join(formater.split(word)) - formater = emojize(formater) + # Change client word + word = [wo for wo in formater.split() if '#client' in wo][0] + delimiter = color_func(c['TWEET']['client'])( + client.join(word.split('#client'))) + formater = delimiter.join(formater.split(word)) except: pass @@ -615,14 +650,13 @@ def notify_retweet(t): notify = color_func(c['NOTIFICATION']['notify'])( 'retweeted your tweet') date = parser.parse(created_at) - date = arrow.get(date).to('local') - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = color_func(c['NOTIFICATION']['clock'])(clock) meta = c['NOTIFY_FORMAT'] meta = source_user.join(meta.split('#source_user')) meta = notify.join(meta.split('#notify')) meta = clock.join(meta.split('#clock')) + meta = emojize(meta) # Output printNicely('') printNicely(meta) @@ -647,14 +681,13 @@ def notify_favorite(e): notify = color_func(c['NOTIFICATION']['notify'])( 'favorited your tweet') date = parser.parse(created_at) - date = arrow.get(date).to('local') - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = color_func(c['NOTIFICATION']['clock'])(clock) meta = c['NOTIFY_FORMAT'] meta = source_user.join(meta.split('#source_user')) meta = notify.join(meta.split('#notify')) meta = clock.join(meta.split('#clock')) + meta = emojize(meta) # Output printNicely('') printNicely(meta) @@ -679,14 +712,13 @@ def notify_unfavorite(e): notify = color_func(c['NOTIFICATION']['notify'])( 'unfavorited your tweet') date = parser.parse(created_at) - date = arrow.get(date).to('local') - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = color_func(c['NOTIFICATION']['clock'])(clock) meta = c['NOTIFY_FORMAT'] meta = source_user.join(meta.split('#source_user')) meta = notify.join(meta.split('#notify')) meta = clock.join(meta.split('#clock')) + meta = emojize(meta) # Output printNicely('') printNicely(meta) @@ -710,14 +742,13 @@ def notify_follow(e): notify = color_func(c['NOTIFICATION']['notify'])( 'followed you') date = parser.parse(created_at) - date = arrow.get(date).to('local') - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = color_func(c['NOTIFICATION']['clock'])(clock) meta = c['NOTIFY_FORMAT'] meta = source_user.join(meta.split('#source_user')) meta = notify.join(meta.split('#notify')) meta = clock.join(meta.split('#clock')) + meta = emojize(meta) # Output printNicely('') printNicely(meta) @@ -741,14 +772,13 @@ def notify_list_member_added(e): notify = color_func(c['NOTIFICATION']['notify'])( 'added you to a list') date = parser.parse(created_at) - date = arrow.get(date).to('local') - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = color_func(c['NOTIFICATION']['clock'])(clock) meta = c['NOTIFY_FORMAT'] meta = source_user.join(meta.split('#source_user')) meta = notify.join(meta.split('#notify')) meta = clock.join(meta.split('#clock')) + meta = emojize(meta) # Output printNicely('') printNicely(meta) @@ -773,14 +803,13 @@ def notify_list_member_removed(e): notify = color_func(c['NOTIFICATION']['notify'])( 'removed you from a list') date = parser.parse(created_at) - date = arrow.get(date).to('local') - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = color_func(c['NOTIFICATION']['clock'])(clock) meta = c['NOTIFY_FORMAT'] meta = source_user.join(meta.split('#source_user')) meta = notify.join(meta.split('#notify')) meta = clock.join(meta.split('#clock')) + meta = emojize(meta) # Output printNicely('') printNicely(meta) @@ -805,14 +834,13 @@ def notify_list_user_subscribed(e): notify = color_func(c['NOTIFICATION']['notify'])( 'subscribed to your list') date = parser.parse(created_at) - date = arrow.get(date).to('local') - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = color_func(c['NOTIFICATION']['clock'])(clock) meta = c['NOTIFY_FORMAT'] meta = source_user.join(meta.split('#source_user')) meta = notify.join(meta.split('#notify')) meta = clock.join(meta.split('#clock')) + meta = emojize(meta) # Output printNicely('') printNicely(meta) @@ -837,27 +865,19 @@ def notify_list_user_unsubscribed(e): notify = color_func(c['NOTIFICATION']['notify'])( 'unsubscribed from your list') date = parser.parse(created_at) - date = arrow.get(date).to('local') - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = color_func(c['NOTIFICATION']['clock'])(clock) meta = c['NOTIFY_FORMAT'] meta = source_user.join(meta.split('#source_user')) meta = notify.join(meta.split('#notify')) meta = clock.join(meta.split('#clock')) + meta = emojize(meta) # Output printNicely('') printNicely(meta) print_list(target_object, noti=True) -def nothing(e): - """ - Do nothing for other event - """ - return - - def print_event(e): """ Notify an event @@ -872,7 +892,7 @@ def print_event(e): 'list_user_subscribed': notify_list_user_subscribed, 'list_user_unsubscribed': notify_list_user_unsubscribed, } - event_dict.get(e['event'], nothing)(e) + event_dict.get(e['event'], lambda *args: None)(e) def show_profile(u): @@ -915,8 +935,7 @@ def show_profile(u): location = 'Location : ' + color_func(c['PROFILE']['location'])(location) url = 'URL : ' + (color_func(c['PROFILE']['url'])(url) if url else '') date = parser.parse(created_at) - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = 'Join at ' + color_func(c['PROFILE']['clock'])(clock) # Format @@ -994,8 +1013,7 @@ def print_list(group, noti=False): mode = color_func(c['GROUP']['mode'])('Type: ' + mode) created_at = grp['created_at'] date = parser.parse(created_at) - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = 'Created at ' + color_func(c['GROUP']['clock'])(clock) prefix = ' ' * 2 @@ -1059,8 +1077,8 @@ def format_quote(tweet): formater = c['QUOTE_FORMAT'] formater = screen_name.join(formater.split('#owner')) formater = text.join(formater.split('#tweet')) - formater = emojize(formater) formater = u2str(formater) + formater = emojize(formater) except: pass # Highlight like a tweet