# SVN changeset patch # User ralonso # Date 2010-05-17 04:52:50.422372 # Revision 44 mas funciones implementadas y control de botones paso a paso parte 1 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 43) +++ b/bk_manager/trunk/functions/functions.py (revision 44) @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- + #class BKmanager: # def __init__(self): @@ -7,17 +9,17 @@ 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(var_path, list_dirs, self): - var_cmd="mkdir -p "+str(var_path) for var_dir in list_dirs: var_output=commands.getstatusoutput(var_cmd+'/'+var_dir)[0] @@ -27,3 +29,48 @@ return else: self.txtInfo.append('Carpetas creadas correctamente') + + +#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 + + 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.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) + + self.btnGbkp.setEnabled(True) + + 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 43) +++ b/bk_manager/trunk/functions/functions2.py (revision 44) @@ -1,3 +1,6 @@ +# -*- coding: utf-8 -*- + + from subprocess import * import sys import os @@ -5,3 +8,58 @@ import commands +def set_parameters(self): + """ + Se usa para inicializar ciertos parametros para pruebas + """ + #self.txtDpath.setText('/home/ricardoar/optional/STORAGE/Data/RAW_EXP/JASMET/') + #self.txtRpath.setText('/home/ricardoar/optional/STORAGE/prueba1_jro_backup_manager/') + self.txtDpath.setText('/home/ricardoar/optional/STORAGE/EW_DRIFTS/') + self.txtRpath.setText('/home/ricardoar/optional/prueba1_jro_backup_manager/') + self.txtElabel.setText('EW_DRIFTS') + self.statusDpath = True + self.statusRpath = True + self.var_n_files=0 + + +def detect_devices(self): + """ + Deteccion de los dispositvos de grabacion + """ + #var_cmd="wodim --devices | grep /dev/ | awk -F\' '{print $2}'" #Funciona en consola pero no en python ¿? + var_cmd="wodim --devices | grep /dev/ | awk '{print $2}' | awk -F= '{print $2}'" + var_output = commands.getstatusoutput(var_cmd) + if var_output[0] != 0: + self.txtInfo.append("No se pudo encontrar los dispositivos de grabacion, output_error:" + str(var_output)) + else: + self.txtInfo.append("dispositivos encontrados") + var_devices = var_output[1].split('\n') + + var_tmp=[] + for i in range(0, 4): + if i < len(var_devices): + var_len = len(var_devices[i]) + var_tmp.append(var_devices[i][1:var_len - 1]) + else: + var_tmp.append('') + + #Se escriben los dispostivos correspodientes, si existen + self.txtDeviceA.setText(str(var_tmp[0])) + self.txtDeviceB.setText(str(var_tmp[1])) + self.txtDeviceC.setText(str(var_tmp[2])) + self.txtDeviceD.setText(str(var_tmp[3])) + #Se desactivan los que no existen + if len(var_tmp[0]) == 0 : + self.chkDevA.setChecked(False) + self.chkDevA.setEnabled(False) + if len(var_tmp[1]) == 0 : + self.chkDevB.setChecked(False) + self.chkDevB.setEnabled(False) + if len(var_tmp[2]) == 0 : + self.chkDevC.setChecked(False) + self.chkDevC.setEnabled(False) + if len(var_tmp[3]) == 0 : + self.chkDevD.setChecked(False) + self.chkDevD.setEnabled(False) + + Index: bk_manager/trunk/jro_backup_manager.e4p =================================================================== diff --git a/bk_manager/trunk/jro_backup_manager.e4p b/bk_manager/trunk/jro_backup_manager.e4p --- a/bk_manager/trunk/jro_backup_manager.e4p (revision 43) +++ b/bk_manager/trunk/jro_backup_manager.e4p (revision 44) @@ -1,7 +1,7 @@ - + en @@ -20,6 +20,7 @@ functions/__init__.py functions/functions.py functions/functions2.py + functions/func_doc.py
ui/MainWindow.ui
@@ -31,6 +32,7 @@ + functions/doc_tmp.txt main.py 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 43) +++ b/bk_manager/trunk/ui/MainWindow.py (revision 44) @@ -25,84 +25,41 @@ QMainWindow.__init__(self, parent) self.setupUi(self) self.setupUi2() - - #redirige salida estandar - sys.stdout = self - + sys.stdout = self #redirige salida estandar def setupUi2(self): - """ - Se usa para inicializar ciertos parametros para pruebas - """ - #self.txtDpath.setText('/home/ricardoar/optional/STORAGE/Data/RAW_EXP/JASMET/') - #self.txtRpath.setText('/home/ricardoar/optional/STORAGE/prueba1_jro_backup_manager/') - self.txtDpath.setText('/home/ricardoar/optional/STORAGE/EW_DRIFTS/') - self.txtRpath.setText('/home/ricardoar/optional/prueba1_jro_backup_manager/') - self.txtElabel.setText('EW_DRIFTS') - self.statusDpath = True - self.statusRpath = True + + self.var_Dpath = self.txtDpath.text() + self.var_Rpath = self.txtRpath.text() + self.statusDpath = False + self.statusRpath = False + + self.var_Dtype = self.txtDtype.text() + self.var_Elabel = self.txtElabel.text() + self.var_Copys = self.txtCopys.value() + self.var_n_files=0 -# self.statusDpath = False -# self.statusRpath = False - - - # - #Deteccion de los dispositvos de grabacion - # - #var_cmd="wodim --devices | grep /dev/ | awk -F\' '{print $2}'" #Funciona en consola pero no en python ¿? - var_cmd="wodim --devices | grep /dev/ | awk '{print $2}' | awk -F= '{print $2}'" - var_output = commands.getstatusoutput(var_cmd) - if var_output[0] != 0: - self.txtInfo.setText("No se pudo encontrar los dispositivos de grabacion, output_error:" + str(var_output)) - else: - self.txtInfo.append("dispositivos encontrados") - var_devices = var_output[1].split('\n') - - var_tmp=[] - for i in range(0, 4): - if i < len(var_devices): - var_len = len(var_devices[i]) - var_tmp.append(var_devices[i][1:var_len - 1]) - else: - var_tmp.append('') - - #Se escriben los dispostivos correspodientes, si existen - self.txtDeviceA.setText(str(var_tmp[0])) - self.txtDeviceB.setText(str(var_tmp[1])) - self.txtDeviceC.setText(str(var_tmp[2])) - self.txtDeviceD.setText(str(var_tmp[3])) - #Se desactivan los que no existen - if len(var_tmp[0]) == 0 : - self.chkDevA.setChecked(False) - self.chkDevA.setEnabled(False) - if len(var_tmp[1]) == 0 : - self.chkDevB.setChecked(False) - self.chkDevB.setEnabled(False) - if len(var_tmp[2]) == 0 : - self.chkDevC.setChecked(False) - self.chkDevC.setEnabled(False) - if len(var_tmp[3]) == 0 : - self.chkDevD.setChecked(False) - self.chkDevD.setEnabled(False) - - + self.var_list=[] + + functions2.set_parameters(self) #Establece ciertos parametros, para pruebas + functions2.detect_devices(self) #busca los dispositivos de grabacion + + def write(self, txt): """ Escribe la salida estandar eb txtInfo """ self.txtInfo.append(str(txt)) - - + + @pyqtSignature("") def on_btnDpath_clicked(self): """ Permite seleccionar graficamente el direcorio de los datos a grabar """ - var_Dpath= QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly) - self.txtDpath.setText(var_Dpath) - - #llamada a funcion - self.on_txtDpath_editingFinished() + self.var_Dpath= QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly) + self.txtDpath.setText(self.var_Dpath) + self.on_txtDpath_editingFinished() #llamada a funcion @pyqtSignature("") @@ -110,11 +67,9 @@ """ Permite seleccionar graficamente el direcorio del proyecto """ - var_Rpath = QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly) - self.txtRpath.setText(var_Rpath) - - #llamada a funcion - self.on_txtRpath_editingFinished() + self.var_Rpath = QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly) + self.txtRpath.setText(self.var_Rpath) + self.on_txtRpath_editingFinished() #llamada a funcion @pyqtSignature("") @@ -123,46 +78,9 @@ Permite buscar los archivos de extension seleccionada en la ruta de de datos y cargar los valores para el rango de tiempo a ser grabado """ - - #Usando el modulo "subprocess", eric4 pide seleccion del tipo de subproceso (padre o hijo) - #por ello se prefiere usar el modulo "commands" - #p1= Popen(['find', var_Dpath, '-name', '*.r'], stdout=PIPE) - #p2= Popen(['awk', '-F/', '{print substr($NF,2,7)}'], stdin=p1.stdout, stdout=PIPE) - #output_p2= p2.communicate()[0] - #self.txtInfo.setText(output_p2) - - #Se carga la variable con la ruta de datos - var_Dpath=self.txtDpath.text() - - #Se verifica que la ruta exista y sea un directorio - var_cmd="test -d "+str(var_Dpath) - var_output=commands.getstatusoutput(var_cmd)[0] - if var_output != 0: - self.statusDpath = False - self.txtInfo.setText("Ruta no valida, output_error:" + str(var_output)) - return - else: - self.statusDpath = True - self.txtInfo.append("Ruta valida, sin error:" + str(var_Dpath)) - - #Se buscan los archivos del tipo especificado - var_Dtype=self.txtDtype.text() - var_cmd="find " + str(var_Dpath) + " -name *."+ str(var_Dtype) +" | awk -F/ '{print substr($NF,2,7)}' | sort| uniq" - output_p2=commands.getstatusoutput(var_cmd)[1] - - #Se cargan las listas para seleccionar StartDay y StopDay (QComboBox) - self.var_list=[] - for i in range(0, (len(output_p2)+1)/8): - self.var_list.append(output_p2[8*i:8*(i+1)-1]) - - self.lstStartDay.clear() - self.lstStopDay.clear() - - for i in self.var_list: - self.lstStartDay.addItem(i) - self.lstStopDay.addItem(i) - - self.lstStopDay.setCurrentIndex(self.lstStartDay.count()-1) + self.var_Dpath=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) @pyqtSignature("") @@ -170,19 +88,8 @@ """ Valida la ruta del proyecto """ - #Se carga la variable con la ruta del proyecto - var_Rpath=self.txtRpath.text() - - #Se verifica que la ruta exista y sea un directorio - var_cmd="test -d "+str(var_Rpath) - var_output=commands.getstatusoutput(var_cmd)[0] - if var_output != 0: - self.statusRpath = False - self.txtInfo.append("Ruta no valida, output_error:" + str(var_output)) - return - else: - self.statusRpath = True - self.txtInfo.append("Ruta valida, sin error:" + str(var_Rpath)) + self.var_Rpath=self.txtRpath.text() #Se carga la variable con la ruta recien editada + self.statusRpath = functions.dir_exists(self.var_Rpath, self) @pyqtSignature("int") @@ -200,7 +107,7 @@ if index != 3: self.txtDtype.setText(var_type) self.txtDtype.setReadOnly(True) - self.on_txtDpath_editingFinished() + functions.load_days(self) else: self.txtDtype.setText('') self.txtDtype.setReadOnly(False) @@ -211,6 +118,7 @@ """ Se activa cuando el tipo de archivo es ingresado manualmente """ + self.var_Dtype=self.txtDtype.text() #llamada a funcion self.on_txtDpath_editingFinished() @@ -496,4 +404,3 @@ var_dev = str(self.txtDeviceD.text()) var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev commands.getstatusoutput(var_cmd) - 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 43) +++ b/bk_manager/trunk/ui/MainWindow.ui (revision 44) @@ -6,7 +6,7 @@ 0 0 - 809 + 754 737 @@ -160,9 +160,12 @@ - - - 0 + + + + 0 + 0 + @@ -765,7 +768,7 @@ 0 0 - 809 + 754 21 @@ -823,7 +826,6 @@ txtDtype chkMST txtElabel - txtCopys lstStartDay lstStopDay chkSimultaneously 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 43) +++ b/bk_manager/trunk/ui/Ui_MainWindow.py (revision 44) @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file '/home/ricardoar/JRO_SVN/eric4/jro_backup_manager/ui/MainWindow.ui' # -# Created: Sun May 16 20:10:40 2010 +# Created: Sun May 16 22:58:10 2010 # by: PyQt4 UI code generator 4.7.2 # # WARNING! All changes made in this file will be lost! @@ -12,7 +12,7 @@ class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") - MainWindow.resize(809, 737) + MainWindow.resize(754, 737) self.centralwidget = QtGui.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget) @@ -94,7 +94,12 @@ self.txtElabel = QtGui.QLineEdit(self.tabParameters) self.txtElabel.setObjectName("txtElabel") self.horizontalLayout_5.addWidget(self.txtElabel) - self.txtCopys = QtGui.QLineEdit(self.tabParameters) + self.txtCopys = QtGui.QSpinBox(self.tabParameters) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.txtCopys.sizePolicy().hasHeightForWidth()) + self.txtCopys.setSizePolicy(sizePolicy) self.txtCopys.setObjectName("txtCopys") self.horizontalLayout_5.addWidget(self.txtCopys) self.verticalLayout_2.addLayout(self.horizontalLayout_5) @@ -426,7 +431,7 @@ self.verticalLayout.addLayout(self.horizontalLayout_2) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 809, 21)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 754, 21)) self.menubar.setObjectName("menubar") self.menuFile = QtGui.QMenu(self.menubar) self.menuFile.setObjectName("menuFile") @@ -471,8 +476,7 @@ MainWindow.setTabOrder(self.lstDtype, self.txtDtype) MainWindow.setTabOrder(self.txtDtype, self.chkMST) MainWindow.setTabOrder(self.chkMST, self.txtElabel) - MainWindow.setTabOrder(self.txtElabel, self.txtCopys) - MainWindow.setTabOrder(self.txtCopys, self.lstStartDay) + MainWindow.setTabOrder(self.txtElabel, self.lstStartDay) MainWindow.setTabOrder(self.lstStartDay, self.lstStopDay) MainWindow.setTabOrder(self.lstStopDay, self.chkSimultaneously) MainWindow.setTabOrder(self.chkSimultaneously, self.chkSequentially) @@ -513,7 +517,6 @@ self.chkMST.setText(QtGui.QApplication.translate("MainWindow", "MST-ISR Data", None, QtGui.QApplication.UnicodeUTF8)) self.lblElabel.setText(QtGui.QApplication.translate("MainWindow", "Exp. Label at device", None, QtGui.QApplication.UnicodeUTF8)) self.lblCopys.setText(QtGui.QApplication.translate("MainWindow", "Copys", None, QtGui.QApplication.UnicodeUTF8)) - self.txtCopys.setText(QtGui.QApplication.translate("MainWindow", "0", None, QtGui.QApplication.UnicodeUTF8)) self.lblStartDay.setText(QtGui.QApplication.translate("MainWindow", "Start Day:", None, QtGui.QApplication.UnicodeUTF8)) self.lblStopDay.setText(QtGui.QApplication.translate("MainWindow", "Stop Day:", None, QtGui.QApplication.UnicodeUTF8)) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabParameters), QtGui.QApplication.translate("MainWindow", "Parameters", None, QtGui.QApplication.UnicodeUTF8))