85
84
os.write(self.tempfile, "user %s %s\n" % (self.parsed_url.username, self.password))
86
85
os.close(self.tempfile)
88
self.flags = "-f %s" % self.tempname
90
def put(self, source_path, remote_filename = None):
91
"""Transfer source_path to remote_filename"""
92
if not remote_filename:
93
remote_filename = source_path.get_filename()
87
def _put(self, source_path, remote_filename):
94
88
remote_path = os.path.join(urllib.unquote(self.parsed_url.path.lstrip('/')), remote_filename).rstrip()
95
89
commandline = "lftp -c 'source %s;put \'%s\' -o \'%s\''" % \
96
90
(self.tempname, source_path.name, remote_path)
97
l = self.run_command_persist(commandline)
91
self.subprocess_popen(commandline)
99
def get(self, remote_filename, local_path):
100
"""Get remote filename, saving it to local_path"""
93
def _get(self, remote_filename, local_path):
101
94
remote_path = os.path.join(urllib.unquote(self.parsed_url.path), remote_filename).rstrip()
102
95
commandline = "lftp -c 'source %s;get %s -o %s'" % \
103
96
(self.tempname, remote_path.lstrip('/'), local_path.name)
104
self.run_command_persist(commandline)
97
self.subprocess_popen(commandline)
108
"""List files in directory"""
109
100
# Do a long listing to avoid connection reset
110
101
remote_dir = urllib.unquote(self.parsed_url.path.lstrip('/')).rstrip()
111
102
commandline = "lftp -c 'source %s;ls \'%s\''" % (self.tempname, remote_dir)
112
l = self.popen_persist(commandline).split('\n')
103
_, l, _ = self.subprocess_popen(commandline)
113
104
# Look for our files as the last element of a long list line
114
return [x.split()[-1] for x in l if x]
105
return [x.split()[-1] for x in l.split('\n') if x]
116
def delete(self, filename_list):
117
"""Delete files in filename_list"""
119
for filename in filename_list:
120
filelist += "\'%s\' " % filename
121
if filelist.rstrip():
122
remote_dir = urllib.unquote(self.parsed_url.path.lstrip('/')).rstrip()
123
commandline = "lftp -c 'source %s;cd \'%s\';rm %s'" % (self.tempname, remote_dir, filelist.rstrip())
124
self.popen_persist(commandline)
107
def _delete(self, filename):
108
remote_dir = urllib.unquote(self.parsed_url.path.lstrip('/')).rstrip()
109
commandline = "lftp -c 'source %s;cd \'%s\';rm \'%s\''" % (self.tempname, remote_dir, filename)
110
self.subprocess_popen(commandline)
126
112
duplicity.backend.register_backend("ftps", FTPSBackend)