def __guessBurnerType(self, deviceFile): """ Função que utiliza os dados fornecidos pelo teste informativo para identificar qual o tipo do gravador (ou se é só um leitor). Caso a informação não esteja disponível, a aplicação cdrecord é utilizada para tentar obtê-la. O retorno é a string 'DVDRW' ou 'CDRW', caso um gravador seja identificado, ou None, caso o dispositivo seja apenas um leitor. """ ret = None commands = [] cmd_base = "cdrecord -prcap dev=%s | grep write | grep media | grep -v not" % deviceFile for cmd in cmd_base.split("|"): commands.append(prepare_command(cmd)) cmd_awk = ['awk', '{print $3}'] commands.append(cmd_awk) i, o_str, e_str, ret_code = exec_command_parms(commands) if (o_str.__contains__('DVD')): ret = 'DVDRW' elif (o_str.__contains__('CD')): ret = 'CDRW' return ret
def compat(self, info_list): """Executa o teste de compatibilidade como definido na RFQ07.B.' Parâmetro: info_list -- Lista contendo as informções detectadas para o HD (lista de 'InfoResHarddisk') Retorna uma lista contendo o resultado do teste e uma string de mensagem para cada dispositivo. """ self._compat_res = None if (info_list): self._compat_res = [] for info in info_list: i, o_str, e_str, ret_code = exec_command_parms( [['/sbin/badblocks', '-v', info.deviceFile, '1000000']]) qtde = e_str.split()[-4] if qtde != "trying" and int(qtde) > 0: self._compat_res.append(( False, u'HD incompatível com o Librix. %d setores defeituosos (bad blocks) encontrados' % int(qtde))) else: self._compat_res.append( (True, u'HD compatível com o Librix.'))
def __guessBurnerType(self, deviceFile): """ Função que utiliza os dados fornecidos pelo teste informativo para identificar qual o tipo do gravador (ou se é só um leitor). Caso a informação não esteja disponível, a aplicação cdrecord é utilizada para tentar obtê-la. O retorno é a string 'DVDRW' ou 'CDRW', caso um gravador seja identificado, ou None, caso o dispositivo seja apenas um leitor. """ ret = None commands = [] cmd_base = "cdrecord -prcap dev=%s | grep write | grep media | grep -v not" % deviceFile for cmd in cmd_base.split("|"): commands.append(prepare_command(cmd)) cmd_awk = ['awk', '{print $3}'] commands.append(cmd_awk) i, o_str, e_str, ret_code = exec_command_parms(commands) if(o_str.__contains__('DVD')): ret = 'DVDRW' elif(o_str.__contains__('CD')): ret = 'CDRW' return ret
def __checkLive(self): """Verifica se a execucao esta sendo feita a partir de um livecd, testando a existencia de alguma particao do tipo squashfs montada""" ret = False commands = [['mount'], ['awk', '{print $5}'], ['grep', 'squashfs']] i, o_str, e_str, ret_code = exec_command_parms(commands) if (o_str.__contains__('squashfs')): ret = True return ret
def __checkLive(self): """Verifica se a execucao esta sendo feita a partir de um livecd, testando a existencia de alguma particao do tipo squashfs montada""" ret = False commands = [['mount'], ['awk', '{print $5}'], ['grep', 'squashfs']] i, o_str, e_str, ret_code = exec_command_parms(commands) if(o_str.__contains__('squashfs')): ret = True return ret
def compat(self, info_list): """Executa o teste de compatibilidade como definido na RFQ07.B.' Parâmetro: info_list -- Lista contendo as informções detectadas para o HD (lista de 'InfoResHarddisk') Retorna uma lista contendo o resultado do teste e uma string de mensagem para cada dispositivo. """ self._compat_res = None if (info_list): self._compat_res = [] for info in info_list: i, o_str, e_str, ret_code = exec_command_parms([['/sbin/badblocks', '-v', info.deviceFile, '1000000']]) qtde = e_str.split()[-4] if qtde != "trying" and int(qtde) > 0: self._compat_res.append((False, u'HD incompatível com o Librix. %d setores defeituosos (bad blocks) encontrados' % int(qtde))) else: self._compat_res.append((True, u'HD compatível com o Librix.'))
def validateCurrentPage(self): """ Função chamada por QWizard quando o usuario clica em Next ou Finish. Usada para validar a pagina atual. Se retornar True, a proxima pagina eh exibida; se retornar False, permanece na pagina atual. """ cur = self.currentId() ret = True if (not self.__canceled): if (cur == self.NUMBER): n = self.numberLineEdit.text() if (unicode(n).isdigit()): self.NUMBER_OF_PORTS = int(n) self.REMAINING_PORTS = int(n) self.numberWarningLabel.hide() ret = True # ls /sys/bus/usb/devices/ --dired --ignore=usb* --ignore=*:* | grep - | sed :a;$!N;s/\\n/;/g;ta # cmd = [['ls', '/sys/bus/usb/devices/', '--dired', '--ignore=usb*', '--ignore=*:*'], ['grep', '-'], ['sed', ':a;$!N;s/\\n/;/g;ta']] cmd = [[ 'ls', '/sys/bus/usb/devices/', '--dired', '--ignore=usb*', '--ignore=*:*' ]] i, o_str, e_str, returncode = exec_command_parms(cmd) internal_devices = o_str.strip() # print "DEBUG: strip ", internal_devices if internal_devices: internal_devices = internal_devices.split() self.internal_ports = internal_devices # print "DEBUG: internal ports ", self.internal_ports else: self.numberWarningLabel.show() self.numberLineEdit.setFocus() ret = False elif (cur == self.INSERT): time.sleep(1) #tempo para o SO reconhecer o device # cmd = [['ls', '/sys/bus/usb/devices/', '--dired', '--ignore=usb*', '--ignore=*:*'], ['grep', '-'], ['sed', ':a;$!N;s/\\n/;/g;ta']]#, ["sed", ':a;$!N;s/\\n/; /g;ta']] cmd = [[ 'ls', '/sys/bus/usb/devices/', '--dired', '--ignore=usb*', '--ignore=*:*' ]] i, o_str, e_str, returncode = exec_command_parms(cmd) port = o_str.strip() ports = [] if port: ports = port.split() # print "DEBUG: ports ", ports def list_sub(a, b): c = [] for i in a: if i not in b: c.append(i) return c non_internal_ports = list_sub(ports, self.internal_ports) # print "DEBUG: non_internal_ports ", non_internal_ports if len(non_internal_ports) == 0: # print "DEBUG: Nenhuma porta nova foi reconhecida" msg = "Não foi possível reconhecer a porta onde o pen drive está inserido. \n\n\n Pressione <b>Avançar</b> para continuar." self.messageLabel.setText( QtGui.QApplication.translate( "Wizard", msg, None, QtGui.QApplication.UnicodeUTF8)) self.messageLabel.setTextFormat(QtCore.Qt.RichText) self.FAILED_PORTS = self.FAILED_PORTS + 1 self.insertWarningLabel.setVisible(False) ret = True #failed ports + 1 else: non_visited_ports = list_sub(non_internal_ports, self.visited_ports) # print "DEBUG: non_visited_ports", non_visited_ports if len(non_visited_ports) == 0: # print "DEBUG: Porta já testada" self.insertWarningLabel.setVisible(True) ret = False else: if len(non_visited_ports) == 1: port = non_visited_ports[0] self.visited_ports.append(port) self.SUCCESSFUL_PORTS = self.SUCCESSFUL_PORTS + 1 msg = "Teste realizado com sucesso. \n\nPressione <b>Avançar</b> para continuar." self.messageLabel.setText( QtGui.QApplication.translate( "Wizard", msg, None, QtGui.QApplication.UnicodeUTF8)) self.messageLabel.setTextFormat(QtCore.Qt.RichText) self.insertWarningLabel.setVisible(False) ret = True else: # print "DEBUG: Comportamento indesejado" pass # print "DEBUG:", port, self.visited_ports, self.internal_ports elif (cur == self.MESSAGE): if (self.REMAINING_PORTS > 0): self.back() self.back() else: pass return ret
def validateCurrentPage(self): """ Função chamada por QWizard quando o usuario clica em Next ou Finish. Usada para validar a pagina atual. Se retornar True, a proxima pagina eh exibida; se retornar False, permanece na pagina atual. """ cur = self.currentId() ret = True if (not self.__canceled): if (cur == self.NUMBER): n = self.numberLineEdit.text() if (unicode(n).isdigit()): self.NUMBER_OF_PORTS = int(n) self.REMAINING_PORTS = int(n) self.numberWarningLabel.hide() ret = True # ls /sys/bus/usb/devices/ --dired --ignore=usb* --ignore=*:* | grep - | sed :a;$!N;s/\\n/;/g;ta # cmd = [['ls', '/sys/bus/usb/devices/', '--dired', '--ignore=usb*', '--ignore=*:*'], ['grep', '-'], ['sed', ':a;$!N;s/\\n/;/g;ta']] cmd = [['ls', '/sys/bus/usb/devices/', '--dired', '--ignore=usb*', '--ignore=*:*']] i, o_str, e_str, returncode = exec_command_parms(cmd) internal_devices = o_str.strip() # print "DEBUG: strip ", internal_devices if internal_devices: internal_devices = internal_devices.split() self.internal_ports = internal_devices # print "DEBUG: internal ports ", self.internal_ports else: self.numberWarningLabel.show() self.numberLineEdit.setFocus() ret = False elif (cur == self.INSERT): time.sleep(1) #tempo para o SO reconhecer o device # cmd = [['ls', '/sys/bus/usb/devices/', '--dired', '--ignore=usb*', '--ignore=*:*'], ['grep', '-'], ['sed', ':a;$!N;s/\\n/;/g;ta']]#, ["sed", ':a;$!N;s/\\n/; /g;ta']] cmd = [['ls', '/sys/bus/usb/devices/', '--dired', '--ignore=usb*', '--ignore=*:*']] i, o_str, e_str, returncode = exec_command_parms(cmd) port = o_str.strip() ports = [] if port: ports = port.split() # print "DEBUG: ports ", ports def list_sub(a, b): c = [] for i in a: if i not in b: c.append(i) return c non_internal_ports = list_sub(ports, self.internal_ports) # print "DEBUG: non_internal_ports ", non_internal_ports if len(non_internal_ports) == 0: # print "DEBUG: Nenhuma porta nova foi reconhecida" msg = "Não foi possível reconhecer a porta onde o pen drive está inserido. \n\n\n Pressione <b>Avançar</b> para continuar." self.messageLabel.setText(QtGui.QApplication.translate("Wizard", msg, None, QtGui.QApplication.UnicodeUTF8)) self.messageLabel.setTextFormat(QtCore.Qt.RichText) self.FAILED_PORTS = self.FAILED_PORTS + 1 self.insertWarningLabel.setVisible(False) ret = True #failed ports + 1 else: non_visited_ports = list_sub(non_internal_ports, self.visited_ports) # print "DEBUG: non_visited_ports", non_visited_ports if len(non_visited_ports) == 0: # print "DEBUG: Porta já testada" self.insertWarningLabel.setVisible(True) ret = False else: if len(non_visited_ports) == 1: port = non_visited_ports[0] self.visited_ports.append(port) self.SUCCESSFUL_PORTS = self.SUCCESSFUL_PORTS + 1 msg = "Teste realizado com sucesso. \n\nPressione <b>Avançar</b> para continuar." self.messageLabel.setText(QtGui.QApplication.translate("Wizard", msg, None, QtGui.QApplication.UnicodeUTF8)) self.messageLabel.setTextFormat(QtCore.Qt.RichText) self.insertWarningLabel.setVisible(False) ret = True else: # print "DEBUG: Comportamento indesejado" pass # print "DEBUG:", port, self.visited_ports, self.internal_ports elif (cur == self.MESSAGE): if (self.REMAINING_PORTS > 0): self.back() self.back() else: pass return ret