def elegirOpcion(self, opciones: qsa.Array) -> qsa.Array: """Show a choose option dialog and return selected values.""" util = qsa.FLUtil() dialog = qsa.Dialog() dialog.okButtonText = util.translate(u"scripts", u"Aceptar") dialog.cancelButtonText = util.translate(u"scripts", u"Cancelar") bgroup = qsa.GroupBox() bgroup.setTitle(util.translate(u"scripts", u"Seleccione módulos a cargar")) dialog.add(bgroup) resultado = qsa.Array() cB = qsa.Array() i = 0 while_pass = True while i < len(opciones): if not while_pass: i += 1 while_pass = True continue while_pass = False cB[i] = qsa.CheckBox() bgroup.add(cB[i]) cB[i].text = opciones[i] cB[i].checked = True i += 1 while_pass = True try: i < len(opciones) except Exception: break indice = 0 if dialog.exec_(): i = 0 while_pass = True while i < len(opciones): if not while_pass: i += 1 while_pass = True continue while_pass = False if cB[i].checked: resultado[indice] = opciones[i] indice += 1 i += 1 while_pass = True try: i < len(opciones) except Exception: break else: return qsa.Array() if len(resultado) == 0: return qsa.Array() return resultado
def test_sql(self) -> None: """Test sql functions.""" from pineboolib.fllegacy import flutil, flsqlcursor from pineboolib.qsa import qsa ar_1 = qsa.Array("idarea", "descripcion") ar_2 = qsa.Array("G", "area test 2") util = flutil.FLUtil() self.assertTrue( util.sqlInsert("flareas", ["idarea", "descripcion"], ["T", "area test 1"])) self.assertTrue(util.sqlInsert("flareas", ar_1, ar_2)) cur = flsqlcursor.FLSqlCursor("flareas") cur.select() self.assertEqual(cur.size(), 2) res_1 = util.sqlSelect("flareas", "COUNT(idarea)", "1=1") self.assertEqual(res_1, 2) res_2 = util.quickSqlSelect("flareas", "COUNT(idarea)", "1=1") self.assertEqual(res_2, 2) self.assertTrue( util.sqlUpdate("flareas", "descripcion", "area test modificado", "idarea ='T'")) self.assertEqual( util.quickSqlSelect("flareas", "descripcion", "idarea ='T'"), "area test modificado") self.assertTrue( util.execSql("SELECT COUNT(*) FROM flareas WHERE '1=1'", "default")) self.assertFalse( util.execSql("SELECT COUNT(*) FROG flareas WHERE '1=1'", "default")) self.assertTrue(util.sqlDelete("flareas", "idarea ='T'", "default")) cur.refresh() self.assertEqual(cur.size(), 1) self.assertTrue( util.quickSqlDelete("flareas", "idarea ='G'", "default")) cur.refresh() self.assertEqual(cur.size(), 0)
def ejecutarComando(self, comando: str) -> qsa.Array: """Execute a command and return a value.""" res = qsa.Array() qsa.ProcessStatic.execute(comando) if qsa.ProcessStatic.stderr != u"": res[u"ok"] = False res[u"salida"] = qsa.ProcessStatic.stderr else: res[u"ok"] = True res[u"salida"] = qsa.ProcessStatic.stdout return res
def test_nombreCampos(self) -> None: """Return array from nombreCampos.""" from pineboolib.qsa import qsa util = aqutil.AQUtil() array = util.nombreCampos("flmodules") self.assertTrue(qsa.parseInt(array[0])) value = array.pop(0) self.assertEqual(value, "6") self.assertEqual( str(array), str( qsa.Array("bloqueo", "idmodulo", "idarea", "descripcion", "version", "icono")), )
def test_ProcessStatic(self) -> None: """Test ProcessStatic.""" from pineboolib.qsa import qsa comando_py = "" proc = qsa.ProcessStatic proc.execute("python3 --version") salida = None if proc.stderr != "": salida = proc.stderr else: salida = proc.stdout comando_py = "python3" self.assertTrue(salida.find("Python") > -1) comando = qsa.Array(comando_py, "--version") proc_2 = qsa.ProcessStatic proc_2.executeNoSplit(comando) self.assertTrue(salida in [proc_2.stderr, proc_2.stdout])
def main(self) -> None: """Entry function.""" util = qsa.FLUtil() setting = "scripts/sys/modLastDirModules_%s" % qsa.sys.nameBD() dirAnt = util.readSettingEntry(setting) dirMods = qsa.FileDialog.getExistingDirectory( dirAnt, util.translate(u"scripts", u"Directorio de Módulos") ) if not dirMods: return qsa.Dir().setCurrent(dirMods) resComando = qsa.Array() if util.getOS() == u"WIN32": resComando = self.ejecutarComando("cmd.exe /C dir /B /S *.mod") else: resComando = self.ejecutarComando("find . -name *.mod") if not resComando.ok: qsa.MessageBox.warning( util.translate(u"scripts", u"Error al buscar los módulos en el directorio:\n") + dirMods, qsa.MessageBox.Ok, qsa.MessageBox.NoButton, qsa.MessageBox.NoButton, ) return opciones = resComando.salida.split(u"\n") opciones.pop() modulos = self.elegirOpcion(opciones) if not modulos: return i = 0 while_pass = True while i < len(modulos): if not while_pass: i += 1 while_pass = True continue while_pass = False qsa.sys.processEvents() if not self.cargarModulo(modulos[i]): qsa.MessageBox.warning( util.translate(u"scripts", u"Error al cargar el módulo:\n") + modulos[i], qsa.MessageBox.Ok, qsa.MessageBox.NoButton, qsa.MessageBox.NoButton, ) return i += 1 while_pass = True try: i < len(modulos) except Exception: break util.writeSettingEntry(setting, dirMods) app_ = qsa.aqApp if app_ is None: return app_.reinit()
def editarFichero(self) -> None: """Edit a file.""" qsa.MessageBox.warning( qsa.util.translate("scripts", "Opción no disponible"), qsa.MessageBox.Yes, qsa.MessageBox.NoButton, ) return cursor = self.cursor() util = qsa.FLUtil() if cursor.checkIntegrity(): self.child("nombre").setDisabled(True) nombre = cursor.valueBuffer("nombre") tipo = self.tipoDeFichero(nombre) temporal = qsa.System.getenv("TMP") if temporal == "": temporal = qsa.System.getenv("TMPDIR") if temporal == "": temporal = qsa.System.getenv("HOME") if temporal == "": from pineboolib.core.settings import config temporal = config.value("ebcomportamiento/temp_dir") temporal = qsa.ustr(temporal, "/", cursor.valueBuffer("nombre")) contenido = self.child("contenido").toPlainText() comando = "" if tipo == ".ui": if util.getOS() == "MACX": qsa.FileStatic.write( temporal, qsa.ustr(contenido, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n") ) comando = qsa.ustr( qsa.sys.installPrefix(), "/bin/designer.app/Contents/MacOS/designer" ) else: qsa.FileStatic.write(temporal, contenido) comando = qsa.ustr(qsa.sys.installPrefix(), "/bin/designer") self.setDisabled(True) qsa.ProcessStatic.execute(qsa.Array([comando, temporal])) self.child(u"contenido").setText(qsa.FileStatic.read(temporal)) self.setDisabled(False) elif tipo == ".ts": if util.getOS() == "MACX": qsa.FileStatic.write( temporal, qsa.ustr(contenido, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n") ) comando = qsa.ustr( qsa.sys.installPrefix(), "/bin/linguist.app/Contents/MacOS/linguist" ) else: qsa.FileStatic.write(temporal, contenido) comando = qsa.ustr(qsa.sys.installPrefix(), "/bin/linguist") self.setDisabled(True) qsa.ProcessStatic.execute(qsa.Array([comando, temporal])) self.child("contenido").setText(qsa.FileStatic.read(temporal)) self.setDisabled(False) elif tipo == ".kut": if util.getOS() == "MACX": qsa.FileStatic.write( temporal, qsa.ustr(contenido, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n") ) comando = qsa.ustr( qsa.sys.installPrefix(), "/bin/kudesigner.app/Contents/MacOS/kudesigner" ) else: qsa.FileStatic.write(temporal, contenido) comando = qsa.ustr(qsa.sys.installPrefix(), "/bin/kudesigner") self.setDisabled(True) qsa.ProcessStatic.execute(qsa.Array([comando, temporal])) self.child("contenido").setText(qsa.FileStatic.read(temporal)) self.setDisabled(False) elif tipo in (".qs", ".py"): self.setDisabled(True) editor_ = qsa.FLScriptEditor(nombre) editor_.exec_() self.child("contenido").setText(editor_.code()) self.setDisabled(False) else: self.setDisabled(True) dialog = qsa.Dialog() dialog.setWidth(600) dialog.cancelButtonText = "" editor = qsa.TextEdit() if editor is None: raise Exception("editor is empty!") editor.textFormat = editor.PlainText editor.text = contenido dialog.add(editor) dialog.exec_() self.child("contenido").setText(editor.text) self.setDisabled(False)
def initEventFilter(self) -> None: """Inicialize event filter.""" w = self.w_ w.eventFilterFunction = qsa.ustr(w.objectName(), u".eventFilter") w.allowedEvents = qsa.Array([qsa.AQS.Close]) w.installEventFilter(w)
def cargarModulo(self, nombre_fichero: str) -> bool: """Load modules.""" util = qsa.FLUtil() fichero = qsa.File(nombre_fichero, "iso-8859-15") modulo = None descripcion = None area = None desArea = None version = None nombreIcono = None # versionMinimaFL = None dependencias = qsa.Array() fichero.open(qsa.File.ReadOnly) f = fichero.read() xmlModule = qsa.FLDomDocument() if xmlModule.setContent(f): nodeModule = xmlModule.namedItem(u"MODULE") if not nodeModule: qsa.MessageBox.critical( util.translate(u"scripts", u"Error en la carga del fichero xml .mod"), qsa.MessageBox.Ok, qsa.MessageBox.NoButton, ) modulo = nodeModule.namedItem(u"name").toElement().text() descripcion = nodeModule.namedItem(u"alias").toElement().text() area = nodeModule.namedItem(u"area").toElement().text() desArea = nodeModule.namedItem(u"areaname").toElement().text() version = nodeModule.namedItem(u"version").toElement().text() nombreIcono = nodeModule.namedItem(u"icon").toElement().text() # if nodeModule.namedItem(u"flversion"): # versionMinimaFL = nodeModule.namedItem(u"flversion").toElement().text() if nodeModule.namedItem(u"dependencies"): nodeDepend = xmlModule.elementsByTagName(u"dependency") i = 0 while_pass = True while i < len(nodeDepend): if not while_pass: i += 1 while_pass = True continue while_pass = False dependencias[i] = nodeDepend.item(i).toElement().text() i += 1 while_pass = True try: i < len(nodeDepend) except Exception: break else: if not isinstance(f, str): raise Exception("data must be str, not bytes!!") aF = f.split(u"\n") modulo = self.dameValor(aF[0]) descripcion = self.dameValor(aF[1]) area = self.dameValor(aF[2]) or "" desArea = self.dameValor(aF[3]) version = self.dameValor(aF[4]) nombreIcono = self.dameValor(aF[5]) descripcion = self.traducirCadena(descripcion or "", fichero.path or "", modulo or "") desArea = self.traducirCadena(desArea or "", fichero.path or "", modulo or "") fichIcono = qsa.File(qsa.ustr(fichero.path, u"/", nombreIcono)) fichIcono.open(qsa.File.ReadOnly) icono = fichIcono.read() if not util.sqlSelect(u"flareas", u"idarea", qsa.ustr(u"idarea = '", area, u"'")): if not util.sqlInsert(u"flareas", u"idarea,descripcion", qsa.ustr(area, u",", desArea)): qsa.MessageBox.warning( util.translate(u"scripts", u"Error al crear el área:\n") + area, qsa.MessageBox.Ok, qsa.MessageBox.NoButton, ) return False recargar = util.sqlSelect(u"flmodules", u"idmodulo", qsa.ustr(u"idmodulo = '", modulo, u"'")) curModulo = qsa.FLSqlCursor(u"flmodules") if recargar: # WITH_START curModulo.select(qsa.ustr(u"idmodulo = '", modulo, u"'")) curModulo.first() curModulo.setModeAccess(curModulo.Edit) # WITH_END else: curModulo.setModeAccess(curModulo.Insert) # WITH_START curModulo.refreshBuffer() curModulo.setValueBuffer(u"idmodulo", modulo) curModulo.setValueBuffer(u"descripcion", descripcion) curModulo.setValueBuffer(u"idarea", area) curModulo.setValueBuffer(u"version", version) curModulo.setValueBuffer(u"icono", icono) curModulo.commitBuffer() # WITH_END # curSeleccion = qsa.FLSqlCursor(u"flmodules") curModulo.setMainFilter(qsa.ustr(u"idmodulo = '", modulo, u"'")) curModulo.editRecord(False) qsa.from_project("formRecordflmodules").cargarDeDisco( qsa.ustr(fichero.path, u"/"), False) qsa.from_project("formRecordflmodules").accept() setting = "scripts/sys/modLastModule_%s" % qsa.sys.nameBD() nombre_fichero = "%s" % os.path.abspath(nombre_fichero) qsa.util.writeSettingEntry(setting, nombre_fichero) qsa.sys.processEvents() return True