# SVN changeset patch # User ralonso # Date 2010-05-19 06:35:01.168761 # Revision 60 falta la prueba Index: bk_manager/trunk/functions/functions.py =================================================================== diff --git a/bk_manager/trunk/functions/functions.py b/bk_manager/trunk/functions/functions.py --- a/bk_manager/trunk/functions/functions.py (revision 59) +++ b/bk_manager/trunk/functions/functions.py (revision 60) @@ -8,9 +8,10 @@ import os import subprocess import commands - - -#Entero a cadena agregando ceros delante +import shutil + +#--------------------------------------------- Entero a cadena agregando ceros delante ------------------------------------------------- + def i2s(var_n, var_length=4): var_n2=str(var_n) while len(var_n2) < var_length: @@ -18,19 +19,8 @@ return var_n2 -#Crea directorios en la ruta indicada -def make_dirs(list_dirs, self): - var_cmd="mkdir -p "+str(self.var_Rpath) - for var_dir in list_dirs: - var_output=commands.getstatusoutput(var_cmd+'/'+var_dir)[0] - if var_output != 0: - self.txtInfo.append("Error al crear el directorio "+var_dir+", output_error:" + str(var_output)) - return False - self.txtInfo.append('Carpetas creadas correctamente') - return True - - -#Se verifica que la ruta exista y sea un directorio +#----------------------------------------- Se verifica que la ruta exista y sea un directorio ------------------------------------------------- + def dir_exists(var_dir, self): if os.path.isdir(var_dir): self.txtInfo.append("Ruta valida, sin error:" + str(var_dir)) @@ -40,7 +30,8 @@ return False -#Se buscan los archivos del tipo especificado +#-------------------------------- Se buscan los archivos del tipo especificado y se cargan las fechas ----------------------------- + def load_days(self): self.var_list=[] @@ -74,33 +65,50 @@ get_sub_list(self) self.btnGbkp.setEnabled(True) - - -#Verifica que los parametros -def validate_parameters(self): - #Verifica que las rutas sean validas - if self.statusRpath == False: - self.txtInfo.append("Ruta de proyecto no valida") - return False - - #Verifica la etiqueta - if len(self.var_Elabel) == 0: - self.txtInfo.append("Debe ingresar el nombre de la etiqueta") - return False - - return True - - -#Obtiene el rango de las fechas seleccionadas + + +#-------------------------------------------------- Obtiene el rango de las fechas seleccionadas ----------------------------------------- + def get_sub_list(self): self.var_sublist=[] for i in self.var_list[self.lstStartDay.currentIndex():self.lstStartDay.currentIndex() + self.lstStopDay.currentIndex()+1]: self.var_sublist.append(i) if len(self.var_sublist) == 0: - self.txtInfo.append("No existen archivos encontrados") - - -#Busca los archivos con los parametros de busqueda + self.txtInfo.append("No existen archivos encontrados") + + +#----------------------------------------------------- Verifica los parametros faltantes ----------------------------------------------------------- + +def validate_parameters(self): + #Verifica que las ruta del proyecto sea valida + if self.statusRpath == False: + self.txtInfo.append("Ruta de proyecto no valida") + return False + + #Verifica la etiqueta + if len(self.var_Elabel) == 0: + self.txtInfo.append("Debe ingresar el nombre de la etiqueta") + return False + + return True + + +#------------------------------------------------- Crea directorios en la ruta indicada ----------------------------------------------------------- + +def make_dirs(list_dirs, self): + + for var_dir in list_dirs: + shutil.rmtree(self.var_Rpath+'/'+var_dir, True) + var_output=commands.getstatusoutput("mkdir -p "+self.var_Rpath+'/'+var_dir)[0] + if var_output != 0: + self.txtInfo.append("Error al crear el directorio "+var_dir+", output_error:" + str(var_output)) + return False + self.txtInfo.append('Carpetas creadas correctamente') + return True + + +#-------------------------------------------- Busca los archivos con los parametros de busqueda --------------------------------------- + def list_files(self): var_files_list=[] for var_doy in self.var_sublist: @@ -111,7 +119,8 @@ return var_files_list -#Genera la lista de archivos .dat que contienen los archivos a grabar en cada DVD +#--------------- Genera la lista de archivos .dat que contienen los archivos a grabar en cada DVD ----------------------- + def make_files_dat(var_files_list, self): var_Rpath_ppath=self.var_Rpath+"/ppath" #Ruta de los archivos a grabar var_n=1 #Numero del DVD actual @@ -119,7 +128,7 @@ var_files_list_2=[] #Se usa para almacenar la lista de archivos agrbar en cada DVD for i in var_files_list: #Se asignan en i los archivos de la lista - self.txtInfo.append(i) + 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 var_tmp += var_size_i #Se acumulan el tamaño de los archivos de la lista @@ -146,23 +155,25 @@ var_tmp_path=line.split(self.var_Dpath)[1][:-13] var_file.write(var_tmp_path+'='+line+'\n') var_file.close() - + + self.txtInfo.append("Archivos .dat creados") return var_n -#Genera los archivos .print con los cuales se creara los postscript +#------------------------------ Genera los archivos .print con los cuales se creara los postscript ----------------------------------- + def make_files_print(self): var_Rpath_ppath=self.var_Rpath+"/ppath" #Ruta de los archivos a grabar # Se leen todos los archivos .dat creados para crear las etiquetas en los archivos .print - for var_n in range(1, self.var_n_discs + 1): + for var_n in range(1, self.var_Discs + 1): #se abren los archivos .dat en modo lectura var_file = open(var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(var_n)+".dat","r") lines=var_file.readlines() # Se lee las lineas en el archivo y se almacenan en la lista # Se crea el archivo .print var_file_print = open(var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(var_n)+".print","w") - var_file_print.write(self.var_Elabel+" "+i2s(var_n)+"/"+i2s(self.var_n_discs)+"\n") + var_file_print.write(self.var_Elabel+" "+i2s(var_n)+"/"+i2s(self.var_Discs)+"\n") var_file_print.write("Year Doy Folder Set Time range\n") var_first_folder = lines[0].split('=')[0] @@ -195,7 +206,7 @@ var_date_last_file=commands.getstatusoutput("date -r "+var_last_file+" +'%T'")[1] if var_first_folder == '/': - var_folder = self.txtElabel.text() + var_folder = self.var_Elabel else: var_folder = var_first_folder.split('/')[-2] Index: bk_manager/trunk/functions/functions2.py =================================================================== diff --git a/bk_manager/trunk/functions/functions2.py b/bk_manager/trunk/functions/functions2.py --- a/bk_manager/trunk/functions/functions2.py (revision 59) +++ b/bk_manager/trunk/functions/functions2.py (revision 60) @@ -7,6 +7,7 @@ import subprocess import commands +#----------------------------------------------------- Deteccion de los dispositivos de grabacion --------------------------------------------------------------- def detect_devices(self): """ @@ -48,6 +49,28 @@ self.chkDevD.setChecked(False) self.chkDevD.setEnabled(False) + +#----------------------------------- listado de los dispositivos de grabacion seleccionados -------------------------------------------- + +def selected_devices(self): + self.var_devices=[] + if self.chkDevA.isChecked(): + self.var_devices.append(str(self.txtDeviceA.text())) + if self.chkDevB.isChecked(): + self.var_devices.append(str(self.txtDeviceB.text())) + if self.chkDevC.isChecked(): + self.var_devices.append(str(self.txtDeviceC.text())) + if self.chkDevD.isChecked(): + self.var_devices.append(str(self.txtDeviceD.text())) + + if len(self.var_devices) == 0: + return False + else: + return True + + +#----------------------------------------------------- Inicializacion para pruebas--------------------------------------------------------------- + def set_parameters_test(self): """ Se usa para inicializar ciertos parametros para pruebas @@ -60,19 +83,25 @@ self.txtDcapacity.setReadOnly(False) +#----------------------------------------------------- crea parameters.conf --------------------------------------------------------------- + def make_parameters_conf(self): var_file = open("parameters.conf","w") - var_file.write(self.var_Dpath+"\n") #0 - var_file.write(self.var_Rpath+"\n") #1 - var_file.write(str(self.var_lstDtype)+"\n") #2 - var_file.write(self.var_Dtype+"\n") #3 - var_file.write(self.var_Elabel+"\n") #4 - var_file.write(str(self.var_Copys)+"\n") #5 - var_file.write(str(self.var_lstDcapacity)+"\n") #6 - var_file.write(str(self.var_Dcapacity)+"\n") #7 - var_file.write(str(self.var_n_discs)) #8 + var_file.write(self.var_Dpath+"\n") #0 Ruta de los datos + var_file.write(self.var_Rpath+"\n") #1 Ruta del proyecto + var_file.write(str(self.var_lstDtype)+"\n") #2 opcion Data Type + var_file.write(self.var_Dtype+"\n") #3 extension Data Type + var_file.write(self.var_Elabel+"\n") #4 etiqueta + var_file.write(str(self.var_Copys)+"\n") #5 Numero de copias + var_file.write(str(self.var_lstDcapacity)+"\n") #6 opcion Device Capacity + var_file.write(str(self.var_Dcapacity)+"\n") #7 tamaño Device Capacity + var_file.write(str(self.var_Discs)+"\n") #8 Numero de discos a grabar +# var_file.write(str(self.lstStartDay.currentIndex())+"\n") #9 Indice fecha inicial +# var_file.write(str(self.lstStopDay.currentIndex())+"\n") #10 Indice fecha final + var_file.close() +#----------------------------------------------------- carga parameters.conf --------------------------------------------------------------- def get_parameters_conf(self): var_file = open("parameters.conf","r") @@ -85,20 +114,27 @@ self.txtCopys.setValue(int(lines[5][:-1])) #5 self.lstDcapacity.setCurrentIndex(int(lines[6])) #6 self.txtDcapacity.setValue(float(lines[7])) #7 - self.var_n_discs = int(lines[8]) # 8 + self.var_Discs = int(lines[8]) #8 +# var_StartDay = int(lines[6]) #9 +# var_StopDay = int(lines[7]) #10 var_file.close() + +#-------------------------- actualiza el valor de las variables con los parametros seleccionados ----------------------------- + def set_vars(self): - self.var_Dpath = self.txtDpath.text() #0 - self.var_Rpath = self.txtRpath.text() #1 + self.var_Dpath = str(self.txtDpath.text()) #0 + self.var_Rpath = str(self.txtRpath.text()) #1 self.var_lstDtype = self.lstDtype.currentIndex() #2 - self.var_Dtype = self.txtDtype.text() #3 - self.var_Elabel = self.txtElabel.text() #4 + self.var_Dtype = str(self.txtDtype.text()) #3 + self.var_Elabel = str(self.txtElabel.text()) #4 self.var_Copys = self.txtCopys.value() #5 self.var_lstDcapacity = self.lstDcapacity.currentIndex() #6 self.var_Dcapacity = self.txtDcapacity.value() #7 + self.var_Discs = self.var_Discs #8 +#---------------------------------------------- Habilitacion y deshabilitacion de items ------------------------------------------------------- def enabled_items1(var_bool, self): self.tabParameters.setEnabled(not(var_bool)) Index: bk_manager/trunk/ui/MainWindow.py =================================================================== diff --git a/bk_manager/trunk/ui/MainWindow.py b/bk_manager/trunk/ui/MainWindow.py --- a/bk_manager/trunk/ui/MainWindow.py (revision 59) +++ b/bk_manager/trunk/ui/MainWindow.py (revision 60) @@ -32,18 +32,25 @@ functions2.detect_devices(self) #busca los dispositivos de grabacion - self.var_n_discs=0 - self.var_disc=0 + self.var_Discs = 0 #Numero de discos del proyecto + self.var_Copys = 0 #Numero de copias + self.var_disc_n = 0 + self.var_copy_n = 0 + self.var_list=[] self.var_sublist=[] - self.bool_iso = False - self.bool_burn = False + + self.var_devices=[] + + self.var_step = 0 + self.bool_state_burning = False + #Revisa si existe el archivo de confirguracion if os.path.isfile("parameters.conf"): self.txtInfo.append("Archivo de configuracion encontrado") functions2.get_parameters_conf(self) - self.txtInfo.append("El proyecto creara "+str(self.var_n_discs)+" DVDs") + self.txtInfo.append("El proyecto es de "+str(self.var_Discs)+" discos") else: self.txtInfo.append("Elija los parametros de configuracion") functions2.set_parameters_test(self) #Establece ciertos parametros, para pruebas @@ -53,7 +60,11 @@ self.statusDpath = functions.dir_exists(self.var_Dpath, self) self.statusRpath = functions.dir_exists(self.var_Rpath, self) functions.load_days(self) - + + if os.path.isfile("parameters.conf"): + functions2.enabled_items1(True, self) #Se bloquean los parametros de configuracion + + self.var_process = QtCore.QProcess() self.connect(self.var_process, QtCore.SIGNAL('readyReadStandardOutput()'), self.readOuput) self.connect(self.var_process, QtCore.SIGNAL('readyReadStandardError()'), self.readError) @@ -74,18 +85,18 @@ def finished(self): self.txtInfo.append("proceso terminado finished() "+QtCore.QString(self.var_process.exitCode())) - if self.var_disc <= self.var_n_discs: + if self.var_disc_n <= self.var_Discs and self.bool_state_burning: self.burning() -#----------------------------------------------------- Obtencion de las ruta de los datos --------------------------------------------------------------- +#----------------------------------------------------- Obtencion de la ruta de los datos --------------------------------------------------------------- @pyqtSignature("") def on_btnDpath_clicked(self): """ Permite seleccionar graficamente el direcorio de los datos a grabar """ - self.var_Dpath= QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly) + self.var_Dpath= str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly)) self.txtDpath.setText(self.var_Dpath) self.statusDpath = functions.dir_exists(self.var_Dpath, self) functions.load_days(self) @@ -96,7 +107,7 @@ """ Carga la ruta editada y verifica que sea correcta y carga la lista de dias """ - self.var_Dpath=self.txtDpath.text() #Se carga la variable con la ruta recien editada + self.var_Dpath=str(self.txtDpath.text()) #Se carga la variable con la ruta recien editada self.statusDpath = functions.dir_exists(self.var_Dpath, self) functions.load_days(self) @@ -108,7 +119,7 @@ """ Permite seleccionar graficamente el direcorio del proyecto """ - self.var_Rpath = QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly) + self.var_Rpath = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly)) self.txtRpath.setText(self.var_Rpath) self.statusRpath = functions.dir_exists(self.var_Rpath, self) @@ -118,7 +129,7 @@ """ Valida la ruta del proyecto """ - self.var_Rpath=self.txtRpath.text() #Se carga la variable con la ruta recien editada + self.var_Rpath = str(self.txtRpath.text()) #Se carga la variable con la ruta recien editada self.statusRpath = functions.dir_exists(self.var_Rpath, self) @@ -145,7 +156,7 @@ @pyqtSignature("") def on_txtDtype_editingFinished(self): - self.var_Dtype=self.txtDtype.text() + self.var_Dtype=str(self.txtDtype.text()) functions.load_days(self) #llamada a funcion @@ -153,7 +164,7 @@ @pyqtSignature("") def on_txtElabel_editingFinished(self): - self.var_Elabel = self.txtElabel.text() + self.var_Elabel = str(self.txtElabel.text()) #----------------------------------------------------- Numero de copias --------------------------------------------------------------- @pyqtSignature("") @@ -223,6 +234,7 @@ self.txtDcapacity.setValue(100.0) self.txtDcapacity.setReadOnly(False) + self.var_lstDcapacity = self.lstDcapacity.currentIndex() self.var_Dcapacity = self.txtDcapacity.value() @@ -248,12 +260,13 @@ return var_files_list = functions.list_files(self) #Se obtiene la lista de archivos a grabar - self.var_n_discs = functions.make_files_dat(var_files_list, self) #Se crean los archivos .dat + self.var_Discs = functions.make_files_dat(var_files_list, self) #Se crean los archivos .dat functions.make_files_print(self) # Se crean los archivos .print functions2.make_parameters_conf(self) # se crea el archivo parameters.conf #Se bloquean los parametros de configuracion functions2.enabled_items1(True, self) + #----------------------------------------------------- Permite reiniciar la configuracion --------------------------------------------------------------- @@ -274,58 +287,72 @@ """ Se inicia el proceso de grabacion """ - functions2.enabled_items2(True, self) - - sys.stdout = self -# #sys.stderr = self -# print "stdout_!!!" - - self.var_devices=[] - if self.chkDevA.isChecked(): - self.var_devices.append(self.txtDeviceA.text()) - if self.chkDevB.isChecked(): - self.var_devices.append(self.txtDeviceB.text()) - if self.chkDevC.isChecked(): - self.var_devices.append(self.txtDeviceC.text()) - if self.chkDevD.isChecked(): - self.var_devices.append(self.txtDeviceD.text()) - - if len(self.var_devices) ==0: + + #Verifica que exista algun dispositivo de grabacion seleccionado + if not(functions2.selected_devices(self)): + self.txtInfo.append("No hay ningun dispositivo de grabacion seleccionado ") return + #Lista los dispositivos de grabacion a usar for dev in self.var_devices: self.txtInfo.append("dispositivo :"+dev) - self.var_disc = 1 + #Asigna las variables con los valores iniciales + self.var_disc_n = 0 # numero de disco actual para grabacion + self.var_copy_n = 0 + self.var_step = 0 + self.bool_state_burning = True + + functions2.enabled_items2(True, self) self.burning() def burning(self): var_Rpath_ppath=self.var_Rpath+"/ppath" var_Rpath_iso=self.var_Rpath+"/iso" - file_iso=var_Rpath_iso+"/"+functions.i2s(self.var_disc)+".iso" - - if not(self.bool_iso): -# self.bool_iso = True - self.bool_burn = False - file_iso=var_Rpath_iso+"/"+functions.i2s(self.var_disc)+".iso" - file_dat=var_Rpath_ppath+"/"+self.var_Elabel+"_"+functions.i2s(self.var_disc)+".dat" + file_iso=var_Rpath_iso+"/"+functions.i2s(self.var_disc_n)+".iso" + + #Creacion del archivo.iso para la grabacion + if self.var_step == 0: + self.var_disc_n += 1 # numero de disco actual para grabacion + self.txtInfo.append("Creando el iso del disco numero: "+self.var_disc_n) + + #Si ya se grabaron todos los discos + if self.var_disc_n > self.var_Discs: + self.bool_state_burning = False + self.txtInfo.append("GRABACION TERMINADA") + return + + #comando para la creacion del archivo.iso + file_dat=var_Rpath_ppath+"/"+self.var_Elabel+"_"+functions.i2s(self.var_disc_n)+".dat" var_cmd = 'genisoimage -hide-joliet-trans-tbl -joliet-long -r ' var_cmd += ' -A '+self.var_Elabel+' -V '+self.var_Elabel var_cmd += ' -graft-points -path-list '+ file_dat+' -o '+file_iso - - elif not(self.bool_burn): - self.bool_iso = False - self.bool_burn = True - var_dev_tmp=self.var_devices[ (self.var_disc-1) % len(self.var_devices) ] + self.var_step = 1 #Se ira al paso de la grabacion en la siguiente llamada + + #Grabacion de los DVDs + elif self.var_step == 1: + self.var_copy_n += 1 # numero de copia actual + self.txtInfo.append("Grabando la copia numero: "+self.var_copy_n) + + #Si esta es la ultima copia se pasara al siguiente disco en la siguiente llamada a la funcion + if self.var_copy_n == self.var_Copys: + self.var_step = 0 + + var_index = (((self.var_disc_n - 1) * self.var_Discs) + self.var_copy_n) % len(self.var_devices) + + if var_index == 0: + self.txtInfo.append("EXPULSANDO BANDEJAS") + + var_dev_tmp=self.var_devices[var_index] var_cmd = "wodim -v dev="+var_dev_tmp+" speed=16 "+ file_iso - self.var_disc += 1 - -# self.var_process.start('ls') -# self.txtInfo.append(var_cmd) - - self.txtInfo.append("creando iso") - self.var_process.start(var_cmd) + + + self.var_process.start('ls') + self.txtInfo.append(var_cmd) + +# self.txtInfo.append("creando iso") +# self.var_process.start(var_cmd) #----------------------------------------------------- Detener proceso de grabacion --------------------------------------------------------------- @@ -335,8 +362,9 @@ """ Slot documentation goes here. """ -# self.var_process.terminate() #Termina el proceso, si puede - self.var_process.kill() #Termina el proceso, si puede + self.bool_state_burning = False + self.var_process.terminate() #Termina el proceso, si puede +# self.var_process.kill() #Mata el proceso, no es la forma adecuada functions2.enabled_items2(False, self) Index: bk_manager/trunk/ui/MainWindow.ui =================================================================== diff --git a/bk_manager/trunk/ui/MainWindow.ui b/bk_manager/trunk/ui/MainWindow.ui --- a/bk_manager/trunk/ui/MainWindow.ui (revision 59) +++ b/bk_manager/trunk/ui/MainWindow.ui (revision 60) @@ -833,7 +833,7 @@ 0 0 809 - 25 + 21 Index: bk_manager/trunk/ui/Ui_MainWindow.py =================================================================== diff --git a/bk_manager/trunk/ui/Ui_MainWindow.py b/bk_manager/trunk/ui/Ui_MainWindow.py --- a/bk_manager/trunk/ui/Ui_MainWindow.py (revision 59) +++ b/bk_manager/trunk/ui/Ui_MainWindow.py (revision 60) @@ -2,8 +2,8 @@ # Form implementation generated from reading ui file '/home/ricardoar/JRO_SVN/eric4/jro_backup_manager/ui/MainWindow.ui' # -# Created: Tue May 18 17:48:10 2010 -# by: PyQt4 UI code generator 4.7.3 +# Created: Tue May 18 22:39:04 2010 +# by: PyQt4 UI code generator 4.7.2 # # WARNING! All changes made in this file will be lost! @@ -452,7 +452,7 @@ self.verticalLayout.addLayout(self.horizontalLayout_2) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 809, 25)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 809, 21)) self.menubar.setObjectName("menubar") self.menuFile = QtGui.QMenu(self.menubar) self.menuFile.setObjectName("menuFile")