[oe-commits] [bitbake] 03/40: toaster: lsupdates Add spinner for parsing/http fetch

git at git.openembedded.org git at git.openembedded.org
Wed Aug 10 23:11:46 UTC 2016


rpurdie pushed a commit to branch master
in repository bitbake.

commit e1c1c8827f3892551084bf1c0909c1b33f0dca83
Author: Michael Wood <michael.g.wood at intel.com>
AuthorDate: Mon Aug 1 19:38:28 2016 +0100

    toaster: lsupdates Add spinner for parsing/http fetch
    
    Adds a spinner so that you know that the parse and http fetch from the
    layerindex is in progress.
    
    Signed-off-by: Michael Wood <michael.g.wood at intel.com>
---
 lib/toaster/orm/management/commands/lsupdates.py | 35 ++++++++++++++++++++++--
 1 file changed, 33 insertions(+), 2 deletions(-)

diff --git a/lib/toaster/orm/management/commands/lsupdates.py b/lib/toaster/orm/management/commands/lsupdates.py
index be63a85..89817c8 100644
--- a/lib/toaster/orm/management/commands/lsupdates.py
+++ b/lib/toaster/orm/management/commands/lsupdates.py
@@ -29,11 +29,33 @@ import sys
 
 import json
 import logging
+import threading
+import time
 logger = logging.getLogger("toaster")
 
 DEFAULT_LAYERINDEX_SERVER = "http://layers.openembedded.org/layerindex/api/"
 
 
+class Spinner(threading.Thread):
+    """ A simple progress spinner to indicate download/parsing is happening"""
+    def __init__(self, *args, **kwargs):
+        super(Spinner, self).__init__(*args, **kwargs)
+        self.setDaemon(True)
+        self.signal = True
+
+    def run(self):
+        os.system('setterm -cursor off')
+        while self.signal:
+            for char in ["/", "-", "\\", "|"]:
+                sys.stdout.write("\r" + char)
+                sys.stdout.flush()
+                time.sleep(0.25)
+        os.system('setterm -cursor on')
+
+    def stop(self):
+        self.signal = False
+
+
 class Command(NoArgsCommand):
     args = ""
     help = "Updates locally cached information from a layerindex server"
@@ -55,6 +77,7 @@ class Command(NoArgsCommand):
             Fetches layer, recipe and machine information from a layerindex
             server
         """
+        os.system('setterm -cursor off')
 
         self.apiurl = DEFAULT_LAYERINDEX_SERVER
 
@@ -70,6 +93,9 @@ class Command(NoArgsCommand):
         oe_core_layer = 'openembedded-core'
 
         def _get_json_response(apiurl=DEFAULT_LAYERINDEX_SERVER):
+            http_progress = Spinner()
+            http_progress.start()
+
             _parsedurl = urlparse(apiurl)
             path = _parsedurl.path
 
@@ -79,7 +105,10 @@ class Command(NoArgsCommand):
             except URLError as e:
                 raise Exception("Failed to read %s: %s" % (path, e.reason))
 
-            return json.loads(res.read().decode('utf-8'))
+            parsed = json.loads(res.read().decode('utf-8'))
+
+            http_progress.stop()
+            return parsed
 
         # verify we can get the basic api
         try:
@@ -293,5 +322,7 @@ class Command(NoArgsCommand):
 
             self.mini_progress("recipes", i, total)
 
+        os.system('setterm -cursor on')
+
     def handle_noargs(self, **options):
-            self.update()
+        self.update()

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list