@@ -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: |
|
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 |
f |
|
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, f |
|
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 |
f |
|
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.__s |
|
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