mirror of
				https://github.com/KevinMidboe/transatlanticTorrentExpress.git
				synced 2025-10-29 18:00:19 +00:00 
			
		
		
		
	Use delugeClient-kevin package instead of exec in os thread
This commit is contained in:
		| @@ -1,8 +1,16 @@ | |||||||
| #!/usr/bin/python3 | #!/usr/bin/python3 | ||||||
| import os, sys | import os, sys | ||||||
|  | import shutil | ||||||
| from subprocess import check_output, Popen, PIPE | from subprocess import check_output, Popen, PIPE | ||||||
|  | from datetime import timedelta | ||||||
|  | from time import time | ||||||
|  |  | ||||||
|  | try: | ||||||
|  |   from delugeClient import Deluge | ||||||
|  | except Exception: | ||||||
|  |   print('Download delugeClient package using: pip3 install delugeClient-kevin') | ||||||
|  |   sys.exit(1) | ||||||
|  |  | ||||||
| # Local files |  | ||||||
| from logger import logger | from logger import logger | ||||||
| from utils import getConfig, readAvgSpeedFromDisk, writeAvgSpeedToDisk | from utils import getConfig, readAvgSpeedFromDisk, writeAvgSpeedToDisk | ||||||
|  |  | ||||||
| @@ -78,15 +86,14 @@ def getFiles(path, host=None, user=None): | |||||||
|     cmd = "ls '{}'".format(path) |     cmd = "ls '{}'".format(path) | ||||||
|  |  | ||||||
|   contents = check_output(cmd, shell=True) |   contents = check_output(cmd, shell=True) | ||||||
|  |   if contents != None: | ||||||
|   if (contents): |  | ||||||
|     contents = contents.decode('utf-8').split('\n') |     contents = contents.decode('utf-8').split('\n') | ||||||
|     contents = list(filter(lambda x: len(x) > 0, contents)) |     contents = list(filter(lambda x: len(x) > 0, contents)) | ||||||
|  |  | ||||||
|   return contents |   return contents | ||||||
|  |  | ||||||
| def filesNotShared(local, remote): | def filesNotShared(remote, local): | ||||||
|   c = set(local) - set(remote) |   c = set(remote) - set(local) | ||||||
|   if c == set(): |   if c == set(): | ||||||
|     return False |     return False | ||||||
|    |    | ||||||
| @@ -96,15 +103,14 @@ def transferFiles(files, localPath, remotePath, host=None, user=None): | |||||||
|   transferedFiles = [] |   transferedFiles = [] | ||||||
|  |  | ||||||
|   for file in files: |   for file in files: | ||||||
|     if file in getFiles(remotePath, host, user): |     if file in getFiles(localPath): | ||||||
|       logger.info('File already exists at remote path. Skipping.') |       logger.info('File already exists at remote path. Skipping.') | ||||||
|       continue |       continue | ||||||
|     logger.info('Moving file: {}'.format(file), es={'filename': file}) |  | ||||||
|  |  | ||||||
|     file = os.path.join(localPath, file) |     file = os.path.join(localPath, file) | ||||||
|  |  | ||||||
|     if (host and user): |     if host and user: | ||||||
|       cmd = "rsync -rz '{}' {}@{}:{}".format(file, user, host, remotePath) |       cmd = "rsync -rz {}@{}:'{}' '{}'".format(user, host, spaceEscapedFile, localPath) | ||||||
|     else: |     else: | ||||||
|       cmd = "rsync -rz '{}' {}".format(file, remotePath) |       cmd = "rsync -rz '{}' {}".format(file, remotePath) | ||||||
|  |  | ||||||
| @@ -114,28 +120,26 @@ def transferFiles(files, localPath, remotePath, host=None, user=None): | |||||||
|     if stderr: |     if stderr: | ||||||
|       logger.error('Rsync error: {}'.format(stderr)) |       logger.error('Rsync error: {}'.format(stderr)) | ||||||
|  |  | ||||||
|     logger.debug('Rsync output: {}'.format(stdout)) |  | ||||||
|     transferedFiles.append(file) |     transferedFiles.append(file) | ||||||
|  |  | ||||||
|   return transferedFiles |   return transferedFiles | ||||||
|  |  | ||||||
| def removeFromDeluge(execScript, files): | def removeFromDeluge(files): | ||||||
|   execPython = '/usr/bin/python2' |   deluge = Deluge() | ||||||
|  |  | ||||||
|   for file in files: |   for file in files: | ||||||
|     file = file.split('/')[-1] |     file = file.split('/')[-1] | ||||||
|  |  | ||||||
|     logger.info('Removing {} from deluge'.format(file), es={"filename": file}) |     logger.info('Removing {} from deluge'.format(file), es={"filename": file}) | ||||||
|     cmd = "{} {} rm '{}'".format(execPython, execScript, file) |     try: | ||||||
|  |       response = deluge.removeByName(file, True) | ||||||
|  |       if response == None: | ||||||
|  |         raise Exception('No torrent with that name found') | ||||||
|  |  | ||||||
|     delugeProcess = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True) |       logger.info('Successfully removed: {}'.format(file), es={'filename': file}) | ||||||
|     stdout, stderr = delugeProcess.communicate() |  | ||||||
|  |  | ||||||
|     if stderr: |     except Exception as err: | ||||||
|       logger.error('Deluge error: {}'.format(stderr)) |       logger.error('Deluge error: {}'.format(err), es={'filename': file}) | ||||||
|  |  | ||||||
|     logger.debug('Deluge output: {}'.format(stdout)) |  | ||||||
|     logger.info('Successfully removed: {}'.format(file), es={'filename': file}) |  | ||||||
|  |  | ||||||
| def main(): | def main(): | ||||||
|   config = getConfig() |   config = getConfig() | ||||||
| @@ -143,34 +147,29 @@ def main(): | |||||||
|   user = config['SSH']['user'] |   user = config['SSH']['user'] | ||||||
|   remotePath = config['FILES']['remote'] |   remotePath = config['FILES']['remote'] | ||||||
|   localPath = config['FILES']['local'] |   localPath = config['FILES']['local'] | ||||||
|   delugeScript = config['DELUGE']['script'] |  | ||||||
|  |  | ||||||
|   remoteFiles = getFiles(remotePath, host, user) |   remoteFiles = getFiles(remotePath, host, user) | ||||||
|   if len(remoteFiles) > 0: |   if len(remoteFiles) > 0: | ||||||
|     logger.info('Remote files found: {}'.format(remoteFiles), es={'files': remoteFiles}) |     logger.info('Remote files found: {}'.format(remoteFiles), es={'files': remoteFiles}) | ||||||
|   else: |   else: | ||||||
|     logger.info('No remote files found') |     logger.info('No remote files found') | ||||||
|   # print('Remote found: {}'.format(remoteFiles)) |  | ||||||
|    |    | ||||||
|   localFiles = getFiles(localPath) |   localFiles = getFiles(localPath) | ||||||
|   # print('Local files: {}'.format(localFiles)) |  | ||||||
|   if len(localFiles) > 0: |   if len(localFiles) > 0: | ||||||
|     logger.info('Local files found: {}'.format(localFiles), es={'files': localFiles}) |     logger.info('Local files found: {}'.format(localFiles), es={'files': localFiles}) | ||||||
|   else: |   else: | ||||||
|     logger.info('No local files found') |     logger.info('No local files found') | ||||||
|  |  | ||||||
|   newFiles = filesNotShared(localFiles, remoteFiles) |   newFiles = filesNotShared(remoteFiles, localFiles) | ||||||
|   if (newFiles): |   if newFiles: | ||||||
|     logger.info('New files: {}'.format(newFiles), es={'files': newFiles}) |     logger.info('New files: {}'.format(newFiles), es={'files': newFiles}) | ||||||
|     exisitingFiles = list(set(remoteFiles).intersection(localFiles)) |     exisitingFiles = list(set(remoteFiles).intersection(localFiles)) | ||||||
|     logger.info('Existing files: {}'.format(exisitingFiles), es={'files': exisitingFiles}) |     logger.info('Existing files: {}'.format(exisitingFiles), es={'files': exisitingFiles}) | ||||||
|  |  | ||||||
|     transferedFiles = transferFiles(newFiles, localPath, remotePath, host, user) |     transferedFiles = transferFiles(newFiles, localPath, remotePath, host, user) | ||||||
|     removeFromDeluge(delugeScript, transferedFiles) |     removeFromDeluge(transferedFiles) | ||||||
|  |  | ||||||
|  |  | ||||||
|   else: |   else: | ||||||
|     # print('No new files found to travel on the great transatlantic express') |  | ||||||
|     logger.info('No new files found to travel on the great transatlantic express') |     logger.info('No new files found to travel on the great transatlantic express') | ||||||
|  |  | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user