summaryrefslogtreecommitdiffstats
path: root/utils/log_picker/sending/ftpsender.py
diff options
context:
space:
mode:
Diffstat (limited to 'utils/log_picker/sending/ftpsender.py')
-rw-r--r--utils/log_picker/sending/ftpsender.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/utils/log_picker/sending/ftpsender.py b/utils/log_picker/sending/ftpsender.py
new file mode 100644
index 000000000..92f7184cb
--- /dev/null
+++ b/utils/log_picker/sending/ftpsender.py
@@ -0,0 +1,47 @@
+import os
+import urlparse
+import ftplib
+from log_picker.sending.senderbaseclass import SenderBaseClass
+from log_picker.sending.senderbaseclass import SenderError
+
+# This class uses code from module report.plugins.scp
+
+class FtpSender(SenderBaseClass):
+
+ def __init__(self, *args, **kwargs):
+ SenderBaseClass.__init__(self, args, kwargs)
+ self.host = None
+ self.username = None
+ self.password = None
+
+ def set_host(self, host):
+ if not host.startswith('ftp://'):
+ host = 'ftp://' + host
+ self.host = host
+
+ def set_login(self, username, password):
+ self.username = username
+ self.password = password
+
+ def sendfile(self, filename, contenttype):
+ _, netloc, path, _, _, _ = urlparse.urlparse(self.host)
+ if netloc.find(':') > 0:
+ netloc, port = netloc.split(':')
+ else:
+ port = 21
+
+ try:
+ ftp = ftplib.FTP()
+ ftp.connect(netloc, port)
+ if self.username:
+ ftp.login(self.username, self.password)
+ else:
+ ftp.login()
+ ftp.cwd(path)
+ ftp.set_pasv(True)
+ ftp.storbinary('STOR %s' % os.path.basename(filename), \
+ file(filename))
+ ftp.quit()
+ except ftplib.all_errors, e:
+ raise SenderError("FTP upload failed: %(error)s" % {'error':e})
+