##// END OF EJS Templates
jroutils_ftp.py: Remote Server is opened and closed each time a file is sent
Miguel Valdez -
r653:ae332cfe81c4
parent child
Show More
@@ -1,7 +1,8
1 VERSIONS:
1 VERSIONS:
2
2
3 2.1.2:
3 2.1.2:
4 -jroutils_ftp.py: Server thread stops when an error sending file has been detected
4 -jroutils_ftp.py: Bug fixed, Any error sending file stopped the Server Thread
5 Server thread opens and closes remote server each time file list is sent
5 -jroplot_spectra.py: Noise path was not being created saving noise data.
6 -jroplot_spectra.py: Noise path was not being created saving noise data.
6 -jroIO_base.py: startTime can be greater than endTime
7 -jroIO_base.py: startTime can be greater than endTime
7 -jroplot_heispectra.py: SpectraHeisScope was not showing the right channel
8 -jroplot_heispectra.py: SpectraHeisScope was not showing the right channel
@@ -54,16 +54,24 class Remote(Thread):
54
54
55 self.status = 0
55 self.status = 0
56
56
57 self.__server = server
58 self.__username = username
59 self.__password = password
60 self.__remotefolder = remotefolder
61
57 self.period = period
62 self.period = period
63
58 self.fileList = []
64 self.fileList = []
59 self.bussy = False
65 self.bussy = False
60
66
61 self.stopFlag = False
67 self.stopFlag = False
62
68
63 print "[Remote Server] Opening server: %s" %server
69 print "[Remote Server] Opening server: %s" %self.__server
64 if self.open(server, username, password, remotefolder):
70 if self.open(self.__server, self.__username, self.__password, self.__remotefolder):
65 print "[Remote Server] %s server was opened successfully" %server
71 print "[Remote Server] %s server was opened successfully" %self.__server
66
72
73 self.close()
74
67 self.mutex = threading.Lock()
75 self.mutex = threading.Lock()
68
76
69 def stop(self):
77 def stop(self):
@@ -193,9 +201,16 class Remote(Thread):
193 # self.bussy = True
201 # self.bussy = True
194 self.mutex.acquire()
202 self.mutex.acquire()
195
203
204 print "[Remote Server] Opening %s" %self.__server
205 if not self.open(self.__server, self.__username, self.__password, self.__remotefolder):
206 return 0
207
196 for thisFile in self.fileList:
208 for thisFile in self.fileList:
197 self.upload(thisFile, self.remotefolder)
209 self.upload(thisFile, self.remotefolder)
198
210
211 print "[Remote Server] Closing %s" %self.__server
212 self.close()
213
199 self.mutex.release()
214 self.mutex.release()
200 # self.bussy = False
215 # self.bussy = False
201
216
@@ -224,7 +239,8 class FTPClient(Remote):
224
239
225 remotefolder - remote server current working directory
240 remotefolder - remote server current working directory
226
241
227 Return: void
242 Return:
243 Boolean - Returns 1 if a connection has been established, 0 otherwise
228
244
229 Affects:
245 Affects:
230 self.status - in case of error or fail connection this parameter is set to 0 else 1
246 self.status - in case of error or fail connection this parameter is set to 0 else 1
@@ -245,15 +261,16 class FTPClient(Remote):
245
261
246 try:
262 try:
247 ftpClientObj = ftplib.FTP(server)
263 ftpClientObj = ftplib.FTP(server)
248 except ftplib.all_errors:
264 except ftplib.all_errors, e:
249 print "FTP server connection fail: %s" %server
265 print "[FTP Server]: FTP server connection fail: %s" %server
266 print "[FTP Server]:", e
250 self.status = 0
267 self.status = 0
251 return 0
268 return 0
252
269
253 try:
270 try:
254 ftpClientObj.login(username, password)
271 ftpClientObj.login(username, password)
255 except ftplib.all_errors:
272 except ftplib.all_errors:
256 print "FTP username or password are incorrect"
273 print "[FTP Server]: FTP username or password are incorrect"
257 self.status = 0
274 self.status = 0
258 return 0
275 return 0
259
276
@@ -263,7 +280,7 class FTPClient(Remote):
263 try:
280 try:
264 ftpClientObj.cwd(remotefolder)
281 ftpClientObj.cwd(remotefolder)
265 except ftplib.all_errors:
282 except ftplib.all_errors:
266 print "FTP remote folder is invalid: %s" %remotefolder
283 print "[FTP Server]: FTP remote folder is invalid: %s" %remotefolder
267 remotefolder = ftpClientObj.pwd()
284 remotefolder = ftpClientObj.pwd()
268
285
269 self.server = server
286 self.server = server
@@ -300,7 +317,7 class FTPClient(Remote):
300 try:
317 try:
301 self.__ftpClientObj.mkd(dirname)
318 self.__ftpClientObj.mkd(dirname)
302 except ftplib.all_errors:
319 except ftplib.all_errors:
303 print "Error creating remote folder: %s" %remotefolder
320 print "[FTP Server]: Error creating remote folder: %s" %remotefolder
304 return 0
321 return 0
305
322
306 return 1
323 return 1
@@ -327,11 +344,11 class FTPClient(Remote):
327 try:
344 try:
328 self.__ftpClientObj.cwd(remotefolder)
345 self.__ftpClientObj.cwd(remotefolder)
329 except ftplib.all_errors:
346 except ftplib.all_errors:
330 print 'Error changing to %s' %remotefolder
347 print '[FTP Server]: Error changing to %s' %remotefolder
331 print 'Trying to create remote folder'
348 print '[FTP Server]: Trying to create remote folder'
332
349
333 if not self.mkdir(remotefolder):
350 if not self.mkdir(remotefolder):
334 print 'Remote folder could not be created'
351 print '[FTP Server]: Remote folder could not be created'
335 return 0
352 return 0
336
353
337 try:
354 try:
@@ -348,23 +365,24 class FTPClient(Remote):
348 if not self.status:
365 if not self.status:
349 return 0
366 return 0
350
367
351 file = open(fullfilename, 'rb')
368 fp = open(fullfilename, 'rb')
352
369
353 filename = os.path.basename(fullfilename)
370 filename = os.path.basename(fullfilename)
354
371
355 command = "STOR %s" %filename
372 command = "STOR %s" %filename
356
373
357 try:
374 try:
358 self.__ftpClientObj.storbinary(command, file)
375 self.__ftpClientObj.storbinary(command, fp)
359 except ftplib.all_errors:
376 except ftplib.all_errors, e:
377 print "[FTP Server]:", e
360 return 0
378 return 0
361
379
362 try:
380 try:
363 self.__ftpClientObj.sendcmd('SITE CHMOD 755 ' + filename)
381 self.__ftpClientObj.sendcmd('SITE CHMOD 755 ' + filename)
364 except ftplib.all_errors, e:
382 except ftplib.all_errors, e:
365 print e
383 print "[FTP Server]:", e
366
384
367 file.close()
385 fp.close()
368
386
369 return 1
387 return 1
370
388
@@ -398,7 +416,8 class SSHClient(Remote):
398 self.status - in case of error or fail connection this parameter is set to 0 else 1
416 self.status - in case of error or fail connection this parameter is set to 0 else 1
399
417
400 """
418 """
401
419 import socket
420
402 if server == None:
421 if server == None:
403 raise ValueError, "SSH server should be defined"
422 raise ValueError, "SSH server should be defined"
404
423
@@ -411,23 +430,27 class SSHClient(Remote):
411 if remotefolder == None:
430 if remotefolder == None:
412 raise ValueError, "SSH remote folder should be defined"
431 raise ValueError, "SSH remote folder should be defined"
413
432
414 try:
433 sshClientObj = paramiko.SSHClient()
415 sshClientObj = paramiko.SSHClient()
416 except:
417 print "SSH server connection fail: %s" %server
418 self.status = 0
419 return 0
420
434
421 sshClientObj.load_system_host_keys()
435 sshClientObj.load_system_host_keys()
422 sshClientObj.set_missing_host_key_policy(paramiko.WarningPolicy())
436 sshClientObj.set_missing_host_key_policy(paramiko.WarningPolicy())
423
437
438 self.status = 0
424 try:
439 try:
425 sshClientObj.connect(server, username=username, password=password, port=port)
440 sshClientObj.connect(server, username=username, password=password, port=port)
426 except :
441 except paramiko.AuthenticationException, e:
427 print "SSH username or password are incorrect: %s"
442 # print "SSH username or password are incorrect: %s"
443 print "[SSH Server]:", e
444 return 0
445 except SSHException, e:
446 print "[SSH Server]:", e
447 return 0
448 except socket.error:
428 self.status = 0
449 self.status = 0
450 print "[SSH Server]:", e
429 return 0
451 return 0
430
452
453 self.status = 1
431 scpClientObj = scp.SCPClient(sshClientObj.get_transport(), socket_timeout=30)
454 scpClientObj = scp.SCPClient(sshClientObj.get_transport(), socket_timeout=30)
432
455
433 if remotefolder == None:
456 if remotefolder == None:
@@ -441,7 +464,7 class SSHClient(Remote):
441 self.status = 1
464 self.status = 1
442
465
443 if not self.cd(remotefolder):
466 if not self.cd(remotefolder):
444 raise ValueError, "Could not access to remote folder: %s" %remotefolder
467 raise ValueError, "[SSH Server]: Could not access to remote folder: %s" %remotefolder
445 return 0
468 return 0
446
469
447 self.remotefolder = remotefolder
470 self.remotefolder = remotefolder
@@ -455,7 +478,8 class SSHClient(Remote):
455 if not self.status:
478 if not self.status:
456 return 0
479 return 0
457
480
458 self.__sshObj.close()
481 self.__scpClientObj.close()
482 self.__sshClientObj.close()
459
483
460 def __execute(self, command):
484 def __execute(self, command):
461 """
485 """
@@ -541,7 +565,8 class SSHClient(Remote):
541
565
542 try:
566 try:
543 self.__scpClientObj.put(fullfilename, remote_path=self.remotefolder)
567 self.__scpClientObj.put(fullfilename, remote_path=self.remotefolder)
544 except:
568 except scp.ScpError, e:
569 print "[SSH Server]", str(e)
545 return 0
570 return 0
546
571
547 remotefile = os.path.join(self.remotefolder, os.path.split(fullfilename)[-1])
572 remotefile = os.path.join(self.remotefolder, os.path.split(fullfilename)[-1])
General Comments 0
You need to be logged in to leave comments. Login now