コード例 #1
0
ファイル: FLManager.py プロジェクト: codacy-badger/pineboo
    def fetchLargeValue(self, refKey):
        """
        Obtiene el valor de gran tamaño segun su clave de referencia.

        @param refKey Clave de referencia. Esta clave se suele obtener mediante FLManager::storeLargeValue
        @return Valor de gran tamaño almacenado
        """
        if refKey is None:
            return None
        if not refKey[0:3] == "RK@":
            return None

        if self._prj.singleFLLarge():
            tableName = "fllarge"
        else:
            tableName = "fllarge_" + refKey.split("@")[1]

        if not self.existsTable(tableName):
            return None

        q = FLSqlQuery()
        q.setSelect("contenido")
        q.setFrom(tableName)
        q.setWhere(" refkey = '%s'" % refKey)
        if q.exec_() and q.first():
            v = q.value(0)
            del q
            # print(v)
            v = clearXPM(v)
            # print(v)
            return v
コード例 #2
0
def parseKey(name=None):
    ret = None
    value = None
    if name is None:
        ret = None
    else:
        q = FLSqlQuery()
        # q.setForwardOnly(True)
        q.exec_("SELECT contenido FROM fllarge WHERE refkey='%s'" % name)
        if q.next():
            value = clearXPM(q.value(0))

        imgFile = filedir("../tempdata")
        imgFile += "/%s.png" % name
        if not os.path.exists(imgFile) and value:
            pix = QPixmap(value)
            if not pix.save(imgFile):
                self.logger.warn("rml:refkey2cache No se ha podido guardar la imagen %s" % imgFile)
                ret = None

        ret = imgFile

    return ret
コード例 #3
0
    def oficial_cargarModulo(self, nombreFichero=None):
        util = qsatype.FLUtil()
        if util.getOS() == u"WIN32":
            nombreFichero = nombreFichero[0:len(nombreFichero) - 1]

        if not isinstance(nombreFichero, str):
            nombreFichero = nombreFichero.data().decode("utf-8")

        fichero = qsatype.File(nombreFichero, "iso-8859-15")
        modulo = None
        descripcion = None
        area = None
        desArea = None
        version = None
        nombreIcono = None
        versionMinimaFL = None
        dependencias = qsatype.Array()
        fichero.open(qsatype.File.ReadOnly)
        f = fichero.read()
        xmlModule = qsatype.FLDomDocument()
        if xmlModule.setContent(f):
            nodeModule = xmlModule.namedItem(u"MODULE")
            if not nodeModule:
                MessageBox.critical(
                    util.translate(u"scripts",
                                   u"Error en la carga del fichero xml .mod"),
                    MessageBox.Ok, 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:
            aF = f.split(u"\n")
            modulo = self.iface.dameValor(aF[0])
            descripcion = self.iface.dameValor(aF[1])
            area = self.iface.dameValor(aF[2])
            desArea = self.iface.dameValor(aF[3])
            version = self.iface.dameValor(aF[4])
            nombreIcono = self.iface.dameValor(aF[5])
            if len(aF) > 6:
                versionMinimaFL = self.iface.dameValor(aF[6])
            if len(aF) > 7:
                # DEBUG:: Argument 0 not understood
                # DEBUG:: <Value><Constant><regexbody><regexchar
                # arg00="LBRACKET"/><regexchar arg00="COMMA"/><regexchar
                # arg00="SEMI"/><regexchar
                # arg00="RBRACKET"/></regexbody></Constant></Value>
                dependencias = self.ifacedameValor(aF[7]).split(unknownarg)

        descripcion = self.iface.traducirCadena(descripcion, fichero.path,
                                                modulo)
        desArea = self.iface.traducirCadena(desArea, fichero.path, modulo)
        fichIcono = qsatype.File(ustr(fichero.path, u"/", nombreIcono))
        fichIcono.open(qsatype.File.ReadOnly)
        icono = fichIcono.read()
        icono = clearXPM(icono)
        # DEBUG:: Argument 0 not understood
        # DEBUG:: <Value><Constant><regexbody><regexchar arg00="LBRACKET"/><regexchar arg00="ICONST:'0'"/><regexchar arg00="MINUS"/><regexchar arg00="ICONST:'9'"/><regexchar arg00="RBRACKET"/><regexchar arg00="PLUS"/><regexchar arg00="PERIOD"/><regexchar arg00="LBRACKET"/><regexchar arg00="ICONST:'0'"/><regexchar arg00="MINUS"/><regexchar arg00="ICONST:'9'"/><regexchar arg00="RBRACKET"/><regexchar arg00="PLUS"/></regexbody></Constant></Value>
        #versionSys = sys.version().match(unknownarg)
        # if self.iface.compararVersiones(versionSys, versionMinimaFL) == 2:
        #    contVersion = MessageBox.warning(util.translate(u"scripts", u"Este módulo necesita la versión ") + versionMinimaFL + util.translate(u"scripts", u" o superior de la aplicación base,\nactualmente la versión instalada es la ") + sys.version() + util.translate(u"scripts", u".\nFacturaLUX puede fallar por esta causa.\n¿Desea continuar la carga?"), MessageBox.Yes, MessageBox.No)
        #    if contVersion == MessageBox.No:
        #        return
        if not util.sqlSelect(u"flareas", u"idarea",
                              ustr(u"idarea = '", area, u"'")):
            if not util.sqlInsert(u"flareas", u"idarea,descripcion",
                                  ustr(area, u",", desArea)):
                MessageBox.warning(
                    util.translate(u"scripts", u"Error al crear el área:\n") +
                    area, MessageBox.Ok, MessageBox.NoButton)
                return False
        recargar = util.sqlSelect(u"flmodules", u"idmodulo",
                                  ustr(u"idmodulo = '", modulo, u"'"))
        curModulo = qsatype.FLSqlCursor(u"flmodules")
        if recargar:
            # WITH_START
            curModulo.select(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 = qsatype.FLSqlCursor(u"flmodules")
        curModulo.setMainFilter(ustr(u"idmodulo = '", modulo, u"'"))
        curModulo.editRecord()
        formRecordflmodules.cargarDeDisco(ustr(fichero.path, u"/"), False)
        formRecordflmodules.accept()
        sys.processEvents()
        return True
コード例 #4
0
    def run(self):
        # TODO: Refactorizar esta función en otras más sencillas
        # Preparar temporal
        if self.deleteCache and not not os.path.exists(
                self.dir("cache/%s" % self.dbname)):
            self.logger.debug("DEVELOP: DeleteCache Activado\nBorrando %s",
                              self.dir("cache/%s" % self.dbname))
            for root, dirs, files in os.walk(self.dir("cache/%s" %
                                                      self.dbname),
                                             topdown=False):
                for name in files:
                    os.remove(os.path.join(root, name))
                for name in dirs:
                    os.rmdir(os.path.join(root, name))
            # borrando de share
            # for root, dirs, files in os.walk(self.dir("../share/pineboo"), topdown=False):
            #    for name in files:
            #        if name.endswith("qs.py") or name.endswith("qs.py.debug") or name.endswith("qs.xml"):
            #            os.remove(os.path.join(root, name))

        if not os.path.exists(self.dir("cache")):
            os.makedirs(self.dir("cache"))

        # Conectar:

        if not self.conn:
            self.conn = PNConnection(self.dbname, self.dbserver.host,
                                     self.dbserver.port, self.dbauth.username,
                                     self.dbauth.password, self.dbserver.type)
        if self.conn.conn is False:
            return False

        # Se verifica que existen estas tablas
        for table in ("flareas", "flmodules", "flfiles", "flgroups", "fllarge",
                      "flserial", "flusers", "flvar"):
            self.conn.manager().createSystemTable(table)

        util = FLUtil()
        util.writeSettingEntry(u"DBA/lastDB", self.dbname)
        self.cur = self.conn.cursor()
        self.areas = {}
        self.cur.execute(
            """ SELECT idarea, descripcion FROM flareas WHERE 1 = 1""")
        for idarea, descripcion in self.cur:
            self.areas[idarea] = Struct(idarea=idarea, descripcion=descripcion)

        self.areas["sys"] = Struct(idarea="sys", descripcion="Area de Sistema")

        # Obtener modulos activos
        self.cur.execute(
            """ SELECT idarea, idmodulo, descripcion, icono FROM flmodules WHERE bloqueo = %s """
            % self.conn.driver().formatValue("bool", "True", False))
        self.modules = {}
        for idarea, idmodulo, descripcion, icono in self.cur:
            icono = clearXPM(icono)
            self.modules[idmodulo] = Module(self, idarea, idmodulo,
                                            descripcion, icono)

        file_object = open(filedir("..", "share", "pineboo", "sys.xpm"), "r")
        icono = file_object.read()
        file_object.close()
        icono = clearXPM(icono)

        self.modules["sys"] = Module(self, "sys", "sys", "Administración",
                                     icono)

        # Descargar proyecto . . .

        self.cur.execute(
            """ SELECT idmodulo, nombre, sha FROM flfiles ORDER BY idmodulo, nombre """
        )
        size_ = len(self.cur.fetchall())
        self.cur.execute(
            """ SELECT idmodulo, nombre, sha FROM flfiles ORDER BY idmodulo, nombre """
        )
        f1 = open(self.dir("project.txt"), "w")
        self.files = {}
        if self._DGI.useDesktop() and self._DGI.localDesktop():
            tiempo_ini = time.time()
        if not os.path.exists(self.dir("cache")):
            raise AssertionError
        # if self.parseProject:
        if self._DGI.useDesktop() and self._DGI.localDesktop():
            util.createProgressDialog("Pineboo", size_)
        p = 0
        for idmodulo, nombre, sha in self.cur:
            p = p + 1
            if self._DGI.useDesktop() and self._DGI.localDesktop():
                util.setProgress(p)
                util.setLabelText("Convirtiendo %s." % nombre)
            if idmodulo not in self.modules:
                continue  # I
            fileobj = File(self, idmodulo, nombre, sha)
            if nombre in self.files:
                self.logger.warn(
                    "run: file %s already loaded, overwritting..." % nombre)
            self.files[nombre] = fileobj
            self.modules[idmodulo].add_project_file(fileobj)
            f1.write(fileobj.filekey + "\n")
            if os.path.exists(self.dir("cache", fileobj.filekey)):
                continue
            fileobjdir = os.path.dirname(self.dir("cache", fileobj.filekey))
            if not os.path.exists(fileobjdir):
                os.makedirs(fileobjdir)

            cur2 = self.conn.cursor()
            sql = "SELECT contenido FROM flfiles WHERE idmodulo = %s AND nombre = %s AND sha = %s" % (
                self.conn.driver().formatValue("string", idmodulo, False),
                self.conn.driver().formatValue("string", nombre, False),
                self.conn.driver().formatValue("string", sha, False))
            cur2.execute(sql)
            for (contenido, ) in cur2:
                f2 = open(self.dir("cache", fileobj.filekey), "wb")
                # La cadena decode->encode corrige el bug de guardado de
                # AbanQ/Eneboo
                txt = ""
                try:
                    # txt = contenido.decode("UTF-8").encode("ISO-8859-15")
                    txt = contenido.encode("ISO-8859-15")
                except Exception:
                    self.logger.exception("Error al decodificar %s %s",
                                          idmodulo, nombre)
                    # txt = contenido.decode("UTF-8","replace").encode("ISO-8859-15","replace")
                    txt = contenido.encode("ISO-8859-15", "replace")

                f2.write(txt)

            if self.parseProject and nombre.endswith(".qs"):
                self.parseScript(self.dir("cache", fileobj.filekey))

        if self._DGI.useDesktop() and self._DGI.localDesktop():
            tiempo_fin = time.time()
            self.logger.info(
                "Descarga del proyecto completo a disco duro: %.3fs",
                (tiempo_fin - tiempo_ini))

        # Cargar el núcleo común del proyecto
        idmodulo = 'sys'
        for root, dirs, files in os.walk(filedir("..", "share", "pineboo")):
            for nombre in files:
                if root.find("modulos") == -1:
                    fileobj = File(self, idmodulo, nombre, basedir=root)
                    self.files[nombre] = fileobj
                    self.modules[idmodulo].add_project_file(fileobj)
                    if self.parseProject and nombre.endswith(".qs"):
                        self.parseScript(self.dir(root, nombre))

        if self._DGI.useDesktop() and self._DGI.localDesktop():
            try:
                util.destroyProgressDialog()
            except Exception as e:
                self.logger.error(e)

        self.loadTranslations()
        self.readState()
        self.acl_ = FLAccessControlLists()
        self.acl_.init_()