1
--- src/backends.py.orig 2003-08-10 04:17:21.000000000 +0200
2
+++ src/backends.py 2004-09-06 11:16:23.000000000 +0200
5
import os, types, ftplib, tempfile
6
import log, path, dup_temp, file_naming
9
class BackendException(Exception): pass
10
class ParsingException(Exception): pass
13
class ftpBackend(Backend):
14
"""Connect to remote store using File Transfer Protocol"""
15
+ SLEEP = 10 # time in seconds before we try to reconnect on temporary errors
16
def __init__(self, parsed_url):
17
"""Create a new ftp backend object, log in to host"""
18
+ self.parsed_url = parsed_url
19
self.ftp = ftplib.FTP()
20
if parsed_url.port is None: self.error_wrap('connect', parsed_url.host)
21
else: self.error_wrap('connect', parsed_url.host, parsed_url.port)
23
def error_wrap(self, command, *args):
24
"""Run self.ftp.command(*args), but raise BackendException on error"""
25
try: return ftplib.FTP.__dict__[command](self.ftp, *args)
26
+ except ftplib.error_temp, e:
27
+ log.Log("Temporary error '%s'. Trying to reconnect in %d seconds." %
28
+ (str(e), self.SLEEP), 3)
29
+ time.sleep(self.SLEEP)
30
+ self.__init__(self.parsed_url)
31
+ self.error_wrap(command, *args)
32
except ftplib.all_errors, e: raise BackendException(e)
34
def get_password(self):