예제 #1
0
    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
예제 #2
0
    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)
예제 #3
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
예제 #4
0
    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")),
        )
예제 #5
0
    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])
예제 #6
0
    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()
예제 #7
0
    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)
예제 #8
0
 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)
예제 #9
0
    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