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
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
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 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)