# -*- coding: utf-8 -*- #class BKmanager: # def __init__(self): from subprocess import * import sys import os import subprocess import commands #Entero a cadena agregando ceros delante def i2s(var_n, var_length=4): var_n2=str(var_n) while len(var_n2) < var_length: var_n2 = "0"+var_n2 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 def dir_exists(var_dir, self): var_cmd="test -d "+str(var_dir) var_output=commands.getstatusoutput(var_cmd)[0] if var_output != 0: self.txtInfo.append("Ruta no valida, output_error:" + str(var_output)) return False else: self.txtInfo.append("Ruta valida, sin error:" + str(var_dir)) return True #Se buscan los archivos del tipo especificado def load_days(self): self.var_list=[] self.lstStartDay.clear() self.lstStopDay.clear() if self.statusDpath == False: self.btnGbkp.setEnabled(False) return if self.var_Dtype == '': return var_cmd="find " + str(self.var_Dpath) + " -name *."+ str(self.var_Dtype) +" | awk -F/ '{print substr($NF,2,7)}' | sort| uniq" output=commands.getstatusoutput(var_cmd)[1] #Si no se encuentra ningun archivo if len(output) == 0: self.txtInfo.append("No se encontraron archivos") self.btnGbkp.setEnabled(False) return #Se cargan las listas para seleccionar StartDay y StopDay (QComboBox) for i in range(0, (len(output)+1)/8): self.var_list.append(output[8*i:8*(i+1)-1]) for i in self.var_list: self.lstStartDay.addItem(i) self.lstStopDay.addItem(i) self.lstStopDay.setCurrentIndex(self.lstStartDay.count()-1) 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 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 def list_files(self): var_files_list=[] for var_doy in self.var_sublist: var_cmd="find " + str(self.var_Dpath) + " -name ?"+var_doy+"???."+ str(self.var_Dtype) + " |sort" var_output=commands.getstatusoutput(var_cmd)[1] for var_file in var_output.split(): var_files_list.append(var_file) #Almacena cada archivo en la lista return var_files_list #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 var_tmp=0 #Se usa para acumular el tamaño de los archivos de la lista 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 #Si el tamaño acumulado es mayor que el de el DVD if var_tmp > (self.var_Dcapacity * 1024): var_tmp -= var_size_i #se quita el tamaño sumado para mostrar el tamaño real #se crea un archivo con numeral en el sufijo y extension .dat var_file = open(var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(var_n)+".dat","w") #Se añade la lista de archivos a grabar en el DVD al archivo .dat for line in var_files_list_2: var_tmp_path=(line.split(self.var_Dpath)[1]).split('/') var_tmp_path2="/" for l in range(0, len(var_tmp_path)-1): var_tmp_path2=var_tmp_path2+str(var_tmp_path[l])+"/" var_file.write(var_tmp_path2+'=') var_file.write(line+'\n') var_file.close() var_tmp = var_size_i #Se asigna a la variable el tamaño del archivo actual var_files_list_2=[] #Se reinicia la lista var_n += 1 var_files_list_2.append(i) #se crea un archivo con numeral en el sufijo y extension .dat var_file = open(var_Rpath_ppath+"/"+self.var_Elabel+"_"+i2s(var_n)+".dat","w") #Se añade la lista de archivos a grabar en el DVD al archivo .dat for line in var_files_list_2: var_tmp_path=(line.split(self.var_Dpath)[1]).split('/') var_tmp_path2="/" for l in range(0, len(var_tmp_path)-1): var_tmp_path2=var_tmp_path2+str(var_tmp_path[l])+"/" var_file.write(var_tmp_path2+'=') var_file.write(line+'\n') var_file.close() return var_n #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): #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("Year Doy Folder Set Time range\n") var_first_folder = lines[0].split('=')[0] var_first_file = (lines[0].split('=')[1])[:-1] var_date_first_file=commands.getstatusoutput("date -r "+var_first_file+" +'%T'")[1] for j in range(1, len(lines)-1): var_tmp_folder = lines[j].split('=')[0] var_tmp_file = (lines[j].split('=')[1])[:-1] # Si el subfolder superior o la fecha del archivo cambia se genera una nueva linea if (var_tmp_folder != var_first_folder) or (var_tmp_file[0:-5] != var_first_file[0:-5]): var_last_file = (lines[j-1].split('=')[1])[:-1] var_date_last_file=commands.getstatusoutput("date -r "+var_last_file+" +'%T'")[1] # Si el archivo se grabara directamente en la / del DVD y no en un /directorio/ # se usa la etiqueta para indicar la parte de la etiqueta donde va el subdirectorio if var_first_folder == '/': var_folder = self.var_Elabel else: var_folder = var_first_folder.split('/')[1] var_file_print.write(var_first_file[-12:-8]+" "+var_first_file[-8:-5]+" "+var_folder +" "+var_first_file[-5:-2]+" " +var_last_file[-5:-2]+" "+var_date_first_file+" "+var_date_last_file+"\n") var_first_folder = lines[j].split('=')[0] var_first_file = (lines[j].split('=')[1])[:-1] var_date_first_file=commands.getstatusoutput("date -r "+var_first_file+" +'%T'")[1] var_last_file = (lines[-1].split('=')[1])[:-1] var_date_last_file=commands.getstatusoutput("date -r "+var_last_file+" +'%T'")[1] if var_first_folder == '/': var_folder = self.txtElabel.text() else: var_folder = var_first_folder.split('/')[1] var_file_print.write(var_first_file[-12:-8]+" "+var_first_file[-8:-5]+" "+var_folder +" "+var_first_file[-5:-2]+" " +var_last_file[-5:-2]+" "+var_date_first_file+" "+var_date_last_file+"\n") var_file.close() var_file_print.close()