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