From e5455a305a891c63ab8926b95acb4d4daea2fda2 Mon Sep 17 00:00:00 2001 From: Orakaro Date: Sat, 6 Sep 2014 12:29:52 +0900 Subject: [PATCH] fallback humanize function for arrow now supported locale --- docs/conf.py | 4 +-- rainbowstream/draw.py | 81 +++++++++++++++++++++++-------------------- setup.py | 2 +- 3 files changed, 46 insertions(+), 41 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 2dc6498..9c380c8 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -48,9 +48,9 @@ copyright = u'2014, Vu Nhat Minh' # built documents. # # The short X.Y version. -version = '0.9.9' +version = '1.0.0' # The full version, including alpha/beta/rc tags. -release = '0.9.9' +release = '1.0.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/rainbowstream/draw.py b/rainbowstream/draw.py index b43cd9f..429bd27 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 @@ -163,16 +191,11 @@ def draw(t, keyword=None, humanize=True, noti=False, fil=[], ig=[]): retweet_count = t['retweet_count'] favorite_count = t['favorite_count'] 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: @@ -615,9 +638,7 @@ 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')) @@ -648,9 +669,7 @@ 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')) @@ -681,9 +700,7 @@ 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')) @@ -713,9 +730,7 @@ 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')) @@ -745,9 +760,7 @@ 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')) @@ -778,9 +791,7 @@ 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')) @@ -811,9 +822,7 @@ 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')) @@ -844,9 +853,7 @@ 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')) @@ -916,8 +923,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 @@ -995,8 +1001,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 diff --git a/setup.py b/setup.py index ac0c342..ee87291 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ import os import os.path # Bumped version -version = '0.9.9' +version = '1.0.0' # Require install_requires = [ -- 2.25.1