Skip to content
Snippets Groups Projects
Commit f1036883 authored by Mads M. Pedersen's avatar Mads M. Pedersen
Browse files

added ftp_file

parent 0fe81d25
No related branches found
No related tags found
No related merge requests found
'''
Created on 30/04/2013
@author: Mads M. Pedersen (mmpe@dtu.dk)
'''
from ftplib import FTP
from zipfile import ZipFile
import io
import getpass
class FtpFile():
def __init__(self, url, username, password):
if url.lower().startswith('ftp://'):
url = url[6:]
self.url = url
self.domain = url.split('/')[0]
self.path = '/'.join(url.split('/')[1:])
self.username = username
if password is None:
passwrod = getpass.getpass("Enter password for ftp server")
self.password = password
def load(self, open_file=None):
ftp = FTP(self.domain)
try:
ftp.login(self.username, self.password)
if open_file is None:
open_file = self
ftp.retrbinary('RETR /%s' % self.path, open_file.write)
finally:
ftp.close()
open_file.seek(0)
def write(self, obj):
raise NotImplementedError
def __str__(self):
return "%s(url='%s', username='%s', password=None)" % (self.__class__.__name__, self.url, self.username)
def name(self):
return self.path.split('/')[-1]
def filename(self):
return self.path
class FtpTxtFile(io.StringIO, FtpFile):
def __init__(self, url, username, password):
FtpFile.__init__(self, url, username, password)
io.StringIO.__init__(self)
self.load()
def write(self, s):
if isinstance(s, bytes):
s = s.decode('cp1251')
io.StringIO.write(self, s)
class FtpZipFile(ZipFile, FtpFile):
def __init__(self, url, username, password):
FtpFile.__init__(self, url, username, password)
byteIO = io.BytesIO()
self.load(byteIO)
ZipFile.__init__(self, byteIO)
def FtpZipTxtFile(self, txt_filename):
return FtpZipTxtFile(self.url, self.username, self.password, txt_filename)
class FtpZipTxtFile(io.StringIO, FtpZipFile):
def __init__(self, url, username, password, filename):
FtpZipFile.__init__(self, url, username, password)
io.StringIO.__init__(self, buf='')
fid = self.open(filename)
self.buf = fid.read()
if self.buf[-1] != "\n":
self.buf += "\n"
fid.close()
self.filename = filename
def __str__(self):
return "%s(url='%s', username='%s', password=None, filename='%s')" % (self.__class__.__name__, self.url, self.username, self.filename)
class FtpBinaryFile(io.BytesIO, FtpFile):
def __init__(self, url, username, password):
FtpFile.__init__(self, url, username, password)
self.load()
def __str__(self):
return FtpFile.__str__(self)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment