class XMLAction(XMLStruct): def __init__(self, *args, **kwargs): super(XMLAction,self).__init__(*args, **kwargs) self.form = self._v("form") self.script = self._v("script") self.mainform = self._v("mainform") self.mainscript = self._v("mainscript") self.mainform_widget = None self.formrecord_widget = None self._loaded = False self._record_loaded = False def loadRecord(self, cursor = None): #if self.formrecord_widget is None: print("Loading record action %s . . . " % (self.name)) parent_or_cursor = cursor # Sin padre, ya que es ventana propia self.formrecord_widget = FLFormRecordDB(parent_or_cursor,self, load = True) self.formrecord_widget.setWindowModality(Qt.ApplicationModal) #self._record_loaded = True if self.mainform_widget: print("End of record action load %s (iface:%s ; widget:%s)" % (self.name, repr(self.mainform_widget.iface), repr(self.mainform_widget.widget) ) ) return self.formrecord_widget def load(self): if self._loaded: return self.mainform_widget print("Loading action %s . . . " % (self.name)) from pineboolib import mainForm w = mainForm.mainWindow self.mainform_widget = FLMainForm(w,self, load = True) self._loaded = True print("End of action load %s (iface:%s ; widget:%s)" % (self.name, repr(self.mainform_widget.iface), repr(self.mainform_widget.widget) ) ) return self.mainform_widget def openDefaultForm(self): print("Opening default form for Action", self.name) self.load() # Es necesario importarlo a esta altura, QApplication tiene que ser # ... construido antes que cualquier widget from pineboolib import mainForm w = mainForm.mainWindow #self.mainform_widget.init() w.addFormTab(self) #self.mainform_widget.show() def formRecord(self): return self.form def openDefaultFormRecord(self, cursor = None): print("Opening default formRecord for Action", self.name) w = self.loadRecord(cursor) #w.init() w.show() def execDefaultScript(self): print("Executing default script for Action", self.name) s = self.load() s.iface.main() def unknownSlot(self): print("Executing unknown script for Action", self.name)
class XMLAction(XMLStruct): def __init__(self, *args, **kwargs): super(XMLAction, self).__init__(*args, **kwargs) self.form = self._v("form") self.script = self._v("script") self.mainform = self._v("mainform") self.mainscript = self._v("mainscript") self.mainform_widget = None self.formrecord_widget = None self._loaded = False self._record_loaded = False def loadRecord(self, cursor=None): #if self.formrecord_widget is None: if Project.debugLevel > 50: print("Loading record action %s . . . " % (self.name)) parent_or_cursor = cursor # Sin padre, ya que es ventana propia self.formrecord_widget = FLFormRecordDB(parent_or_cursor, self, load=True) self.formrecord_widget.setWindowModality(Qt.ApplicationModal) #self._record_loaded = True if self.mainform_widget: if Project.debugLevel > 50: print("End of record action load %s (iface:%s ; widget:%s)" % (self.name, repr(self.mainform_widget.iface), repr(self.mainform_widget.widget))) return self.formrecord_widget def load(self): if self._loaded: return self.mainform_widget if Project.debugLevel > 50: print("Loading action %s . . . " % (self.name)) from pineboolib import mainForm w = mainForm.mainWindow self.mainform_widget = FLMainForm(w, self, load=True) self._loaded = True if Project.debugLevel > 50: print("End of action load %s (iface:%s ; widget:%s)" % (self.name, repr(self.mainform_widget.iface), repr(self.mainform_widget.widget))) return self.mainform_widget def openDefaultForm(self): if Project.debugLevel > 50: print("Opening default form for Action", self.name) self.load() # Es necesario importarlo a esta altura, QApplication tiene que ser # ... construido antes que cualquier widget from pineboolib import mainForm w = mainForm.mainWindow #self.mainform_widget.init() w.addFormTab(self) #self.mainform_widget.show() def formRecord(self): return self.form def openDefaultFormRecord(self, cursor=None): if Project.debugLevel > -50: print("Opening default formRecord for Action", self.name) w = self.loadRecord(cursor) #w.init() w.show() def execDefaultScript(self): if Project.debugLevel > 50: print("Executing default script for Action", self.name) s = self.load() s.iface.main() def unknownSlot(self): print("Executing unknown script for Action", self.name)
class XMLAction(XMLStruct): logger = logging.getLogger("main.XMLAction") def __init__(self, _project, *args, **kwargs): super(XMLAction, self).__init__(*args, **kwargs) self.prj = _project self.form = self._v("form") self.name = self._v("name") self.script = self._v("script") self.table = self._v("table") self.mainform = self._v("mainform") self.mainscript = self._v("mainscript") self.mainform_widget = None self.formrecord_widget = None self._loaded = False self._record_loaded = False def loadRecord(self, cursor=None): # if self.formrecord_widget is None: if not getattr(self, "formrecord", None): self.logger.warn("Record action %s is not defined. Canceled !", self.name) return None self.logger.debug("Loading record action %s . . . ", self.name) self.formrecord_widget = FLFormRecordDB(cursor, self, load=True) self.formrecord_widget.setWindowModality(Qt.ApplicationModal) self._record_loaded = True if self.mainform_widget: self.logger.debug( "End of record action load %s (iface:%s ; widget:%s)", self.name, self.mainform_widget.iface, self.mainform_widget.widget) self.initModule(self.name) return self.formrecord_widget def load(self): try: if self._loaded: return self.mainform_widget self.logger.debug("Loading action %s . . . ", self.name) w = self.prj.main_window if not self.mainform_widget: if self.prj._DGI.useDesktop(): self.mainform_widget = FLMainForm(w, self, load=False) else: from pineboolib.utils import Struct self.mainform_widget = Struct() self.mainform_widget.action = self self.mainform_widget.prj = self.prj try: self.load_script(getattr(self, "scriptform", None), self.mainform_widget) except Exception: self.logger.exception( "Error trying to load scriptform for %s", self.name) self._loaded = True self.logger.debug("End of action load %s (iface:%s ; widget:%s)", self.name, self.mainform_widget.iface, self.mainform_widget.widget) return self.mainform_widget except Exception as e: self.logger.exception("While loading action %s", self.name) return None def openDefaultForm(self): self.logger.debug("Opening default form for Action %s", self.name) w = self.prj.main_window self.initModule(self.name) self.mainform_widget = FLMainForm(w, self, load=True) w.addFormTab(self) def formRecord(self): return self.form def formRecordWidget(self): scriptName = getattr(self, "scriptformrecord", None) # Si no existe self.form_widget, lo carga con load_script. NUNCA con loadRecord. # Así cuando se haga un loadRecord de verdad (desde openDefaultFormRecord, este se cargara con su cursor de verdad if not self.formrecord_widget: self.load_script(scriptName, None) self.formrecord_widget = self.script self.formrecord_widget.widget = self.script.form if not getattr(self.formrecord_widget, "iface", None): self.formrecord_widget.iface = self.mainform_widget.widget else: self.formrecord_widget.iface = self.formrecord_widget.widget.iface self.initModule(self.name) return self.formrecord_widget def openDefaultFormRecord(self, cursor=None): self.logger.info("Opening default formRecord for Action %s", self.name) w = self.loadRecord(cursor) # w.init() if w: if pineboolib.project._DGI.localDesktop(): w.show() def execDefaultScript(self): self.logger.debug("Executing default script for Action %s", self.name) # FIXME: if not getattr(self, "scriptform", None): self.scriptform = self.name #<-- self.load_script(self.scriptform, None) self.mainform_widget = self.script self.mainform_widget.widget = self.script.form if not getattr(self.mainform_widget, "iface", None): self.mainform_widget.iface = self.mainform_widget.widget else: self.mainform_widget.iface = self.mainform_widget.widget.iface self.initModule(self.name) self.mainform_widget.iface.main() def load_script(self, scriptname, parent=None): self.logger.info("Cargando script %s de %s accion %s", scriptname, parent, self.name) parent_ = parent if parent is None: parent = self action_ = self else: action_ = parent.action # Si ya esta cargado se reusa... # if getattr(self, "script", None) and parent_: # if getattr(self.script, "form", None): # parent.script = self.script # parent.widget = self.script.form # else: # if getattr(self.script.form, "iface", None): # parent.iface = self.script.form.iface # return # import aqui para evitar dependencia ciclica import pineboolib.emptyscript python_script_path = None # primero default, luego sobreescribimos parent.script = pineboolib.emptyscript if scriptname is None: parent.script.form = parent.script.FormInternalObj( action=action_, project=pineboolib.project, parent=parent) parent.widget = parent.script.form parent.iface = parent.widget.iface return script_path_qs = pineboolib.project.path(scriptname + ".qs") script_path_py = pineboolib.project.coalesce_path( scriptname + ".py", scriptname + ".qs.py", None) overload_pyfile = os.path.join(parent.prj.tmpdir, "overloadpy", scriptname + ".py") if os.path.isfile(overload_pyfile): self.logger.warn( "Cargando %s desde overload en lugar de la base de datos!!", scriptname) try: parent.script = machinery.SourceFileLoader( scriptname, overload_pyfile).load_module() except Exception as e: self.logger.exception( "ERROR al cargar script OVERLOADPY para la accion %s:", action_.name) elif script_path_py: script_path = script_path_py self.logger.info("Loading script PY %s . . . ", scriptname) if not os.path.isfile(script_path): raise IOError try: self.logger.info( "Cargando %s : %s ", scriptname, script_path.replace(pineboolib.project.tmpdir, "tempdata")) parent.script = machinery.SourceFileLoader( scriptname, script_path).load_module() except Exception as e: self.logger.exception( "ERROR al cargar script PY para la accion %s:", action_.name) elif script_path_qs: script_path = script_path_qs self.logger.info("Loading script QS %s . . . ", scriptname) # Intentar convertirlo a Python primero con flscriptparser2 if not os.path.isfile(script_path): raise IOError("QS Script File %s not found" % script_path) python_script_path = (script_path + ".xml.py").replace( ".qs.xml.py", ".qs.py") if not os.path.isfile( python_script_path) or pineboolib.no_python_cache: self.logger.info("Convirtiendo a Python . . .") from pineboolib.flparser import postparse postparse.pythonify(script_path) if not os.path.isfile(python_script_path): raise AssertionError( u"No se encontró el módulo de Python, falló flscriptparser?" ) try: self.logger.info( "Cargando %s : %s ", scriptname, python_script_path.replace(pineboolib.project.tmpdir, "tempdata")) parent.script = machinery.SourceFileLoader( scriptname, python_script_path).load_module() except Exception as e: self.logger.exception( "ERROR al cargar script QS para la accion %s:", action_.name) parent.script.form = parent.script.FormInternalObj( action_, pineboolib.project, parent_) if parent_: parent.widget = parent.script.form if getattr(parent.widget, "iface", None): parent.iface = parent.widget.iface def unknownSlot(self): self.logger.error("Executing unknown script for Action %s", self.name) # Aquí debería arrancar el script """ Inicializa el modulo del form en caso de que no se inicializara ya """ def initModule(self, name): moduleName = self.prj.actions[name].mod.moduleName if moduleName in (None, "sys"): return if moduleName not in self.prj._initModules: self.prj._initModules.append(moduleName) self.prj.call("%s.iface.init()" % moduleName, [], None, False) return
class XMLAction(XMLStruct): def __init__(self, _project, *args, **kwargs): super(XMLAction,self).__init__(*args, **kwargs) self.prj = _project self.form = self._v("form") self.script = self._v("script") self.mainform = self._v("mainform") self.mainscript = self._v("mainscript") self.mainform_widget = None self.formrecord_widget = None self._loaded = False self._record_loaded = False def loadRecord(self, cursor = None): #if self.formrecord_widget is None: if Project.debugLevel > 50: print("Loading record action %s . . . " % (self.name)) parent_or_cursor = cursor # Sin padre, ya que es ventana propia self.formrecord_widget = FLFormRecordDB(parent_or_cursor,self, load = True) self.formrecord_widget.setWindowModality(Qt.ApplicationModal) #self._record_loaded = True if self.mainform_widget: if Project.debugLevel > 50: print("End of record action load %s (iface:%s ; widget:%s)" % (self.name, repr(self.mainform_widget.iface), repr(self.mainform_widget.widget) ) ) self.initModule(self.name) return self.formrecord_widget def load(self): if self._loaded: return self.mainform_widget if Project.debugLevel > 50: print("Loading action %s . . . " % (self.name)) w = self.prj.main_window if not self.mainform_widget: self.mainform_widget = FLMainForm(w,self, load = True) self._loaded = True if Project.debugLevel > 50: print("End of action load %s (iface:%s ; widget:%s)" % (self.name, repr(self.mainform_widget.iface), repr(self.mainform_widget.widget) ) ) self.initModule(self.name) return self.mainform_widget def openDefaultForm(self): if Project.debugLevel > 50: print("Opening default form for Action", self.name) self.load() # Es necesario importarlo a esta altura, QApplication tiene que ser # ... construido antes que cualquier widget) w = self.prj.main_window #self.mainform_widget.init() self.mainform_widget = FLMainForm(w,self, load = True) w.addFormTab(self) #self.mainform_widget.show() def formRecord(self): return self.form def openDefaultFormRecord(self, cursor = None): if Project.debugLevel > -50: print("Opening default formRecord for Action", self.name) w = self.loadRecord(cursor) #w.init() w.show() def execDefaultScript(self): if Project.debugLevel > 50: print("Executing default script for Action", self.name) self.load_script(self.scriptform, None) if getattr(self.script.form,"iface",None): self.script.form.iface.main() def load_script(self, scriptname, parent= None): # import aqui para evitar dependencia ciclica import pineboolib.emptyscript python_script_path = None self.script = pineboolib.emptyscript # primero default, luego sobreescribimos script_path_qs = self.prj.path(scriptname+".qs") script_path_py = self.prj.path(scriptname+".py") or self.prj.path(scriptname+".qs.py") overload_pyfile = os.path.join(self.prj.tmpdir,"overloadpy",scriptname+".py") if os.path.isfile(overload_pyfile): print("WARN: ** cargando %r de overload en lugar de la base de datos!!" % scriptname) try: self.script = importlib.machinery.SourceFileLoader(scriptname,overload_pyfile).load_module() except Exception as e: print("ERROR al cargar script OVERLOADPY para la accion %r:" % self.action.name, e) print(traceback.format_exc(),"---") elif script_path_py: script_path = script_path_py print("Loading script PY %s . . . " % scriptname) if not os.path.isfile(script_path): raise IOError try: print("Cargando %s : %s " % (scriptname,script_path.replace(self.prj.tmpdir,"tempdata"))) self.script = importlib.machinery.SourceFileLoader(scriptname,script_path).load_module() except Exception as e: print("ERROR al cargar script PY para la accion %r:" % self.action.name, e) print(traceback.format_exc(),"---") elif script_path_qs: script_path = script_path_qs print("Loading script QS %s . . . " % scriptname) # Intentar convertirlo a Python primero con flscriptparser2 if not os.path.isfile(script_path): raise IOError python_script_path = (script_path+".xml.py").replace(".qs.xml.py",".qs.py") if not os.path.isfile(python_script_path) or pineboolib.no_python_cache: print("Convirtiendo a Python . . .") #ret = subprocess.call(["flscriptparser2", "--full",script_path]) from pineboolib.flparser import postparse postparse.pythonify(script_path) if not os.path.isfile(python_script_path): raise AssertionError(u"No se encontró el módulo de Python, falló flscriptparser?") try: print("Cargando %s : %s " % (scriptname,python_script_path.replace(self.prj.tmpdir,"tempdata"))) self.script = importlib.machinery.SourceFileLoader(scriptname,python_script_path).load_module() #self.script = imp.load_source(scriptname,python_script_path) #self.script = imp.load_source(scriptname,filedir(scriptname+".py"), open(python_script_path,"U")) except Exception as e: print("ERROR al cargar script QS para la accion %r:" % self.name, e) print(traceback.format_exc(),"---") self.script.form = self.script.FormInternalObj(self, self.prj, parent) def unknownSlot(self): print("Executing unknown script for Action", self.name) #Aquí debería arramcar el script """ Inicializa el modulo del form en caso de que no se inicializara ya """ def initModule(self, name): moduleName = self.prj.actions[name].mod.moduleName if moduleName in (None, "sys"): return if not moduleName in self.prj._initModules: self.prj._initModules.append(moduleName) self.prj.call("%s.iface.init()" % moduleName, [], None, False) return