[gimp-web] tools: added upload progress output to virustotal_uploader.py



commit a77df5974a3f35c8653c761c46758ff1707f10ae
Author: Michael Schumacher <schumaml gmx de>
Date:   Mon Apr 26 22:31:41 2021 +0200

    tools: added upload progress output to virustotal_uploader.py

 tools/downloads/virustotal-upload.py | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)
---
diff --git a/tools/downloads/virustotal-upload.py b/tools/downloads/virustotal-upload.py
index 3ce36f6c..cba69632 100755
--- a/tools/downloads/virustotal-upload.py
+++ b/tools/downloads/virustotal-upload.py
@@ -3,6 +3,7 @@
 import os
 import argparse
 import requests
+from requests_toolbelt import MultipartEncoder, MultipartEncoderMonitor
 
 parser = argparse.ArgumentParser(description='Upload a large file to VirusTotal')
 parser.add_argument('apikey', metavar='<apikey>',
@@ -29,10 +30,28 @@ if response.status_code == 200:
     upload_url = json['data']
 
     files = {'file': open(os.path.abspath(args.file), 'rb')}
-    
+
+    def create_callback(encoder):
+        length = encoder.len
+
+        def upload_callback(monitor):
+            print("Uploaded " + str(monitor.bytes_read) + " of " + str(length) + " bytes - "
+                  + str(round(100*monitor.bytes_read/length, 2)) + "%", end='\r')
+
+        return upload_callback
+
+    encoder = MultipartEncoder(files)
+    callback = create_callback(encoder);
+    monitor = MultipartEncoderMonitor(encoder, callback)
+
     # upload file
     # see https://developers.virustotal.com/v3.0/reference#files-scan
-    response = requests.post(url=upload_url, headers=headers, files=files)
+    try:
+        response = requests.post(url=upload_url, headers=headers, data=monitor)
+    except KeyboardInterrupt:
+        print("");
+        print("Upload interrupted by user.")
+        exit(1);
 
     # response JSON
     # {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]