示例#1
0
 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
示例#2
0
    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
示例#3
0
 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
示例#4
0
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)
示例#5
0
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
示例#6
0
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)
示例#7
0
文件: main.py 项目: maaruiz/pineboo
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