fallback humanize function for arrow now supported locale
authorOrakaro <nhatminh_179@hotmail.com>
Sat, 6 Sep 2014 03:29:52 +0000 (12:29 +0900)
committerOrakaro <nhatminh_179@hotmail.com>
Sat, 6 Sep 2014 03:29:52 +0000 (12:29 +0900)
docs/conf.py
rainbowstream/draw.py
setup.py

index 2dc6498..9c380c8 100644 (file)
@@ -48,9 +48,9 @@ copyright = u'2014, Vu Nhat Minh'
 # built documents.
 #
 # The short X.Y version.
 # built documents.
 #
 # The short X.Y version.
-version = '0.9.9'
+version = '1.0.0'
 # The full version, including alpha/beta/rc tags.
 # 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.
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
index b43cd9f..429bd27 100644 (file)
@@ -38,6 +38,7 @@ def start_cycle():
     """
     dg['cyc'] = init_cycle()
     dg['cache'] = {}
     """
     dg['cyc'] = init_cycle()
     dg['cache'] = {}
+    dg['humanize_unsupported'] = False
 
 
 def order_rainbow(s):
 
 
 def order_rainbow(s):
@@ -146,6 +147,33 @@ def color_func(func_name):
     return globals()[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
 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)
     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:
 
     # 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)
     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'))
     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)
     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'))
     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)
     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'))
     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)
     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'))
     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)
     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'))
     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)
     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'))
     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)
     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'))
     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)
     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'))
     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)
     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
     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)
         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
         clock = 'Created at ' + color_func(c['GROUP']['clock'])(clock)
 
         prefix = ' ' * 2
index ac0c342..ee87291 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -3,7 +3,7 @@ import os
 import os.path
 
 # Bumped version
 import os.path
 
 # Bumped version
-version = '0.9.9'
+version = '1.0.0'
 
 # Require
 install_requires = [
 
 # Require
 install_requires = [