From 673f641fc9839345b4a761a8c548a40c7f22f96d Mon Sep 17 00:00:00 2001
From: goymann <philipp.goymann@mpi-bn.mpg.de>
Date: Sun, 4 Jun 2023 19:04:02 +0000
Subject: [PATCH] update

---
 loosolab_s3/cmd.py          | 13 +++++++-----
 loosolab_s3/s3_functions.py | 42 ++++++++++++++++---------------------
 2 files changed, 26 insertions(+), 29 deletions(-)

diff --git a/loosolab_s3/cmd.py b/loosolab_s3/cmd.py
index 3a9089e..b168e3d 100644
--- a/loosolab_s3/cmd.py
+++ b/loosolab_s3/cmd.py
@@ -27,11 +27,13 @@ def run_s3_functions():
         s3 = Loosolab_s3(credentials, logger=False)
     else:
         s3 = Loosolab_s3(credentials)
+
+    if args.output:
+        output = args.output
+    else:
+        output = os.getcwd()     
     if args.read_form_dict:
-        
-        bucket_dict = args.read_form_dict
-        
-        
+        bucket_dict = args.read_form_dict  
         bucketname = bucket_dict.split(':')[0]
         files = [bucket_dict.split(':')[1]]
     if args.bucketname:
@@ -61,7 +63,7 @@ def run_s3_functions():
         else:    
             utils.check_argparser(args, ['secret', "key", "files", "bucketname"])
         
-        s3.download_s3_objects( bucketname, files, destination=os.getcwd(), download_bar=True)
+        s3.download_s3_objects( bucketname, files, destination=output, download_bar=True)
 #--------------------------------------------------------------------------------------------------------#
 # parse command line arguments:
 def argparsefunc():
@@ -83,6 +85,7 @@ def argparsefunc():
     parser.add_argument("--files", nargs='+', help="bucket upload files")
     parser.add_argument("--bucketname")
     parser.add_argument("--no_log", action='store_true', help='disable logging')
+    parser.add_argument("--output", help='Download folder')
 
     parser.add_argument('-h', '--help', action='store_true', dest='show_help')
     args = parser.parse_args()
diff --git a/loosolab_s3/s3_functions.py b/loosolab_s3/s3_functions.py
index a5b5332..7ea713b 100644
--- a/loosolab_s3/s3_functions.py
+++ b/loosolab_s3/s3_functions.py
@@ -215,7 +215,7 @@ class Loosolab_s3:
 				local_tag = self.etag_checksum(local_file_name)
 			else:	
 				local_tag = hashlib.md5(open(local_file_name).read().encode('utf-8')).hexdigest()	
-			print('\n')
+			
 			self.logger.info('local e-tag of ' + local_file_name +' is : ' + local_tag)
 			self.logger.info('s3 e-tag of ' + file_name +' is : ' + s3_e_tag)
 
@@ -475,25 +475,11 @@ class Loosolab_s3:
 		timeout : float
 			how long to watch for file in minutes
 		"""
+
+		
 		bucket = self.session.Bucket(bucket_name)
 		modBool = False
 		# check if exists
-		for local_file in file_list:
-			file_name = os.path.basename(local_file)
-			file_path = os.path.join(destination, local_file)
-			if compare:
-				modBool = self.compare_s3_etag(bucket_name, file_name, file_path)
-			if self.check_s3_object_ex(bucket_name, file_name) and not modBool:
-				if not os.path.exists(os.path.dirname(file_path)):
-					os.makedirs(os.path.dirname(file_path))
-					self.logger.info('Created directory: ' + os.path.dirname(file_path))
-				if self.multipart_upload and not download_bar:
-					bucket.download_file(file_name, file_path)
-				elif download_bar:
-					
-					self.download(file_path,bucket_name,  file_name)
-				else:
-					bucket.download_file(file_name, file_path, Config=self.transfer)
 		try:
 			for local_file in file_list:
 				file_name = os.path.basename(local_file)
@@ -501,11 +487,14 @@ class Loosolab_s3:
 				if compare:
 					modBool = self.compare_s3_etag(bucket_name, file_name, file_path)
 				if self.check_s3_object_ex(bucket_name, file_name) and not modBool:
-					if not os.path.exists(file_path):
+					if not os.path.exists(os.path.dirname(file_path)):
 						os.makedirs(os.path.dirname(file_path))
 						self.logger.info('Created directory: ' + os.path.dirname(file_path))
-					if self.multipart_upload:
+					if self.multipart_upload and not download_bar:
 						bucket.download_file(file_name, file_path)
+					elif download_bar:
+						
+						self.download(file_path,bucket_name,  file_name)
 					else:
 						bucket.download_file(file_name, file_path, Config=self.transfer)
 		except Exception as e:
@@ -514,18 +503,23 @@ class Loosolab_s3:
 #--------------------------------------------------------------------------------------------------------#
 
 	def download(self, local_file_name, s3_bucket, s3_object_key):
-
+		
 		meta_data = self.client.head_object(Bucket=s3_bucket, Key=s3_object_key)
-		total_length = int(meta_data.get('ContentLength', 0))
+		total_length = float(meta_data.get('ContentLength', 0))
 		downloaded = 0
-
+		part = total_length / 10
+		count = total_length / 10
 		def progress(chunk):
 			nonlocal downloaded
+			nonlocal part
+			nonlocal count
 			downloaded += chunk
 			
-			done = int(50 * downloaded / total_length)
+			if downloaded > count:
+				print(str(int((100 / total_length ) * count)) + ' % Downloaded!')
+				count += part
 			
-			print("\r[%s%s]" % ('=' * done, ' ' * (50-done)) , end="\r")
+			#print("\r[%s%s]" % ('=' * done, ' ' * (50-done)) , end="\r")
 			#sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)) )
 			#sys.stdout.flush()
 
-- 
GitLab