コード例 #1
0
class Project(object):
    conn = None # Almacena la conexión principal a la base de datos

    def __init__(self):
        self.tree = None
        self.root = None
        self.dbserver = None
        self.dbauth = None
        self.dbname = None
        self.apppath = None
        self.tmpdir = None
        self.parser = None

        self.actions = {}
        self.tables = {}
        self.files = {}
        self.cur = None

    def load_db(self, dbname, host, port, user, passwd):
        self.dbserver = DBServer()
        self.dbserver.host = host
        self.dbserver.port = port
        self.dbauth = DBAuth()
        self.dbauth.username = user
        self.dbauth.password = passwd
        self.dbname = dbname
        self.apppath = filedir("..")
        self.tmpdir = filedir("../tempdata")

        self.actions = {}
        self.tables = {}
        pineboolib.project = self


    def load(self, filename):
        self.parser = etree.XMLParser(
                        ns_clean=True,
                        encoding="UTF-8",
                        remove_blank_text=True,
                        )
        self.tree = etree.parse(filename, self.parser)
        self.root = self.tree.getroot()
        self.dbserver = DBServer(one(self.root.xpath("database-server")))
        self.dbauth = DBAuth(one(self.root.xpath("database-credentials")))
        self.dbname = one(self.root.xpath("database-name/text()"))
        self.apppath = one(self.root.xpath("application-path/text()"))
        self.tmpdir = filedir("../tempdata")

        self.actions = {}
        self.tables = {}
        pineboolib.project = self

    def path(self, filename):
        if filename not in self.files:
            print("WARN: Fichero %r no encontrado en el proyecto." % filename)
            return None
        return self.files[filename].path()

    def dir(self, *x):
        return os.path.join(self.tmpdir,*x)

    def run(self):
        # TODO: Refactorizar esta función en otras más sencillas
        # Preparar temporal
        if not os.path.exists(self.dir("cache")):
            os.makedirs(self.dir("cache"))
        # Conectar:

        self.conn = PNConnection(self.dbname, self.dbserver.host, self.dbserver.port, self.dbauth.username, self.dbauth.password)

        self.cur = self.conn.cursor()
        self.areas = {}
        self.cur.execute(""" SELECT idarea, descripcion FROM flareas WHERE bloqueo = TRUE """)
        for idarea, descripcion in self.cur:
            self.areas[idarea] = Struct(idarea=idarea, descripcion=descripcion)

        # Obtener modulos activos
        self.cur.execute(""" SELECT idarea, idmodulo, descripcion, icono FROM flmodules WHERE bloqueo = TRUE """)
        self.modules = {}
        for idarea, idmodulo, descripcion, icono in self.cur:
            self.modules[idmodulo] = Module(self, idarea, idmodulo, descripcion, icono)
        self.modules["sys"] = Module(self,"sys","sys","Administración",None)#Añadimos módulo sistema(falta icono)

        # Descargar proyecto . . .
        self.cur.execute(""" SELECT idmodulo, nombre, sha::varchar(16) FROM flfiles ORDER BY idmodulo, nombre """)
        f1 = open(self.dir("project.txt"),"w")
        self.files = {}
        if not os.path.exists(self.dir("cache")): raise AssertionError
        for idmodulo, nombre, sha in self.cur:
            if idmodulo not in self.modules: continue # I
            fileobj = File(self, idmodulo, nombre, sha)
            if nombre in self.files: print("WARN: 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()
            cur2.execute("SELECT contenido FROM flfiles "
                    + "WHERE idmodulo = %s AND nombre = %s "
                    + "        AND sha::varchar(16) = %s", [idmodulo, nombre, sha] )
            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:
                    print("Error al decodificar" ,idmodulo, nombre)
                    #txt = contenido.decode("UTF-8","replace").encode("ISO-8859-15","replace")
                    txt = contenido.encode("ISO-8859-15","replace")

                f2.write(txt)

        # Cargar el núcleo común del proyecto
        idmodulo = 'sys'
        for root, dirs, files in os.walk(filedir("..","share","pineboo")):
            for nombre in files:
                fileobj = File(self, idmodulo, nombre, basedir = root)
                self.files[nombre] = fileobj
                self.modules[idmodulo].add_project_file(fileobj)


    def saveGeometryForm(self, name, geo):
        name = "geo/%s" % name
        FLSettings().writeEntry(name, geo)


    def loadGeometryForm(self, name):
        name = name = "geo/%s" % name
        return FLSettings().readEntry(name, None)

    def call(self, function, aList , objectContext ):
        # FIXME: No deberíamos usar este método. En Python hay formas mejores de hacer esto.
        print("*** JS.CALL :: function:%r   argument.list:%r    context:%r ***" % (function, aList , objectContext ))
        import pineboolib.qsaglobals
        fn = None
        try:
            fn = eval(function, pineboolib.qsaglobals.__dict__)
            return fn(*aList)
        except Exception:
            print("** JS.CALL :: ERROR:", traceback.format_exc())

        # Hay que resolver la llamada a funcion "function" dentro de qsaglobals
        # y buscar la resolución de los objetos separando por puntos.

        # la llamada aqui tipica es "flfactalma.beforeCommit_articulos"


        return None
コード例 #2
0
ファイル: main.py プロジェクト: Miguel-J/pineboo-chencho
class Project(object):
    conn = None  # Almacena la conexión principal a la base de datos
    debugLevel = 100

    def __init__(self):
        self.tree = None
        self.root = None
        self.dbserver = None
        self.dbauth = None
        self.dbname = None
        self.apppath = None
        self.tmpdir = None
        self.parser = None

        self.actions = {}
        self.tables = {}
        self.files = {}
        self.cur = None

    def setDebugLevel(self, q):
        Project.debugLevel = q
        decorators.Options.DEBUG_LEVEL = q
        qt3ui.Options.DEBUG_LEVEL = q

    def load_db(self, dbname, host, port, user, passwd):
        self.dbserver = DBServer()
        self.dbserver.host = host
        self.dbserver.port = port
        self.dbauth = DBAuth()
        self.dbauth.username = user
        self.dbauth.password = passwd
        self.dbname = dbname
        self.apppath = filedir("..")
        self.tmpdir = filedir("../tempdata")

        self.actions = {}
        self.tables = {}
        pineboolib.project = self

    def load(self, filename):
        self.parser = etree.XMLParser(
            ns_clean=True,
            encoding="UTF-8",
            remove_blank_text=True,
        )
        self.tree = etree.parse(filename, self.parser)
        self.root = self.tree.getroot()
        self.dbserver = DBServer(one(self.root.xpath("database-server")))
        self.dbauth = DBAuth(one(self.root.xpath("database-credentials")))
        self.dbname = one(self.root.xpath("database-name/text()"))
        self.apppath = one(self.root.xpath("application-path/text()"))
        self.tmpdir = filedir("../tempdata")

        self.actions = {}
        self.tables = {}
        pineboolib.project = self

    def path(self, filename):
        if filename not in self.files:
            print("WARN: Fichero %r no encontrado en el proyecto." % filename)
            return None
        return self.files[filename].path()

    def dir(self, *x):
        return os.path.join(self.tmpdir, *x)

    def run(self):
        # TODO: Refactorizar esta función en otras más sencillas
        # Preparar temporal
        if not os.path.exists(self.dir("cache")):
            os.makedirs(self.dir("cache"))

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

        # Conectar:

        self.conn = PNConnection(self.dbname, self.dbserver.host,
                                 self.dbserver.port, self.dbauth.username,
                                 self.dbauth.password)

        self.cur = self.conn.cursor()
        self.areas = {}
        self.cur.execute(
            """ SELECT idarea, descripcion FROM flareas WHERE bloqueo = TRUE """
        )
        for idarea, descripcion in self.cur:
            self.areas[idarea] = Struct(idarea=idarea, descripcion=descripcion)

        # Obtener modulos activos
        self.cur.execute(
            """ SELECT idarea, idmodulo, descripcion, icono FROM flmodules WHERE bloqueo = TRUE """
        )
        self.modules = {}
        for idarea, idmodulo, descripcion, icono in self.cur:
            self.modules[idmodulo] = Module(self, idarea, idmodulo,
                                            descripcion, icono)
        self.modules["sys"] = Module(
            self, "sys", "sys", "Administración",
            None)  #Añadimos módulo sistema(falta icono)

        # Descargar proyecto . . .
        self.cur.execute(
            """ SELECT idmodulo, nombre, sha::varchar(16) FROM flfiles ORDER BY idmodulo, nombre """
        )
        f1 = open(self.dir("project.txt"), "w")
        self.files = {}
        tiempo_ini = time.time()
        if not os.path.exists(self.dir("cache")): raise AssertionError
        for idmodulo, nombre, sha in self.cur:
            if idmodulo not in self.modules: continue  # I
            fileobj = File(self, idmodulo, nombre, sha)
            if nombre in self.files:
                print("WARN: 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()
            cur2.execute(
                "SELECT contenido FROM flfiles " +
                "WHERE idmodulo = %s AND nombre = %s " +
                "        AND sha::varchar(16) = %s", [idmodulo, nombre, sha])
            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:
                    print("Error al decodificar", idmodulo, nombre)
                    #txt = contenido.decode("UTF-8","replace").encode("ISO-8859-15","replace")
                    txt = contenido.encode("ISO-8859-15", "replace")

                f2.write(txt)
        tiempo_fin = time.time()
        if Project.debugLevel > 50:
            print("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:
                fileobj = File(self, idmodulo, nombre, basedir=root)
                self.files[nombre] = fileobj
                self.modules[idmodulo].add_project_file(fileobj)

    def saveGeometryForm(self, name, geo):
        name = "geo/%s" % name
        FLSettings().writeEntry(name, geo)

    def loadGeometryForm(self, name):
        name = name = "geo/%s" % name
        return FLSettings().readEntry(name, None)

    def call(self, function, aList, objectContext):
        # FIXME: No deberíamos usar este método. En Python hay formas mejores de hacer esto.
        if Project.debugLevel > 50:
            print(
                "*** JS.CALL :: function:%r   argument.list:%r    context:%r ***"
                % (function, aList, objectContext))
        import pineboolib.qsaglobals
        fn = None
        try:
            fn = eval(function, pineboolib.qsaglobals.__dict__)
            return fn(*aList)
        except Exception:
            print("** JS.CALL :: ERROR:",
                  traceback.format_exc().splitlines()[-1])

        # Hay que resolver la llamada a funcion "function" dentro de qsaglobals
        # y buscar la resolución de los objetos separando por puntos.

        # la llamada aqui tipica es "flfactalma.beforeCommit_articulos"

        return None
コード例 #3
0
    def run(self):
        # TODO: Refactorizar esta función en otras más sencillas
        # Preparar temporal
        if not os.path.exists(self.dir("cache")):
            os.makedirs(self.dir("cache"))
        # Conectar:

        self.conn = PNConnection(self.dbname, self.dbserver.host, self.dbserver.port, self.dbauth.username, self.dbauth.password)

        self.cur = self.conn.cursor()
        self.areas = {}
        self.cur.execute(""" SELECT idarea, descripcion FROM flareas WHERE bloqueo = TRUE """)
        for idarea, descripcion in self.cur:
            self.areas[idarea] = Struct(idarea=idarea, descripcion=descripcion)

        # Obtener modulos activos
        self.cur.execute(""" SELECT idarea, idmodulo, descripcion, icono FROM flmodules WHERE bloqueo = TRUE """)
        self.modules = {}
        for idarea, idmodulo, descripcion, icono in self.cur:
            self.modules[idmodulo] = Module(self, idarea, idmodulo, descripcion, icono)
        self.modules["sys"] = Module(self,"sys","sys","Administración",None)#Añadimos módulo sistema(falta icono)

        # Descargar proyecto . . .
        self.cur.execute(""" SELECT idmodulo, nombre, sha::varchar(16) FROM flfiles ORDER BY idmodulo, nombre """)
        f1 = open(self.dir("project.txt"),"w")
        self.files = {}
        if not os.path.exists(self.dir("cache")): raise AssertionError
        for idmodulo, nombre, sha in self.cur:
            if idmodulo not in self.modules: continue # I
            fileobj = File(self, idmodulo, nombre, sha)
            if nombre in self.files: print("WARN: 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()
            cur2.execute("SELECT contenido FROM flfiles "
                    + "WHERE idmodulo = %s AND nombre = %s "
                    + "        AND sha::varchar(16) = %s", [idmodulo, nombre, sha] )
            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:
                    print("Error al decodificar" ,idmodulo, nombre)
                    #txt = contenido.decode("UTF-8","replace").encode("ISO-8859-15","replace")
                    txt = contenido.encode("ISO-8859-15","replace")

                f2.write(txt)

        # Cargar el núcleo común del proyecto
        idmodulo = 'sys'
        for root, dirs, files in os.walk(filedir("..","share","pineboo")):
            for nombre in files:
                fileobj = File(self, idmodulo, nombre, basedir = root)
                self.files[nombre] = fileobj
                self.modules[idmodulo].add_project_file(fileobj)
コード例 #4
0
ファイル: main.py プロジェクト: Miguel-J/pineboo-chencho
    def run(self):
        # TODO: Refactorizar esta función en otras más sencillas
        # Preparar temporal
        if not os.path.exists(self.dir("cache")):
            os.makedirs(self.dir("cache"))

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

        # Conectar:

        self.conn = PNConnection(self.dbname, self.dbserver.host,
                                 self.dbserver.port, self.dbauth.username,
                                 self.dbauth.password)

        self.cur = self.conn.cursor()
        self.areas = {}
        self.cur.execute(
            """ SELECT idarea, descripcion FROM flareas WHERE bloqueo = TRUE """
        )
        for idarea, descripcion in self.cur:
            self.areas[idarea] = Struct(idarea=idarea, descripcion=descripcion)

        # Obtener modulos activos
        self.cur.execute(
            """ SELECT idarea, idmodulo, descripcion, icono FROM flmodules WHERE bloqueo = TRUE """
        )
        self.modules = {}
        for idarea, idmodulo, descripcion, icono in self.cur:
            self.modules[idmodulo] = Module(self, idarea, idmodulo,
                                            descripcion, icono)
        self.modules["sys"] = Module(
            self, "sys", "sys", "Administración",
            None)  #Añadimos módulo sistema(falta icono)

        # Descargar proyecto . . .
        self.cur.execute(
            """ SELECT idmodulo, nombre, sha::varchar(16) FROM flfiles ORDER BY idmodulo, nombre """
        )
        f1 = open(self.dir("project.txt"), "w")
        self.files = {}
        tiempo_ini = time.time()
        if not os.path.exists(self.dir("cache")): raise AssertionError
        for idmodulo, nombre, sha in self.cur:
            if idmodulo not in self.modules: continue  # I
            fileobj = File(self, idmodulo, nombre, sha)
            if nombre in self.files:
                print("WARN: 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()
            cur2.execute(
                "SELECT contenido FROM flfiles " +
                "WHERE idmodulo = %s AND nombre = %s " +
                "        AND sha::varchar(16) = %s", [idmodulo, nombre, sha])
            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:
                    print("Error al decodificar", idmodulo, nombre)
                    #txt = contenido.decode("UTF-8","replace").encode("ISO-8859-15","replace")
                    txt = contenido.encode("ISO-8859-15", "replace")

                f2.write(txt)
        tiempo_fin = time.time()
        if Project.debugLevel > 50:
            print("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:
                fileobj = File(self, idmodulo, nombre, basedir=root)
                self.files[nombre] = fileobj
                self.modules[idmodulo].add_project_file(fileobj)