Browse Source

upload file or folder via scp and add env.sh to install depend packages

tangs 5 years ago
parent
commit
d32db9c851
8 changed files with 68 additions and 4 deletions
  1. 2 1
      .gitignore
  2. 15 0
      env.sh
  3. 0 0
      test/scp_file_1.txt
  4. 1 0
      test/scp_file_2.txt
  5. 0 0
      test/scp_folder/scp_file_3.txt
  6. 1 0
      test/scp_folder/scp_file_4.txt
  7. 25 2
      upload.py
  8. 24 1
      upload_test.py

+ 2 - 1
.gitignore

@@ -60,4 +60,5 @@ target/
 
 
 .idea
-test
+abc
+abc/*

+ 15 - 0
env.sh

@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+set -e
+
+# install dependent packages
+echo "Start install dependent packages"
+
+pip install redis
+pip install paramiko
+pip scp
+
+pip uninstall -y cryptography
+pip install cryptography==2.4.2
+
+echo "Successfully installed dependent packages"

+ 0 - 0
test/scp_file_1.txt


+ 1 - 0
test/scp_file_2.txt

@@ -0,0 +1 @@
+scp_file_1.txt

+ 0 - 0
test/scp_folder/scp_file_3.txt


+ 1 - 0
test/scp_folder/scp_file_4.txt

@@ -0,0 +1 @@
+scp_file_1.txt

+ 25 - 2
upload.py

@@ -7,6 +7,8 @@ import datetime
 from os import path
 import time
 import shutil
+import paramiko
+import scp
 
 default_max_length = 1000
 
@@ -159,5 +161,26 @@ def listen():
 
 
 class Uploader:
-    def __init__(self):
-        pass
+    def __init__(self, host, port, username, password, local, remote):
+        self.host = host
+        self.port = port
+        self.username = username
+        self.password = password
+        self.local = local
+        self.remote = remote
+
+    def upload(self):
+        try:
+            ssh_client = paramiko.SSHClient()
+            ssh_client.load_system_host_keys()
+            ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+            ssh_client.connect(self.host, self.port, self.username, self.password)
+
+            scp_client = scp.SCPClient(ssh_client.get_transport())
+            scp_client.put(self.local, self.remote, recursive=True)
+            return None
+        except Exception as  e:
+            logging.error('[UPLOAD] upload files with '
+                          'host: %s, port: %d, username: %s, password: %s, local: %s, remote: %s error: %s',
+                          self.host, self.port, self.username, self.password, self.local, self.remote, e)
+            return e

+ 24 - 1
upload_test.py

@@ -8,7 +8,7 @@ import threading
 import time
 
 
-class UploadTest(unittest.TestCase):
+class UploadFileCheckTest(unittest.TestCase):
     def generate_content(self):
         return {
             'dev_ip': 'local.pc',
@@ -46,5 +46,28 @@ class UploadTest(unittest.TestCase):
         time.sleep(4)
 
 
+class UploaderTest(unittest.TestCase):
+    def test_upload(self):
+        host = 'local.pc'
+        port = 22
+        username = 'tangs'
+        password = 'local12456'
+
+        # upload file
+        uploader1 = upload.Uploader(host, port, username, password, 'test/scp_file_1.txt', 'test/scp_file_1.txt')
+        e = uploader1.upload()
+        self.assertIsNone(e)
+
+        # upload file
+        uploader2 = upload.Uploader(host, port, username, password, 'test/scp_file_2.txt', 'test/scp_file_2.txt')
+        e = uploader2.upload()
+        self.assertIsNone(e)
+
+        # upload folder
+        uploader3 = upload.Uploader(host, port, username, password, 'test/scp_folder', 'test/scp_folder')
+        e = uploader3.upload()
+        self.assertIsNone(e)
+
+
 if __name__ == '__main__':
     unittest.main()