# -*- coding: utf-8 -*- import ftplib #фукнция получения папок и внесения файлов в общий список(файл) class FTPList: def __init__(self, dbase): #starting initialization self.dbase = dbase self.file = None def scan(self, host, port = 21, login = "anonymous", password = "test@test.com", koren = "/"): #main function self.host = host self.koren = koren self.login = login self.password = password try: #test for connection to server self.ftp = ftplib.FTP() self.ftp.connect(host, port) self.ftp.login(login, password) self.getlist(self.koren) except ftplib.all_errors, msg: print "Error %s :%s" % (host,port) print "Error %s: %s %s" % (msg[0], login, password) def getfolders(self, koren): #get names of folders dirs = [] file_list = [] try: self.ftp.dir(koren,file_list.append) #полуаем список файлов и папок except: # в случае если доступ к папке запрещен возвращаем пустой массив return dirs for line in file_list: if line.split(" ")[-1] not in (".",".."): #отсеиваем . и .. temp = line.split(" ") #парсим полученое temp = filter(lambda x: x != "", temp) if line.startswith("d"): #если папка, то добавить в dirs dirs.append((" ".join(temp[8:]))) path = koren + "/" + "".join(temp[8:]) + "/" date = " ".join(temp[5:8]) wraccess = self.testwr( path ) self.SaveList(path, "", wraccess, date) #write path ro file and date creation else: path = koren + "/" name = " ".join(temp[8:]) date = " ".join(temp[5:8]) wraccess = self.testwr( path ) self.SaveList(path, name, wraccess, date) return dirs #рекурсивная функция вызывающаю getfolders n раз ) def getlist(self, dirs): folders = self.getfolders(dirs) #получаем список папок for f in folders: #бродим по списку рекурсивно if dirs.startswith("//"): dirs = dirs[1:] self.getlist(dirs + "/" + f) def testwr(self, path): try: self.ftp.mkd( path + "test" ) self.ftp.rmd( path + "test" ) return 1 except: return 0 def closeall(self): self.ftp.quit() #сохранение в файл def SaveList(self, path, name, writables, crdt): #save record to db self.dbase.saveFile(path,name,writable,crdt)