From fd6ab90e00e056de5017f972452fa5708b47eeab Mon Sep 17 00:00:00 2001 From: Matthias Rieber Date: Wed, 20 Jan 2016 18:35:38 +0100 Subject: [PATCH 1/2] catch ugly exception when script is interrupted --- uploadr.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/uploadr.py b/uploadr.py index 9719c0c..0c5fafe 100755 --- a/uploadr.py +++ b/uploadr.py @@ -93,5 +93,8 @@ def short(self, url): password = args.password xmpp = Uploadr(jid, password, args.filename, args.short) - xmpp.connect() - xmpp.process(block=True) + try: + xmpp.connect() + xmpp.process(block=True) + except KeyboardInterrupt: + pass From aec14e8378777f192b1154befc6bfeafd3fe4337 Mon Sep 17 00:00:00 2001 From: Matthias Rieber Date: Wed, 20 Jan 2016 18:36:18 +0100 Subject: [PATCH 2/2] stdin support --- uploadr.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/uploadr.py b/uploadr.py index 0c5fafe..423accf 100755 --- a/uploadr.py +++ b/uploadr.py @@ -6,6 +6,7 @@ import logging import requests import argparse +import tempfile from sleekxmpp import ClientXMPP from sleekxmpp.exceptions import IqError, IqTimeout, XMPPError @@ -24,6 +25,14 @@ def __init__(self, jid, password, filename, shorten_url): self.filename = filename self.shorten_url = shorten_url + def process_txt_stdin(self): + data = sys.stdin.read(20*1024*1024) + try: + data.decode("UTF-8") + except: + return False + return data + def session_start(self, event): self.send_presence() @@ -32,7 +41,18 @@ def session_start(self, event): # Upload File try: - get_url = self['xep_0363'].upload_file(self.filename) + if self.filename == '-': + text = self.process_txt_stdin() + if not text: + print "I don't upload binary data from STDIN!" + self.disconnect() + return + fh = tempfile.NamedTemporaryFile(suffix='.txt', prefix='uploadr-') + fh.write(text) + fh.flush() + get_url = self['xep_0363'].upload_file(fh.name) + else: + get_url = self['xep_0363'].upload_file(self.filename) if self.shorten_url: print self.short(get_url) else: @@ -84,7 +104,7 @@ def short(self, url): parser.add_argument("-j", "--jid", help="JID", required=not(jid)) parser.add_argument("-p", "--password", help="Password", required=not(password)) parser.add_argument("-s", "--short", help="Use https://yerl.org to shorten URL", action="store_true", required=False, ) - parser.add_argument("filename", help="File to upload") + parser.add_argument("filename", nargs='?', default='-', help="File to upload") args = parser.parse_args() if args.jid: