From bb11795e21135a94993bf75dc9ff0b8e4e4afd01 Mon Sep 17 00:00:00 2001
From: "Mads M. Pedersen" <mmpe@dtu.dk>
Date: Fri, 10 Feb 2017 14:37:48 +0100
Subject: [PATCH] removed ref to threadnames.py and added missing ui files

---
 wetb/utils/cluster_tools/ssh_client.py |  17 +--
 wetb/utils/text_ui.py                  | 146 +++++++++++++++++++++++++
 wetb/utils/ui.py                       |  67 ++++++++++++
 3 files changed, 215 insertions(+), 15 deletions(-)
 create mode 100644 wetb/utils/text_ui.py
 create mode 100644 wetb/utils/ui.py

diff --git a/wetb/utils/cluster_tools/ssh_client.py b/wetb/utils/cluster_tools/ssh_client.py
index 5f27593..74ebd6b 100644
--- a/wetb/utils/cluster_tools/ssh_client.py
+++ b/wetb/utils/cluster_tools/ssh_client.py
@@ -13,12 +13,10 @@ from _collections import deque
 import time
 import traceback
 import zipfile
-from wetb.utils.timing import print_time
 import glob
-import getpass
 from sshtunnel import SSHTunnelForwarder, SSH_CONFIG_FILE
 from wetb.utils.ui import UI
-from wetb.utils import threadnames
+
 
 
 
@@ -138,9 +136,6 @@ class SSHClient(object):
             return self.client
 
     def connect(self):
-        
-        print ("connect", self.host, threadnames.name())
-        #print (traceback.print_stack())
         if self.gateway:
             if self.gateway.interactive_auth_handler:
                 self.tunnel = SSHInteractiveAuthTunnelForwarder(self.gateway.interactive_auth_handler,
@@ -215,9 +210,7 @@ class SSHClient(object):
                 print ("Retry download %s, #%d"%(remotefilepath, i))
 
             try:
-                #print ("start download enter", threadnames.name())
                 SSHClient.__enter__(self)
-                #print ("start download", threadnames.name())
                 if isinstance(localfile, (str, bytes, int)):
                     ret = self.sftp.get(remotefilepath, localfile, callback=callback)
                 elif hasattr(localfile, 'write'):
@@ -226,10 +219,8 @@ class SSHClient(object):
             except:
                 pass
             finally:
-                #print ("End download", threadnames.name())
                 SSHClient.__exit__(self)
-                #print ("End download exit", threadnames.name())
-            
+                
             print ("Download %s failed from %s"%(remotefilepath, self.host))
         if verbose:
             print (ret)
@@ -248,9 +239,7 @@ class SSHClient(object):
                 localfile.seek(0)
                 ret = self.sftp.putfo(localfile, filepath, file_size=size, callback=callback)
         finally:
-            #print ("End upload", threadnames.name())
             SSHClient.__exit__(self)
-            #print ("End upload exit", threadnames.name())
         if verbose:
             print (ret)
             
@@ -414,9 +403,7 @@ class SharedSSHClient(SSHClient):
             self.shared_ssh_queue.append(threading.get_ident())
             
         while self.shared_ssh_queue[0] != threading.get_ident():
-            #print ("Waiting for ssh", threadnames.name(), [threadnames.name(id) for id in self.shared_ssh_queue])
             time.sleep(2)
-        #print ("Got SSH", threadnames.name())
         
         return self.client
 
diff --git a/wetb/utils/text_ui.py b/wetb/utils/text_ui.py
new file mode 100644
index 0000000..2b96c13
--- /dev/null
+++ b/wetb/utils/text_ui.py
@@ -0,0 +1,146 @@
+
+import sys
+import time
+
+from wetb.utils.ui import OutputUI, InputUI, StatusUI
+
+
+class TextOutputUI(OutputUI):
+    last_text = ""
+    
+    def __init__(self, parent=None):
+        OutputUI.__init__(self, parent=parent)
+        self.errors = sys.stdout.errors
+        self.encoding = sys.stdout.encoding
+        sys.stdout = self
+        sys.stderr = self
+        
+        
+        
+    def show_message(self, msg, title="Information"):
+        #self.last_text = msg
+        if title != "":
+            print ("\n\n%s\n%s\n%s\n" % (title, "-"*len(title), msg))
+        else:
+            print (msg)
+
+    def show_warning(self, msg, title="Warning"):
+        #self.last_text = msg
+        print ("%s\n%s\n%s" % (title, "-"*len(title), msg))
+
+    def show_text(self, text, end="\n", flush=False):
+        #self.last_text = text
+        #print (text, end=end)
+        self.write(text+end)
+        if flush:
+            sys.stdout.flush()
+            
+    def flush(self):
+        sys.__stdout__.flush()
+            
+    def write(self, txt):
+        if txt.strip()!="":
+            self.last_text = txt
+        sys.__stdout__.write(txt)
+        
+
+class TextInputUI(InputUI):
+    def get_confirmation(self, title, msg):
+        raise NotImplementedError
+
+    def get_string(self, title, msg):
+        raise NotImplementedError
+
+    def get_open_filename(self, title="Open", filetype_filter="*.*", file_dir=None, selected_filter=None):
+        raise NotImplementedError
+    def get_save_filename(self, title, filetype_filter, file_dir=None, selected_filter=None):
+        raise NotImplementedError
+
+
+    def get_open_filenames(self, title, filetype_filter, file_dir=None):
+        raise NotImplementedError
+
+    def get_foldername(self, title='Select directory', file_dir=None):
+        raise NotImplementedError
+
+
+
+class TextStatusUI(StatusUI, TextOutputUI):
+    
+
+    def progress_iterator(self, sequence, text="Working... Please wait", allow_cancel=True, always_refresh=False):
+        global pct
+        it = iter(list(sequence))
+        if it.__length_hint__() > 0:
+            def init():
+                global pct
+                self.show_text("\n\n|0" + " " * 46 + "50%" + " " * 46 + "100%|")
+                pct = 0
+                self.show_text("|", end="")
+
+            self.show_text(text, flush=True)
+            #sys.__stdout__.flush()
+            N = it.__length_hint__()
+            init()
+            for n, v in enumerate(it):
+                #if n % 100 == 99:
+                #    self.show_text("")
+                if (self.last_text != "." and n > 0) or (always_refresh and ((n + 1) / N * 100 > pct)):
+                    init()
+                while ((n + 1) / N * 100 > pct):
+                    self.show_text(".", end="", flush=True)
+                    pct += 1
+                yield(v)
+            self.show_text("|")
+
+
+    def exec_long_task(self, text, allow_cancel, task, *args, **kwargs):
+        print (text)
+        return task(*args, **kwargs)
+
+    def start_wait(self):
+        #print ("Working please wait")
+        pass
+
+    def end_wait(self):
+        #print ("finish")
+        pass
+
+
+    def progress_callback(self, text="Working... Please wait", always_refresh=False):
+        class ProgressCallBack():
+            
+            def __init__(self, ui, text, always_refresh=False):
+                self.ui = ui
+                self.text = text
+                self.always_refresh = always_refresh
+                self.pct = None
+            
+            def init(self):
+                self.ui.show_text("\n\n" + self.text, flush=True)
+                self.ui.show_text("|0" + " " * 46 + "50%" + " " * 46 + "100%|")
+                self.pct = 0
+                self.ui.show_text("|", end="")
+                
+            def __call__(self, n, N):
+                if (self.pct is None) or (self.ui.last_text != "." and self.pct > 0) or (self.always_refresh and ((n + 1) / N * 100 > self.pct)):
+                    self.init()
+                while ((n + 1) / N * 100 > (self.pct+1)):
+                    self.ui.show_text(".", end="", flush=True)
+                    self.pct += 1
+                if self.pct==100:
+                    self.ui.show_text("|")
+        return ProgressCallBack(self, text, always_refresh)
+                
+class TextUI(TextInputUI, TextStatusUI):
+    pass
+
+
+if __name__ == "__main__":
+    def task(callback):
+        for i in range(100):
+            callback(i,100)
+            time.sleep(0.05)
+            
+    task (TextStatusUI().progress_callback())
+        
\ No newline at end of file
diff --git a/wetb/utils/ui.py b/wetb/utils/ui.py
new file mode 100644
index 0000000..57ca4dc
--- /dev/null
+++ b/wetb/utils/ui.py
@@ -0,0 +1,67 @@
+
+
+class OutputUI(object):
+    def __init__(self, parent=None):
+        self.parent = parent
+
+    def run(self, f, *args, **kwargs):
+        try:
+            return f(*args, **kwargs)
+        except Warning as e:
+            self.show_warning(e)
+        except Exception as e:
+            self.show_error(e)
+            raise
+
+    def show_error(self, msg, title="Error"):
+        pass
+
+    def show_message(self, msg, title="Information"):
+        pass
+
+    def show_warning(self, msg, title="Warning"):
+        pass
+
+    def show_text(self, text, end="\n", flush=False):
+        pass
+
+class InputUI(object):
+    def get_confirmation(self, title, msg):
+        raise NotImplementedError
+
+    def get_string(self, title, msg):
+        raise NotImplementedError
+
+    def get_open_filename(self, title="Open", filetype_filter="*.*", file_dir=None, selected_filter=None):
+        raise NotImplementedError
+
+    def get_save_filename(self, title, filetype_filter, file_dir=None, selected_filter=None):
+        raise NotImplementedError
+
+    def get_open_filenames(self, title, filetype_filter, file_dir=None):
+        raise NotImplementedError
+
+    def get_foldername(self, title='Select directory', file_dir=None):
+        raise NotImplementedError
+
+class StatusUI(object):
+    is_waiting = False
+    def progress_iterator(self, sequence, text="Working... Please wait", allow_cancel=True):
+        return sequence
+
+    def exec_long_task(self, text, allow_cancel, task, *args, **kwargs):
+        return task(*args, **kwargs)
+
+    def progress_callback(self):
+        def callback(n,N):
+            pass 
+        return callback
+
+    def start_wait(self):
+        self.is_waiting = True
+
+    def end_wait(self):
+        self.is_waiting = False
+
+class UI(InputUI, OutputUI, StatusUI):
+    pass
-- 
GitLab