##// END OF EJS Templates
setting a period to send by FTP
Daniel Valdez -
r489:a860ec855d7e
parent child
Show More
@@ -1,348 +1,354
1 '''
1 '''
2 @author: Daniel Suarez
2 @author: Daniel Suarez
3 '''
3 '''
4 import os
4 import os
5 import glob
5 import glob
6 import ftplib
6 import ftplib
7 from model.proc.jroproc_base import ProcessingUnit, Operation
7 from model.proc.jroproc_base import ProcessingUnit, Operation
8
8
9 class FTP():
9 class FTP():
10 """
10 """
11 Ftp is a public class used to define custom File Transfer Protocol from "ftplib" python module
11 Ftp is a public class used to define custom File Transfer Protocol from "ftplib" python module
12
12
13 Non-standard Python modules used: None
13 Non-standard Python modules used: None
14
14
15 Written by "Daniel Suarez":mailto:daniel.suarez@jro.igp.gob.pe Oct. 26, 2010
15 Written by "Daniel Suarez":mailto:daniel.suarez@jro.igp.gob.pe Oct. 26, 2010
16 """
16 """
17
17
18 def __init__(self,server = None, username=None, password=None, remotefolder=None):
18 def __init__(self,server = None, username=None, password=None, remotefolder=None):
19 """
19 """
20 This method is used to setting parameters for FTP and establishing connection to remote server
20 This method is used to setting parameters for FTP and establishing connection to remote server
21
21
22 Inputs:
22 Inputs:
23 server - remote server IP Address
23 server - remote server IP Address
24
24
25 username - remote server Username
25 username - remote server Username
26
26
27 password - remote server password
27 password - remote server password
28
28
29 remotefolder - remote server current working directory
29 remotefolder - remote server current working directory
30
30
31 Return: void
31 Return: void
32
32
33 Affects:
33 Affects:
34 self.status - in Error Case or Connection Failed this parameter is set to 1 else 0
34 self.status - in Error Case or Connection Failed this parameter is set to 1 else 0
35
35
36 self.folderList - sub-folder list of remote folder
36 self.folderList - sub-folder list of remote folder
37
37
38 self.fileList - file list of remote folder
38 self.fileList - file list of remote folder
39
39
40
40
41 """
41 """
42
42
43 if ((server == None) and (username==None) and (password==None) and (remotefolder==None)):
43 if ((server == None) and (username==None) and (password==None) and (remotefolder==None)):
44 server, username, password, remotefolder = self.parmsByDefault()
44 server, username, password, remotefolder = self.parmsByDefault()
45
45
46 self.server = server
46 self.server = server
47 self.username = username
47 self.username = username
48 self.password = password
48 self.password = password
49 self.remotefolder = remotefolder
49 self.remotefolder = remotefolder
50 self.file = None
50 self.file = None
51 self.ftp = None
51 self.ftp = None
52 self.status = 0
52 self.status = 0
53
53
54 try:
54 try:
55 self.ftp = ftplib.FTP(self.server)
55 self.ftp = ftplib.FTP(self.server)
56 self.ftp.login(self.username,self.password)
56 self.ftp.login(self.username,self.password)
57 self.ftp.cwd(self.remotefolder)
57 self.ftp.cwd(self.remotefolder)
58 # print 'Connect to FTP Server: Successfully'
58 # print 'Connect to FTP Server: Successfully'
59
59
60 except ftplib.all_errors:
60 except ftplib.all_errors:
61 print 'Error FTP Service'
61 print 'Error FTP Service'
62 self.status = 1
62 self.status = 1
63 return
63 return
64
64
65
65
66
66
67 self.dirList = []
67 self.dirList = []
68
68
69 try:
69 try:
70 self.dirList = self.ftp.nlst()
70 self.dirList = self.ftp.nlst()
71
71
72 except ftplib.error_perm, resp:
72 except ftplib.error_perm, resp:
73 if str(resp) == "550 No files found":
73 if str(resp) == "550 No files found":
74 print "no files in this directory"
74 print "no files in this directory"
75 self.status = 1
75 self.status = 1
76 return
76 return
77
77
78 except ftplib.all_errors:
78 except ftplib.all_errors:
79 print 'Error Displaying Dir-Files'
79 print 'Error Displaying Dir-Files'
80 self.status = 1
80 self.status = 1
81 return
81 return
82
82
83 self.fileList = []
83 self.fileList = []
84 self.folderList = []
84 self.folderList = []
85 #only for test
85 #only for test
86 for f in self.dirList:
86 for f in self.dirList:
87 name, ext = os.path.splitext(f)
87 name, ext = os.path.splitext(f)
88 if ext != '':
88 if ext != '':
89 self.fileList.append(f)
89 self.fileList.append(f)
90 # print 'filename: %s - size: %d'%(f,self.ftp.size(f))
90 # print 'filename: %s - size: %d'%(f,self.ftp.size(f))
91
91
92 def parmsByDefault(self):
92 def parmsByDefault(self):
93 server = 'jro-app.igp.gob.pe'
93 server = 'jro-app.igp.gob.pe'
94 username = 'wmaster'
94 username = 'wmaster'
95 password = 'mst2010vhf'
95 password = 'mst2010vhf'
96 remotefolder = '/home/wmaster/graficos'
96 remotefolder = '/home/wmaster/graficos'
97
97
98 return server, username, password, remotefolder
98 return server, username, password, remotefolder
99
99
100
100
101 def mkd(self,dirname):
101 def mkd(self,dirname):
102 """
102 """
103 mkd is used to make directory in remote server
103 mkd is used to make directory in remote server
104
104
105 Input:
105 Input:
106 dirname - directory name
106 dirname - directory name
107
107
108 Return:
108 Return:
109 1 in error case else 0
109 1 in error case else 0
110 """
110 """
111 try:
111 try:
112 self.ftp.mkd(dirname)
112 self.ftp.mkd(dirname)
113 except:
113 except:
114 print 'Error creating remote folder:%s'%dirname
114 print 'Error creating remote folder:%s'%dirname
115 return 1
115 return 1
116
116
117 return 0
117 return 0
118
118
119
119
120 def delete(self,filename):
120 def delete(self,filename):
121 """
121 """
122 delete is used to delete file in current working directory of remote server
122 delete is used to delete file in current working directory of remote server
123
123
124 Input:
124 Input:
125 filename - filename to delete in remote folder
125 filename - filename to delete in remote folder
126
126
127 Return:
127 Return:
128 1 in error case else 0
128 1 in error case else 0
129 """
129 """
130
130
131 try:
131 try:
132 self.ftp.delete(filename)
132 self.ftp.delete(filename)
133 except:
133 except:
134 print 'Error deleting remote file:%s'%filename
134 print 'Error deleting remote file:%s'%filename
135 return 1
135 return 1
136
136
137 return 0
137 return 0
138
138
139 def download(self,filename,localfolder):
139 def download(self,filename,localfolder):
140 """
140 """
141 download is used to downloading file from remote folder into local folder
141 download is used to downloading file from remote folder into local folder
142
142
143 Inputs:
143 Inputs:
144 filename - filename to donwload
144 filename - filename to donwload
145
145
146 localfolder - directory local to store filename
146 localfolder - directory local to store filename
147
147
148 Returns:
148 Returns:
149 self.status - 1 in error case else 0
149 self.status - 1 in error case else 0
150 """
150 """
151
151
152 self.status = 0
152 self.status = 0
153
153
154
154
155 if not(filename in self.fileList):
155 if not(filename in self.fileList):
156 print 'filename:%s not exists'%filename
156 print 'filename:%s not exists'%filename
157 self.status = 1
157 self.status = 1
158 return self.status
158 return self.status
159
159
160 newfilename = os.path.join(localfolder,filename)
160 newfilename = os.path.join(localfolder,filename)
161
161
162 self.file = open(newfilename, 'wb')
162 self.file = open(newfilename, 'wb')
163
163
164 try:
164 try:
165 print 'Download: ' + filename
165 print 'Download: ' + filename
166 self.ftp.retrbinary('RETR ' + filename, self.__handleDownload)
166 self.ftp.retrbinary('RETR ' + filename, self.__handleDownload)
167 print 'Download Complete'
167 print 'Download Complete'
168 except ftplib.all_errors:
168 except ftplib.all_errors:
169 print 'Error Downloading ' + filename
169 print 'Error Downloading ' + filename
170 self.status = 1
170 self.status = 1
171 return self.status
171 return self.status
172
172
173 self.file.close()
173 self.file.close()
174
174
175 return self.status
175 return self.status
176
176
177
177
178 def __handleDownload(self,block):
178 def __handleDownload(self,block):
179 """
179 """
180 __handleDownload is used to handle writing file
180 __handleDownload is used to handle writing file
181 """
181 """
182 self.file.write(block)
182 self.file.write(block)
183
183
184
184
185 def upload(self,filename,remotefolder=None):
185 def upload(self,filename,remotefolder=None):
186 """
186 """
187 upload is used to uploading local file to remote directory
187 upload is used to uploading local file to remote directory
188
188
189 Inputs:
189 Inputs:
190 filename - full path name of local file to store in remote directory
190 filename - full path name of local file to store in remote directory
191
191
192 remotefolder - remote directory
192 remotefolder - remote directory
193
193
194 Returns:
194 Returns:
195 self.status - 1 in error case else 0
195 self.status - 1 in error case else 0
196 """
196 """
197
197
198 if remotefolder == None:
198 if remotefolder == None:
199 remotefolder = self.remotefolder
199 remotefolder = self.remotefolder
200
200
201 self.status = 0
201 self.status = 0
202
202
203 try:
203 try:
204 self.ftp.cwd(remotefolder)
204 self.ftp.cwd(remotefolder)
205
205
206 self.file = open(filename, 'rb')
206 self.file = open(filename, 'rb')
207
207
208 (head, tail) = os.path.split(filename)
208 (head, tail) = os.path.split(filename)
209
209
210 command = "STOR " + tail
210 command = "STOR " + tail
211
211
212 print 'Uploading: ' + tail
212 print 'Uploading: ' + tail
213 self.ftp.storbinary(command, self.file)
213 self.ftp.storbinary(command, self.file)
214 print 'Upload Completed'
214 print 'Upload Completed'
215
215
216 except ftplib.all_errors:
216 except ftplib.all_errors:
217 print 'Error Uploading ' + tail
217 print 'Error Uploading ' + tail
218 self.status = 1
218 self.status = 1
219 return self.status
219 return self.status
220
220
221 self.file.close()
221 self.file.close()
222
222
223 #back to initial directory in __init__()
223 #back to initial directory in __init__()
224 self.ftp.cwd(self.remotefolder)
224 self.ftp.cwd(self.remotefolder)
225
225
226 return self.status
226 return self.status
227
227
228
228
229 def dir(self,remotefolder):
229 def dir(self,remotefolder):
230 """
230 """
231 dir is used to change working directory of remote server and get folder and file list
231 dir is used to change working directory of remote server and get folder and file list
232
232
233 Input:
233 Input:
234 remotefolder - current working directory
234 remotefolder - current working directory
235
235
236 Affects:
236 Affects:
237 self.fileList - file list of working directory
237 self.fileList - file list of working directory
238
238
239 Return:
239 Return:
240 infoList - list with filenames and size of file in bytes
240 infoList - list with filenames and size of file in bytes
241
241
242 self.folderList - folder list
242 self.folderList - folder list
243 """
243 """
244
244
245 self.remotefolder = remotefolder
245 self.remotefolder = remotefolder
246 print 'Change to ' + self.remotefolder
246 print 'Change to ' + self.remotefolder
247 try:
247 try:
248 self.ftp.cwd(remotefolder)
248 self.ftp.cwd(remotefolder)
249 except ftplib.all_errors:
249 except ftplib.all_errors:
250 print 'Error Change to ' + self.remotefolder
250 print 'Error Change to ' + self.remotefolder
251 infoList = None
251 infoList = None
252 self.folderList = None
252 self.folderList = None
253 return infoList,self.folderList
253 return infoList,self.folderList
254
254
255 self.dirList = []
255 self.dirList = []
256
256
257 try:
257 try:
258 self.dirList = self.ftp.nlst()
258 self.dirList = self.ftp.nlst()
259
259
260 except ftplib.error_perm, resp:
260 except ftplib.error_perm, resp:
261 if str(resp) == "550 No files found":
261 if str(resp) == "550 No files found":
262 print "no files in this directory"
262 print "no files in this directory"
263 infoList = None
263 infoList = None
264 self.folderList = None
264 self.folderList = None
265 return infoList,self.folderList
265 return infoList,self.folderList
266 except ftplib.all_errors:
266 except ftplib.all_errors:
267 print 'Error Displaying Dir-Files'
267 print 'Error Displaying Dir-Files'
268 infoList = None
268 infoList = None
269 self.folderList = None
269 self.folderList = None
270 return infoList,self.folderList
270 return infoList,self.folderList
271
271
272 infoList = []
272 infoList = []
273 self.fileList = []
273 self.fileList = []
274 self.folderList = []
274 self.folderList = []
275 for f in self.dirList:
275 for f in self.dirList:
276 name,ext = os.path.splitext(f)
276 name,ext = os.path.splitext(f)
277 if ext != '':
277 if ext != '':
278 self.fileList.append(f)
278 self.fileList.append(f)
279 value = (f,self.ftp.size(f))
279 value = (f,self.ftp.size(f))
280 infoList.append(value)
280 infoList.append(value)
281
281
282 if ext == '':
282 if ext == '':
283 self.folderList.append(f)
283 self.folderList.append(f)
284
284
285 return infoList,self.folderList
285 return infoList,self.folderList
286
286
287
287
288 def close(self):
288 def close(self):
289 """
289 """
290 close is used to close and end FTP connection
290 close is used to close and end FTP connection
291
291
292 Inputs: None
292 Inputs: None
293
293
294 Return: void
294 Return: void
295
295
296 """
296 """
297 self.ftp.close()
297 self.ftp.close()
298
298
299 class SendByFTP(Operation):
299 class SendByFTP(Operation):
300 def __init__(self):
300 def __init__(self):
301 self.status = 1
301 self.status = 1
302 self.counter = 0
302
303
303 def error_print(self, ValueError):
304 def error_print(self, ValueError):
304 print ValueError, 'Error FTP'
305 print ValueError, 'Error FTP'
305 print "don't worry the program is running..."
306 print "don't worry the program is running..."
306
307
307 def connect(self, server, username, password, remotefolder):
308 def connect(self, server, username, password, remotefolder):
308 if not(self.status):
309 if not(self.status):
309 return
310 return
310 try:
311 try:
311 self.ftpObj = FTP(server, username, password, remotefolder)
312 self.ftpObj = FTP(server, username, password, remotefolder)
312 except:
313 except:
313 self.error_print(ValueError)
314 self.error_print(ValueError)
314 self.status = 0
315 self.status = 0
315
316
316 def put(self):
317 def put(self):
317 if not(self.status):
318 if not(self.status):
318 return
319 return
319
320
320 try:
321 try:
321 for filename in self.filenameList:
322 for filename in self.filenameList:
322 self.ftpObj.upload(filename)
323 self.ftpObj.upload(filename)
323 except:
324 except:
324 self.error_print(ValueError)
325 self.error_print(ValueError)
325 self.status = 0
326 self.status = 0
326
327
327 def close(self):
328 def close(self):
328 if not(self.status):
329 if not(self.status):
329 return
330 return
330
331
331 self.ftpObj.close()
332 self.ftpObj.close()
332
333
333 def filterByExt(self, ext, localfolder):
334 def filterByExt(self, ext, localfolder):
334 fnameList = glob.glob1(localfolder,ext)
335 fnameList = glob.glob1(localfolder,ext)
335 self.filenameList = [os.path.join(localfolder,x) for x in fnameList]
336 self.filenameList = [os.path.join(localfolder,x) for x in fnameList]
336
337
337 if len(self.filenameList) == 0:
338 if len(self.filenameList) == 0:
338 self.status = 0
339 self.status = 0
339
340
340 def run(self, dataOut, ext, localfolder, remotefolder, server, username, password):
341 def run(self, dataOut, ext, localfolder, remotefolder, server, username, password, period=1):
341
342
343 self.counter += 1
344 if self.counter >= period:
342 self.filterByExt(ext, localfolder)
345 self.filterByExt(ext, localfolder)
343
346
344 self.connect(server, username, password, remotefolder)
347 self.connect(server, username, password, remotefolder)
345
348
346 self.put()
349 self.put()
347
350
348 self.close()
351 self.close()
352
353 self.counter = 0
354
General Comments 0
You need to be logged in to leave comments. Login now