##// END OF EJS Templates
***
ralonso -
r33:34
parent child
Show More
@@ -1,410 +1,472
1 1 # -*- coding: utf-8 -*-
2 2
3 3 """
4 4 Module implementing MainWindow.
5 5 """
6 6
7 7 from PyQt4.QtGui import QMainWindow
8 8 from PyQt4.QtCore import pyqtSignature
9 9 from Ui_MainWindow import Ui_MainWindow
10 10 from PyQt4 import QtGui
11 11 from subprocess import *
12 12 import sys
13 13 import os
14 14 import subprocess
15 15 import commands
16 16
17 17 class MainWindow(QMainWindow, Ui_MainWindow):
18 18 """
19 19 Class documentation goes here.
20 20 """
21 21
22 22 def __init__(self, parent = None):
23 23 QMainWindow.__init__(self, parent)
24 24 self.setupUi(self)
25 25 self.setupUi2()
26 26
27 27 #redirige salida estandar
28 28 sys.stdout = self
29 29
30 30
31 31 def setupUi2(self):
32 32 """
33 33 Se usa para inicializar ciertos parametros para pruebas
34 34 """
35 self.txtDpath.setText('/home/ricardoar/optional/STORAGE/EW_DRIFTS')
36 self.txtRpath.setText('/home/ricardoar/optional/STORAGE/prueba2_jro_backup_manager')
37 self.txtElabel.setText('EW_DRIFTS')
38 self.statusDpath = False
39 self.statusRpath = False
35 self.txtDpath.setText('/home/ricardoar/optional/STORAGE/Data/RAW_EXP/JASMET/')
36 self.txtRpath.setText('/home/ricardoar/optional/STORAGE/prueba1_jro_backup_manager')
37 self.txtElabel.setText('JASMET')
38 self.statusDpath = True
39 self.statusRpath = True
40 # self.statusDpath = False
41 # self.statusRpath = False
42
40 43
41 44 #
42 45 #Deteccion de los dispositvos de grabacion
43 46 #
44 47 #var_cmd="wodim --devices | grep /dev/ | awk -F\' '{print $2}'" #Funciona en consola pero no en python ΒΏ?
45 48 var_cmd="wodim --devices | grep /dev/ | awk '{print $2}' | awk -F= '{print $2}'"
46 49 var_output = commands.getstatusoutput(var_cmd)
47 50 if var_output[0] != 0:
48 51 self.txtInfo.setText("No se pudo encontrar los dispositivos de grabacion, output_error:" + str(var_output))
49 52 else:
50 53 self.txtInfo.append("dispositivos encontrados")
51 54 var_devices = var_output[1].split('\n')
52 55
53 56 var_tmp=[]
54 57 for i in range(0, 4):
55 58 if i < len(var_devices):
56 59 var_len = len(var_devices[i])
57 60 var_tmp.append(var_devices[i][1:var_len - 1])
58 61 else:
59 62 var_tmp.append('')
60 63
61 64 #Se escriben los dispostivos correspodientes, si existen
62 65 self.txtDeviceA.setText(str(var_tmp[0]))
63 66 self.txtDeviceB.setText(str(var_tmp[1]))
64 67 self.txtDeviceC.setText(str(var_tmp[2]))
65 68 self.txtDeviceD.setText(str(var_tmp[3]))
66 69 #Se desactivan los que no existen
67 70 if len(var_tmp[0]) == 0 :
68 71 self.chkDevA.setChecked(False)
69 72 self.chkDevA.setEnabled(False)
70 73 if len(var_tmp[1]) == 0 :
71 74 self.chkDevB.setChecked(False)
72 75 self.chkDevB.setEnabled(False)
73 76 if len(var_tmp[2]) == 0 :
74 77 self.chkDevC.setChecked(False)
75 78 self.chkDevC.setEnabled(False)
76 79 if len(var_tmp[3]) == 0 :
77 80 self.chkDevD.setChecked(False)
78 81 self.chkDevD.setEnabled(False)
79 82
80 83
81 84 def write(self, txt):
82 85 """
83 86 Escribe la salida estandar eb txtInfo
84 87 """
85 88 self.txtInfo.append(str(txt))
86 89
87 90
88 91 @pyqtSignature("")
89 92 def on_btnDpath_clicked(self):
90 93 """
91 94 Permite seleccionar graficamente el direcorio de los datos a grabar
92 95 """
93 96 var_Dpath= QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly)
94 97 self.txtDpath.setText(var_Dpath)
95 98
96 99 #llamada a funcion
97 100 self.on_txtDpath_editingFinished()
98 101
99 102
100 103 @pyqtSignature("")
101 104 def on_btnRpath_clicked(self):
102 105 """
103 106 Permite seleccionar graficamente el direcorio del proyecto
104 107 """
105 108 var_Rpath = QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly)
106 109 self.txtRpath.setText(var_Rpath)
107 110
108 111 #llamada a funcion
109 112 self.on_txtRpath_editingFinished()
110 113
111 114
112 115 @pyqtSignature("")
113 116 def on_txtDpath_editingFinished(self):
114 117 """
115 118 Permite buscar los archivos de extension seleccionada en la ruta de de datos
116 119 y cargar los valores para el rango de tiempo a ser grabado
117 120 """
118 121
119 122 #Usando el modulo "subprocess", eric4 pide seleccion del tipo de subproceso (padre o hijo)
120 123 #por ello se prefiere usar el modulo "commands"
121 124 #p1= Popen(['find', var_Dpath, '-name', '*.r'], stdout=PIPE)
122 125 #p2= Popen(['awk', '-F/', '{print substr($NF,2,7)}'], stdin=p1.stdout, stdout=PIPE)
123 126 #output_p2= p2.communicate()[0]
124 127 #self.txtInfo.setText(output_p2)
125 128
126 129 #Se carga la variable con la ruta de datos
127 130 var_Dpath=self.txtDpath.text()
128 131
129 132 #Se verifica que la ruta exista y sea un directorio
130 133 var_cmd="test -d "+str(var_Dpath)
131 134 var_output=commands.getstatusoutput(var_cmd)[0]
132 135 if var_output != 0:
133 136 self.statusDpath = False
134 137 self.txtInfo.setText("Ruta no valida, output_error:" + str(var_output))
135 138 return
136 139 else:
137 140 self.statusDpath = True
138 141 self.txtInfo.append("Ruta valida, sin error:" + str(var_Dpath))
139 142
140 143 #Se buscan los archivos del tipo especificado
141 144 var_Dtype=self.txtDtype.text()
142 145 var_cmd="find " + str(var_Dpath) + " -name *."+ str(var_Dtype) +" | awk -F/ '{print substr($NF,2,7)}' | sort| uniq"
143 146 output_p2=commands.getstatusoutput(var_cmd)[1]
144 147
145 148 #Se cargan las listas para seleccionar StartDay y StopDay (QComboBox)
146 149 self.var_list=[]
147 150 for i in range(0, (len(output_p2)+1)/8):
148 151 self.var_list.append(output_p2[8*i:8*(i+1)-1])
149 152
150 153 self.lstStartDay.clear()
151 154 self.lstStopDay.clear()
152 155
153 156 for i in self.var_list:
154 157 self.lstStartDay.addItem(i)
155 158 self.lstStopDay.addItem(i)
156 159
157 160 self.lstStopDay.setCurrentIndex(self.lstStartDay.count()-1)
158 161
159 162
160 163 @pyqtSignature("")
161 164 def on_txtRpath_editingFinished(self):
162 165 """
163 166 Valida la ruta del proyecto
164 167 """
165 168 #Se carga la variable con la ruta del proyecto
166 169 var_Rpath=self.txtRpath.text()
167 170
168 171 #Se verifica que la ruta exista y sea un directorio
169 172 var_cmd="test -d "+str(var_Rpath)
170 173 var_output=commands.getstatusoutput(var_cmd)[0]
171 174 if var_output != 0:
172 175 self.statusRpath = False
173 176 self.txtInfo.append("Ruta no valida, output_error:" + str(var_output))
174 177 return
175 178 else:
176 179 self.statusRpath = True
177 180 self.txtInfo.append("Ruta valida, sin error:" + str(var_Rpath))
178 181
179 182
180 183 @pyqtSignature("int")
181 184 def on_lstDtype_activated(self, index):
182 185 """
183 186 Permite elegir entre los tipos de archivos
184 187 """
185 188 if index == 0:
186 189 var_type='r'
187 190 elif index == 1:
188 191 var_type='pdata'
189 192 elif index == 2:
190 193 var_type='sswma'
191 194
192 195 if index != 3:
193 196 self.txtDtype.setText(var_type)
194 197 self.txtDtype.setReadOnly(True)
195 198 self.on_txtDpath_editingFinished()
196 199 else:
197 200 self.txtDtype.setText('')
198 201 self.txtDtype.setReadOnly(False)
199 202
200 203
201 204 @pyqtSignature("")
202 205 def on_txtDtype_editingFinished(self):
203 206 """
204 207 Se activa cuando el tipo de archivo es ingresado manualmente
205 208 """
206 209 #llamada a funcion
207 210 self.on_txtDpath_editingFinished()
208 211
209 212
210 213 @pyqtSignature("int") #CLOSED
211 214 def on_lstStartDay_activated(self, index):
212 215 """
213 216 Cambia la lista de opciones en lstStopDay
214 217 """
215 218 var_StopDay_index=self.lstStopDay.count() - self.lstStopDay.currentIndex()
216 219 self.lstStopDay.clear()
217 220
218 221 for i in self.var_list[index:]:
219 222 self.lstStopDay.addItem(i)
220 223
221 224 self.lstStopDay.setCurrentIndex(self.lstStopDay.count() - var_StopDay_index)
222 225
223 226
224 227 @pyqtSignature("int") #CLOSED
225 228 def on_lstStopDay_activated(self, index):
226 229 """
227 230 Cambia la lista de opciones en lstStartDay
228 231 """
229 232 var_StartDay_index=self.lstStartDay.currentIndex()
230 233 var_end_index = self.lstStopDay.count() - index
231 234 self.lstStartDay.clear()
232 235
233 236 for i in self.var_list[:len(self.var_list) - var_end_index + 1]:
234 237 self.lstStartDay.addItem(i)
235 238
236 239 self.lstStartDay.setCurrentIndex(var_StartDay_index)
237 240
238 241
239 242 @pyqtSignature("int") #CLOSED
240 243 def on_lstDcapacity_activated(self, index):
241 244 """
242 245 Permite elegir el tamaΓ±o del disco
243 246 """
244 247 if index == 0:
245 248 var_size=25.0
246 249 elif index == 1:
247 250 var_size=8.5
248 251 elif index == 2:
249 252 var_size=4.7
250 253 elif index == 3:
251 254 var_size=0.7
252 255
253 256 if index != 4:
254 257 self.txtDcapacity.setText(str(var_size*10**9/1024**2))
255 258 self.txtDcapacity.setReadOnly(True)
256 259 else:
257 260 self.txtDcapacity.setText('')
258 261 self.txtDcapacity.setReadOnly(False)
259 262
260 263
261 264 @pyqtSignature("")
262 265 def on_btnGbkp_clicked(self):
263 266 """
264 267 Cuando se presiona el boton btnGbkp
265 268 """
266 269
267 270 #Verifica que las rutas sean validas
268 271 if self.statusDpath == False or self.statusRpath == False:
269 272 if self.statusDpath == False:
270 273 self.txtInfo.append("Ruta de datos no valida")
271 274 if self.statusRpath == False:
272 275 self.txtInfo.append("Ruta de proyecto no valida")
273 276 return
274 277
275 278 #Crea las carpetas en la ruta del proyecto y verifica que se crearon correctamente
276 279 var_Rpath=self.txtRpath.text()
277 280 var_dirs='/{gpath,iso,ppath}'
278 281 var_cmd="mkdir -p "+str(var_Rpath)+str(var_dirs)
279 282 var_output=commands.getstatusoutput(var_cmd)[0]
280 283 if var_output != 0:
281 284 self.txtInfo.append("No se pudieron crear los directorios, output_error:" + str(var_output))
282 285 return
283 286 else:
284 287 self.txtInfo.append('Carpetas creadas correctamente')
285 288
286 289 #Cargando variables con los parametros
287 290 var_Dpath=self.txtDpath.text()
288 291 var_Rpath=self.txtRpath.text()
289 292 var_Rpath_ppath=var_Rpath+"/ppath" #Ruta de los archivos a grabar
290 293 var_sublist=[]
291 294 for i in self.var_list[self.lstStartDay.currentIndex():self.lstStartDay.currentIndex() + self.lstStopDay.currentIndex()+1]:
292 295 var_sublist.append(i)
293 296 if len(var_sublist) == 0:
294 297 self.txtInfo.append("No existen archivos encontrados")
295 298 return
296 299 #self.txtInfo.append('elementos: '+str(len(var_sublist)))
297 300
298 301
299 302 var_Dtype=self.txtDtype.text()
300 303 var_Dcapacity=float(self.txtDcapacity.text())*1024 #tamaΓ±o en KB
301 304
302 305 #Busca los archivos con los parametros de busqueda
303 306 var_files_list=[]
304 307 for var_doy in var_sublist:
305 308 var_cmd="find " + str(var_Dpath) + " -name ?"+var_doy+"???."+ str(var_Dtype) + " |sort"
306 309 var_output=commands.getstatusoutput(var_cmd)[1]
307 310 for var_file in var_output.split():
308 311 var_files_list.append(var_file) #Almacena cada archivo en la lista
309 312
310 313 #
311 314 #Genera la lista de archivos .dat que contienen los archivos a grabar en cada DVD
312 315 #
313 var_n=0 #Se usa para contar el numero de archivos a grabar en el DVD
316 var_n=0 #Numero del DVD actual
314 317 var_tmp=0 #Se usa para acumulanr el tamaΓ±o de los archivos de la lista
315 318 var_files_list_2=[] #Se usa para almacenar la lista de archivos agrbar en cada DVD
316 319
317 320 for i in var_files_list: #Se asignan en i los archivos de la lista
318 321 var_size_i=os.path.getsize(i)/1024+1 #tamaΓ±o en KB del archivo de la lista, se suma 1 KB para evitar problemas al momento de sumar
319 322 var_tmp += var_size_i #Se acumulan el tamaΓ±o de los archivos de la lista
320 323
321 324 #Si el tamaΓ±o acumulado es mayor que el de el DVD
322 325 if var_tmp > var_Dcapacity:
323 326 var_tmp -= var_size_i #se quita el tamaΓ±o sumado para mostrar el tamaΓ±o real
327 #se agregan los ceros necesarios
328 if len(str(var_n)) < 4:
329 var_n2=""
330 for k in range(0, 4-len(str(var_n))):
331 var_n2 = var_n2+"0"
324 332 #se crea un archivo con numeral en el sufijo y extension .dat
325 var_file = open(var_Rpath_ppath+"/"+self.txtElabel.text()+"_"+str(var_n)+".dat","w")
333 var_file = open(var_Rpath_ppath+"/"+self.txtElabel.text()+"_"+str(var_n2)+str(var_n)+".dat","w")
326 334 #Se aΓ±ade la lista de archivos a grabar en el DVD al archivo .dat
327 335 for line in var_files_list_2:
328 var_file.write(line.split(var_Dpath)[1]+'=')
336 var_tmp_path=(line.split(var_Dpath)[1]).split('/')
337 var_tmp_path2="/"
338 for l in range(0, len(var_tmp_path)-1):
339 var_tmp_path2=var_tmp_path2+str(var_tmp_path[l])+"/"
340 var_file.write(var_tmp_path2+'=')
329 341 var_file.write(line+'\n')
330 342 var_file.close()
331 343
332 344 var_tmp = var_size_i #Se asigna a la variable el tamaΓ±o del archivo actual
333 345 var_files_list_2=[] #Se reinicia la lista
334 346 var_n += 1
335 347 var_files_list_2.append(i)
336 348
337 var_file = open(var_Rpath_ppath+"/"+self.txtElabel.text()+"_"+str(var_n)+".dat","w")
349 #se agregan los ceros necesarios
350 if len(str(var_n)) < 4:
351 var_n2=""
352 for k in range(0, 4-len(str(var_n))):
353 var_n2 = var_n2+"0"
354 #se crea un archivo con numeral en el sufijo y extension .dat
355 var_file = open(var_Rpath_ppath+"/"+self.txtElabel.text()+"_"+str(var_n2)+str(var_n)+".dat","w")
356 #Se aΓ±ade la lista de archivos a grabar en el DVD al archivo .dat
338 357 for line in var_files_list_2:
339 var_file.write(line.split(var_Dpath)[1]+'=')
358 var_tmp_path=(line.split(var_Dpath)[1]).split('/')
359 var_tmp_path2="/"
360 for l in range(0, len(var_tmp_path)-1):
361 var_tmp_path2=var_tmp_path2+str(var_tmp_path[l])+"/"
362 var_file.write(var_tmp_path2+'=')
340 363 var_file.write(line+'\n')
341 364 var_file.close()
342
365
366 #
367 #Genera los archivos postscript
368 #
369 var_n_files = var_n
370 var_n = 0
371 for i in range(0, var_n_files+1):
372 print i
373 #se agregan los ceros necesarios
374 if len(str(var_n)) < 4:
375 var_n2=""
376 for k in range(0, 4-len(str(var_n))):
377 var_n2 = var_n2+"0"
378
379 #se abren los archivos .dat en modo lectura
380 var_file = open(var_Rpath_ppath+"/"+self.txtElabel.text()+"_"+str(var_n2)+str(var_n)+".dat","r")
381 lines=var_file.readlines()
382 print str(len(lines))
383 #Se crean los archivos .print con los cuales se crearan los archivos .ps
384
385 var_first_folder = lines[0].split('=')[0]
386 var_first_file = (lines[0].split('=')[1]).split('/')[-1][1:11]
387
388 for j in range(1, len(lines)-1):
389 var_tmp_folder = lines[j].split('=')[0]
390 var_tmp_file = (lines[j].split('=')[1]).split('/')[-1][1:11]
391
392 # Si el subfolder superior o la fecha del archivo cambia se genera una nueva linea
393 if (var_tmp_folder != var_first_folder) or (var_tmp_file[0:7] != var_first_file[0:7]):
394 if var_first_folder == '/':
395 var_folder = self.txtElabel.text()
396 else:
397 var_folder = var_first_folder.split('/')[1]
398
399 print var_first_folder[0:4]+" "+var_first_folder[4:7]+" "+var_folder +" "+\
400 var_first_folder[7:10]+" "+(lines[j-1].split('=')[1]).split('/')[-1][8:11]
401
402 var_n += 1
403
404
343 405 #Se deshabilita el Tab Parameters y el boton btnGbkp
344 406 self.tabParameters.setEnabled(False)
345 407 self.btnGbkp.setEnabled(False)
346 408
347 409
348 410 @pyqtSignature("")
349 411 def on_btnStartburn_clicked(self):
350 412 """
351 413 Slot documentation goes here.
352 414 """
353 415 sys.stdout = self
354 416 #sys.stderr = self
355 417 print "stdout_!!!"
356 418 var_Rpath=self.txtRpath.text()
357 419 var_Rpath_ppath=var_Rpath+"/ppath"
358 420 var_Rpath_iso=var_Rpath+"/iso"
359 421
360 422 var_label=self.txtElabel.text()
361 423
362 424 file_iso=var_Rpath_iso+'/2.iso'
363 425 file_dat=var_Rpath_ppath+'/EW_DRIFTS_1.dat'
364 426
365 427 var_cmd = 'genisoimage -hide-joliet-trans-tbl -joliet-long -r '
366 428 var_cmd += ' -A '+var_label+' -V '+var_label
367 429 var_cmd += ' -graft-points -path-list '+ file_dat+' -o '+file_iso
368 430 self.txtInfo.append(var_cmd)
369 431
370 432 #var_output=commands.getstatusoutput(str(var_cmd))[1]
371 433 #self.txtInfo.append(var_output)
372 434
373 435 #os.system(str(var_cmd))
374 436 #p = subprocess.Popen(str('ls /'), shell=True, stdout=self)
375 437 #os.waitpid(p.pid, 0)
376 438 ####self.txtInfo.append(str(p.pid))
377 439
378 440
379 441
380 442 @pyqtSignature("")
381 443 def on_btnRestart_clicked(self):
382 444 """
383 445 Slot documentation goes here.
384 446 """
385 447 self.tabParameters.setEnabled(True)
386 448 self.btnGbkp.setEnabled(True)
387 449
388 450 @pyqtSignature("")
389 451 def on_btnTdevA_clicked(self):
390 452 var_dev = str(self.txtDeviceA.text())
391 453 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
392 454 commands.getstatusoutput(var_cmd)
393 455
394 456 @pyqtSignature("")
395 457 def on_btnTdevB_clicked(self):
396 458 var_dev = str(self.txtDeviceB.text())
397 459 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
398 460 commands.getstatusoutput(var_cmd)
399 461
400 462 @pyqtSignature("")
401 463 def on_btnTdevC_clicked(self):
402 464 var_dev = str(self.txtDeviceC.text())
403 465 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
404 466 commands.getstatusoutput(var_cmd)
405 467
406 468 @pyqtSignature("")
407 469 def on_btnTdevD_clicked(self):
408 470 var_dev = str(self.txtDeviceD.text())
409 471 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
410 472 commands.getstatusoutput(var_cmd)
General Comments 0
You need to be logged in to leave comments. Login now