3 Commits

4 changed files with 18 additions and 40 deletions

View File

@@ -9,7 +9,7 @@ Usage:
deluge_cli ls [--downloading | --seeding | --paused]
deluge_cli toggle TORRENT
deluge_cli progress
deluge_cli rm NAME [--debug | --warning | --error]
deluge_cli rm NAME [--destroy | --debug | --warning | --error]
deluge_cli (-h | --help)
deluge_cli --version
@@ -24,6 +24,7 @@ Options:
--debug Print all debug log
--warning Print only logged warnings
--error Print error messages (Error/Warning)
--destroy When removing choose to remove file on disk
"""
import argparse
@@ -31,7 +32,6 @@ import os
import sys
import re
import signal
import json
import socket
import logging
import logging.config
@@ -149,9 +149,9 @@ class Deluge(object):
else:
response = self.client.call('core.pause_torrent', [id])
return response
print('Response:', response)
def remove(self, name):
def remove(self, name, destroyFiles=False):
matches = list(filter(lambda t: t.name == name, self.get_all()))
logger.info('Matches for {}: {}'.format(name, matches))
@@ -159,12 +159,11 @@ class Deluge(object):
raise ValueError('Multiple files found matching key. Unable to remove.')
elif (len(matches) == 1):
torrent = matches[0]
response = self.client.call('core.remove_torrent', torrent.key, False)
response = self.client.call('core.remove_torrent', torrent.key, destroyFiles)
logger.info('Response: {}'.format(str(response)))
if (response == False):
raise AttributeError('Unable to remove torrent.')
return response
else:
logger.error('ERROR. No torrent found with that name.')
@@ -241,13 +240,13 @@ def signal_handler(signal, frame):
logger.info('\nGood bye!')
sys.exit(0)
def main(arg=None):
def main():
"""
Main function, parse the input
"""
signal.signal(signal.SIGINT, signal_handler)
arguments = docopt(__doc__, argv=arg, version='1')
arguments = docopt(__doc__, version='1')
# Set logging level for streamHandler
if arguments['--debug']:
@@ -274,45 +273,35 @@ def main(arg=None):
logger.info('Add cmd selected with link {}'.format(magnet))
response = deluge.add(magnet)
print('Add response: ', response)
return response
elif arguments['search']:
logger.info('Search cmd selected for query: {}'.format(query))
response = deluge.search(query)
[ pprint(t.toJSON()) for t in response ]
return response
elif arguments['progress']:
logger.info('Progress cmd selected.')
response = deluge.progress()
print(response)
# [ pprint(t.toJSON()) for t in response ]
return response
pprint(deluge.progress())
exit(0)
[ pprint(t.toJSON()) for t in deluge.progress() ]
elif arguments['get']:
logger.info('Get cmd selected for id: {}'.format(_id))
response = deluge.get(_id)
pprint(response.toJSON())
return response
elif arguments['ls']:
logger.info('List cmd selected')
response = deluge.get_all(_filter=_filter)
response = [t.toJSON() for t in response]
# pprint(response)
return json.dumps(response)
[ pprint(t.toJSON()) for t in deluge.get_all(_filter=_filter) ]
elif arguments['toggle']:
logger.info('Toggling id: {}'.format(_id))
response = deluge.togglePaused(_id)
print('toggle response: ', response)
return response
deluge.togglePaused(_id)
elif arguments['rm']:
logger.info('Remove by name: {}'.format(name))
response = deluge.remove(name)
print('rm response: ', response)
return response
destroy = arguments['--destroy']
logger.info('Remove by name: {}. Destroy files: {}'.format(name, destroy))
deluge.remove(name, destroy)
if __name__ == '__main__':
main()

View File

@@ -2,9 +2,6 @@ import asyncio
import datetime
import random
import websockets
import json
import deluge_cli
async def hello(websocket, path):
name = await websocket.recv()
@@ -22,16 +19,9 @@ async def time(websocket, path):
await asyncio.sleep(1)
async def deluge(websocket, path):
while True:
downloading = deluge_cli.main(['progress'])
await websocket.send(json.dumps(downloading))
await asyncio.sleep(1)
serve_hello = websockets.serve(hello, '0.0.0.0', 8765)
serve_deluge = websockets.serve(deluge, '0.0.0.0', 5678)
serve_time = websockets.serve(time, '0.0.0.0', 5678)
asyncio.get_event_loop().run_until_complete(serve_hello)
asyncio.get_event_loop().run_until_complete(serve_deluge)
asyncio.get_event_loop().run_until_complete(serve_time)
asyncio.get_event_loop().run_forever()

View File

@@ -6,7 +6,6 @@ cryptography==2.3
deluge-client==1.6.0
docopt==0.6.2
idna==2.7
paramiko==2.4.1
pyasn1==0.4.4
pycparser==2.18
PyNaCl==1.2.1

View File

@@ -35,7 +35,7 @@ class ColorizeFilter(logging.Filter):
return True
def convert(data):
if isinstance(data, bytes): return data.decode('ascii')
if isinstance(data, bytes): return data.decode('utf-8')
if isinstance(data, dict): return dict(map(convert, data.items()))
if isinstance(data, tuple): return map(convert, data)
json_data = json.dumps(data)