예제 #1
0
 def setProperty(self, object, name, value, categoryName):
     """ Change the property 'name' of an object to a new value.
     """
     if self.configDataAccessor().process() and name == "code":
         # for UserCodeTool
         process = self.configDataAccessor().process()
         try:
             process.disableRecording()
             exec(value)
             process.enableRecording()
             process.resetModified()
             process.resetModifiedObjects()
         except Exception as e:
             error = "Error in python code (see logfile for details):\n" + str(
                 e)
             logging.warning(__name__ +
                             ": setProperty: Error in python code: " +
                             exception_traceback())
             self._parameterErrors[str(id(object)) + "." + name] = error
             return error
     elif isinstance(value, str):
         # for e.g. cms.InputTag
         try:
             exec("value=" + value)
         except:
             pass
     if name != "comment":
         try:
             object.setParameter(name, value)
         except Exception as e:
             error = "Cannot set parameter " + name + " (see logfile for details):\n" + str(
                 e)
             logging.warning(__name__ +
                             ": setProperty: Cannot set parameter " + name +
                             ": " + exception_traceback())
             self._parameterErrors[str(id(object)) + "." + name] = error
             return error
     elif name == "comment":
         try:
             object.setComment(value)
         except Exception as e:
             error = "Cannot set comment (see logfile for details):\n" + str(
                 e)
             logging.warning(__name__ +
                             ": setProperty: Cannot set comment " +
                             exception_traceback())
             self._parameterErrors[str(id(object)) + "." + name] = error
             return error
     if str(id(object)) + "." + name in self._parameterErrors.keys():
         del self._parameterErrors[str(id(object)) + "." + name]
     return True
예제 #2
0
 def updateProcess(self, cp=True):
     logging.debug(__name__ + ": updateProcess")
     if cp:
         process = copy.deepcopy(self._processCopy)
     else:
         process = self.configDataAccessor().process()
     try:
         for tool in self._toolList:
             tool.apply(process)
             if not process.checkRecording():
                 logging.error(__name__ + ": Could not apply tool: " +
                               self.label(tool) +
                               " (problem with enable recording flag)")
                 QCoreApplication.instance().errorMessage(
                     "Could not apply tool: " + self.label(tool) +
                     " (problem with enable recording flag)")
                 return False
     except Exception as e:
         logging.error(__name__ + ": Could not apply tool: " +
                       self.label(tool) + ": " + exception_traceback())
         QCoreApplication.instance().errorMessage(
             "Could not apply tool (see log file for details):\n" + str(e))
         return False
     self.configDataAccessor().setProcess(process)
     self._parameterErrors = {}
     return True
예제 #3
0
 def importConfig(self,filename):
     logging.debug(__name__ + ": importConfig")
     statusMessage = self.plugin().application().startWorking("Import python configuration in Editor")
     try:
         good=self.open(filename,False)
     except:
         logging.error(__name__ + ": Could not open configuration file: "+exception_traceback())
         self.plugin().application().errorMessage("Could not open configuration file (see log file for details).")
         self.plugin().application().stopWorking(statusMessage,"failed")
         return False
     if not good:
         logging.error(__name__ + ": Could not open configuration file.")
         self.plugin().application().errorMessage("Could not open configuration file.")
         self.plugin().application().stopWorking(statusMessage,"failed")
         return False
     if not self.dataAccessor().process():
         logging.error(__name__ + ": Config does not contain a process and cannot be edited using ConfigEditor.")
         self.plugin().application().errorMessage("Config does not contain a process and cannot be edited using ConfigEditor.")
         self.plugin().application().stopWorking(statusMessage,"failed")
         return False
     if self._filename and not self.dataAccessor().isReplaceConfig():
         self.setFilename(None)
         self.updateLabel()
     self.toolDataAccessor().setConfigDataAccessor(self.dataAccessor())
     self.tab().propertyView().setDataObject(None)
     self._updateCode()
     self._applyPatToolAction.setVisible(True)
     self.plugin().application().stopWorking(statusMessage)
     return True
예제 #4
0
    def _findIn(self, object,dialog):
        # find Label
        foundLabel=True
        findLabel=dialog.label()
        if findLabel!="":
            label=self.dataAccessor().label(object)
            #logging.debug(__name__ +': _findIn: ' + label)
            if not dialog.caseSensitive():
                label=label.lower()
                findLabel=findLabel.lower()
            if dialog.exactMatch():
                foundLabel=findLabel=="" or findLabel==label
            else:
                foundLabel=findLabel in label

        # find property
        foundProperties=True
        findProperties=dialog.properties()
        if len(findProperties)>0 and (findProperties[0][0]!="" or findProperties[0][1]!=""): 
            properties=[(p[1],p[2]) for p in self.dataAccessor().properties(object)]
            if not dialog.caseSensitive():
                properties=[(str(property[0]).lower(),str(property[1]).lower()) for property in properties]
                findProperties=[(str(property[0]).lower(),str(property[1]).lower()) for property in findProperties]
            if dialog.exactMatch():
                for findProperty in findProperties:
                    foundProperties=(foundProperties and\
                        True in [(findProperty[0]=="" or findProperty[0]==p[0]) and\
                                 (findProperty[1]=="" or findProperty[1]==p[1]) for p in properties])
            else:
                for findProperty in findProperties:
                    foundProperties=(foundProperties and\
                        True in [findProperty[0] in p[0] and\
                                 findProperty[1] in p[1] for p in properties])

        # find property
        findScripts=dialog.scripts()
        foundScripts=True
        if len(findScripts)>0 and findScripts[0]!="":
            dataAccessorObject=BasicDataAccessorInterface(object,self.dataAccessor())
            for findScript in findScripts:
                try:
                    foundScripts=(foundScripts and\
                       (findScript=="" or dataAccessorObject.runScript(findScript)))
                except Exception as e:
                    foundScripts=False
                    logging.info("Error in script: "+ exception_traceback())
                    self._message="Error in script: "+ str(e)

        # combine the searches
        found=foundLabel and foundProperties and foundScripts
        if found:
            results=[object]
        else:
            results=[]
        for daughter in self.applyFilter(self.dataAccessor().children(object)):
            for object in self._findIn(daughter,dialog):
                if not object in results:
                    results+=[object]
        return results
예제 #5
0
 def setProperty(self, object, name, value, categoryName):
     """ Change the property 'name' of an object to a new value.
     """
     if self.configDataAccessor().process() and name=="code":
         # for UserCodeTool
         process=self.configDataAccessor().process()
         try:
             process.disableRecording()
             exec(value)
             process.enableRecording()
             process.resetModified()
             process.resetModifiedObjects()
         except Exception as e:
             error="Error in python code (see logfile for details):\n"+str(e)
             logging.warning(__name__ + ": setProperty: Error in python code: "+exception_traceback())
             self._parameterErrors[str(id(object))+"."+name]=error
             return error
     elif isinstance(value,str):
         # for e.g. cms.InputTag
         try:
             exec("value="+value)
         except:
             pass
     if name!="comment":
         try:
             object.setParameter(name,value)
         except Exception as e:
             error="Cannot set parameter "+name+" (see logfile for details):\n"+str(e)
             logging.warning(__name__ + ": setProperty: Cannot set parameter "+name+": "+exception_traceback())
             self._parameterErrors[str(id(object))+"."+name]=error
             return error
     elif name=="comment":
         try:
             object.setComment(value)
         except Exception as e:
             error="Cannot set comment (see logfile for details):\n"+str(e)
             logging.warning(__name__ + ": setProperty: Cannot set comment "+exception_traceback())
             self._parameterErrors[str(id(object))+"."+name]=error
             return error  
     if str(id(object))+"."+name in self._parameterErrors.keys():
         del self._parameterErrors[str(id(object))+"."+name]
     return True
예제 #6
0
    def _findIn(self, object, dialog):
        # find Label
        foundLabel = True
        findLabel = dialog.label()
        if findLabel != "":
            label = self.dataAccessor().label(object)
            #logging.debug(__name__ +': _findIn: ' + label)
            if not dialog.caseSensitive():
                label = label.lower()
                findLabel = findLabel.lower()
            if dialog.exactMatch():
                foundLabel = findLabel == "" or findLabel == label
            else:
                foundLabel = findLabel in label

        # find property
        foundProperties = True
        findProperties = dialog.properties()
        if len(findProperties) > 0 and (findProperties[0][0] != ""
                                        or findProperties[0][1] != ""):
            properties = [(p[1], p[2])
                          for p in self.dataAccessor().properties(object)]
            if not dialog.caseSensitive():
                properties = [(str(property[0]).lower(),
                               str(property[1]).lower())
                              for property in properties]
                findProperties = [(str(property[0]).lower(),
                                   str(property[1]).lower())
                                  for property in findProperties]
            if dialog.exactMatch():
                for findProperty in findProperties:
                    foundProperties=(foundProperties and\
                        True in [(findProperty[0]=="" or findProperty[0]==p[0]) and\
                                 (findProperty[1]=="" or findProperty[1]==p[1]) for p in properties])
            else:
                for findProperty in findProperties:
                    foundProperties=(foundProperties and\
                        True in [findProperty[0] in p[0] and\
                                 findProperty[1] in p[1] for p in properties])

        # find property
        findScripts = dialog.scripts()
        foundScripts = True
        if len(findScripts) > 0 and findScripts[0] != "":
            dataAccessorObject = BasicDataAccessorInterface(
                object, self.dataAccessor())
            for findScript in findScripts:
                try:
                    foundScripts=(foundScripts and\
                       (findScript=="" or dataAccessorObject.runScript(findScript)))
                except Exception, e:
                    foundScripts = False
                    logging.info("Error in script: " + exception_traceback())
                    self._message = "Error in script: " + str(e)
예제 #7
0
 def read(self, object, levels=1):
     """ reads contents of a branch """
     logging.debug(__name__ + ": read")
     if isinstance(object, BranchDummy):
         if hasattr(object, "product"):
             return object.product
         if not self._events:
             return object
         try:
             self._events.getByLabel(object.branchtuple[2],
                                     object.branchtuple[3],
                                     object.branchtuple[4],
                                     object.branchtuple[1])
             if object.branchtuple[1].isValid():
                 product = object.branchtuple[1].product()
                 if not isinstance(
                         product,
                     (int, float, long, complex, str, unicode, bool)):
                     # override comparison operator of object
                     try:
                         type(product).__eq__ = eq
                         type(product).__ne__ = ne
                     except:
                         pass
                 self._dataObjects.insert(self._dataObjects.index(object),
                                          product)
                 self._dataObjects.remove(object)
                 self._edmLabel[id(product)] = object.branchtuple[0]
                 object.product = product
                 object = product
             else:
                 self._edmChildrenObjects[id(object)] = [
                     ("ERROR", "ERROR: Branch is not valid.", False, True)
                 ]
                 logging.info("Branch is not valid: " +
                              object.branchtuple[0] + ".")
                 object.invalid = True
                 return object
         except Exception as e:
             self._edmChildrenObjects[id(object)] = [
                 ("ERROR", "ERROR: Unable to read branch : " + str(e),
                  False, True)
             ]
             object.unreadable = True
             logging.warning("Unable to read branch " +
                             object.branchtuple[0] + " : " +
                             exception_traceback())
             return object
     if self.isRead(object, levels):
         return object
     if levels > 0:
         self.readDaughtersRecursive(object, [], levels)
     return object
예제 #8
0
 def apply(self):
     # allow property view to process parameter changes
     if not self.ok.hasFocus():
         self._properties.clearFocus()
         self.ok.setFocus()
         return
     parameterErrors = self._toolDataAccessor.parameterErrors(
         self._selectedTool)
     if len(parameterErrors) > 0:
         message = "\n".join([error for error in parameterErrors])
         QCoreApplication.instance().errorMessage(message)
         return
     ok = True
     if self._selectedTool:
         try:
             self._selectedTool.apply(
                 self._toolDataAccessor.configDataAccessor().process())
             if not self._toolDataAccessor.configDataAccessor().process(
             ).checkRecording():
                 ok = False
                 logging.error(
                     __name__ + ": Could not apply tool " +
                     self._toolDataAccessor.label(self._selectedTool) +
                     " (problem with enable recording flag) Please restart the ConfigEditor."
                 )
                 QCoreApplication.instance().errorMessage(
                     "Could not apply tool " +
                     self._toolDataAccessor.label(self._selectedTool) +
                     " (problem with enable recording flag) Please restart the ConfigEditor."
                 )
         except Exception as e:
             ok = False
             logging.error(
                 __name__ + ": Could not apply tool " +
                 self._toolDataAccessor.label(self._selectedTool) + ": " +
                 exception_traceback())
             QCoreApplication.instance().errorMessage(
                 "Cannot apply tool " +
                 self._toolDataAccessor.label(self._selectedTool) +
                 " (see log file for details):\n" + str(e))
     else:
         ok = False
         logging.error(__name__ +
                       ": Could not apply tool: No tool selected.")
         QCoreApplication.instance().errorMessage(
             "Cannot apply tool: No tool selected.")
     # recover process copy to undo changes during the tool dialog
     self._toolDataAccessor.configDataAccessor().setProcess(
         self._processCopy)
     if ok:
         self.accept()
예제 #9
0
    def recursePSetProperties(self, name, object, readonly=None):
        #logging.debug(__name__ + ": recursePSetProperties: " + name)
        properties = []
        if name != "" and not isinstance(object, typ.PSet):
            try:
                partyp = str(type(object)).split("'")[1].replace(
                    "FWCore.ParameterSet.Types", "cms")
                if isinstance(object, cms.InputTag):
                    inputtagValue = object.pythonValue()
                    for i in range(3 - len(inputtagValue.split(","))):
                        inputtagValue += ', ""'
                    properties += [
                        ("String", name, "cms.InputTag(" + inputtagValue + ")",
                         partyp, readonly)
                    ]
                elif isinstance(object, cms.bool):
                    properties += [("Boolean", name, object.value(), partyp,
                                    readonly)]
                elif isinstance(
                        object,
                    (cms.int32, cms.uint32, cms.int64, cms.uint64)):
                    properties += [("Integer", name, object.value(), partyp,
                                    readonly)]
                elif isinstance(object, cms.double):
                    properties += [("Double", name, object.value(), partyp,
                                    readonly)]
                elif hasattr(object, "pythonValue"):
                    properties += [("String", name,
                                    str(object.pythonValue()).strip("\"'"),
                                    partyp, readonly)]
                elif hasattr(object, "value"):
                    properties += [("MultilineString", name,
                                    str(object.value()), partyp, readonly)]
                else:
                    properties += [("MultilineString", name, str(object),
                                    partyp, readonly)]
            except Exception:
                logging.error(__name__ + ": " + exception_traceback())

        if isinstance(object, ConfigFolder):
            readonly = True

        params = self.parameters(object)[:]
        params.sort(lambda x, y: cmp(x[0].lower(), y[0].lower()))
        for key, value in params:
            keyname = name
            if name != "":
                keyname += "."
            keyname += key
            properties += self.recursePSetProperties(keyname, value, readonly)
        return properties
예제 #10
0
 def setProperty(self, object, name, value, categoryName):
     """ Change the property 'name' of an object to a new value.
     """
     if self.configDataAccessor().process() and name=="code":
         # for UserCodeTool
         process=self.configDataAccessor().process()
         try:
             process.disableRecording()
             exec value
             process.enableRecording()
             process.resetModified()
             process.resetModifiedObjects()
         except Exception,e:
             error="Error in python code (see logfile for details):\n"+str(e)
             logging.warning(__name__ + ": setProperty: Error in python code: "+exception_traceback())
             self._parameterErrors[str(id(object))+"."+name]=error
             return error
예제 #11
0
    def createBoxesRecursive(self,
                             operationId,
                             objects,
                             widgetParent,
                             positionName="0"):
        """ Creates a box from an object.
        
        All children of this object are created recursively.
        """
        #logging.debug(__name__ + ": createBoxesRecursive")
        if self._sortBeforeArranging and self.arrangeUsingRelations():
            thread = ThreadChain(self._sortByRelations, objects)
            while thread.isRunning():
                if not Application.NO_PROCESS_EVENTS:
                    QCoreApplication.instance().processEvents()
            objects = thread.returnValue()

        i = 1
        for object in objects:
            if operationId != self._operationId:
                return None
            # Process application event loop in order to accept user input during time consuming drawing operation
            self._updateCounter += 1
            if self._updateCounter >= self.UPDATE_EVERY:
                self._updateCounter = 0
                if not Application.NO_PROCESS_EVENTS:
                    QCoreApplication.instance().processEvents()
            # create box
            text = ""
            if self._boxContentScript != "":
                dataAccessorObject = BasicDataAccessorInterface(
                    object, self.dataAccessor(), False)
                try:
                    text = dataAccessorObject.runScript(
                        self._boxContentScript).replace("None", "")
                except Exception, e:
                    logging.info("Error in script: " + exception_traceback())
                    text = ""
            widget = self.createBox(widgetParent,
                                    self.dataAccessor().isContainer(object),
                                    self.dataAccessor().label(object), text)
            child_positionName = positionName + "-" + str(i)
            self.addWidget(widget, object, child_positionName)
            i += 1
예제 #12
0
 def setProperty(self, object, name, value, categoryName):
     """ Sets a property with given name to value.
     """
     if hasattr(object, "_seq") and name == "sequence":
         return "Modification of sequences not supported yet."
     else:
         process = self.process()
         try:
             if isinstance(value,str) and\
                 not value[0]=="[" and\
                 not value[0:4]=="cms.":
                 exec "object." + name + "='''" + value + "'''"
             else:
                 exec "object." + name + "=" + str(value)
         except Exception, e:
             error = "Cannot set parameter " + name + " (see logfile for details):\n" + str(
                 e)
             logging.warning(__name__ +
                             ": setProperty: Cannot set parameter " + name +
                             ": " + exception_traceback())
             return error
 def importConfig(self, filename):
     logging.debug(__name__ + ": importConfig")
     statusMessage = self.plugin().application().startWorking(
         "Import python configuration in Editor")
     try:
         good = self.open(filename, False)
     except:
         logging.error(__name__ + ": Could not open configuration file: " +
                       exception_traceback())
         self.plugin().application().errorMessage(
             "Could not open configuration file (see log file for details)."
         )
         self.plugin().application().stopWorking(statusMessage, "failed")
         return False
     if not good:
         logging.error(__name__ + ": Could not open configuration file.")
         self.plugin().application().errorMessage(
             "Could not open configuration file.")
         self.plugin().application().stopWorking(statusMessage, "failed")
         return False
     if not self.dataAccessor().process():
         logging.error(
             __name__ +
             ": Config does not contain a process and cannot be edited using ConfigEditor."
         )
         self.plugin().application().errorMessage(
             "Config does not contain a process and cannot be edited using ConfigEditor."
         )
         self.plugin().application().stopWorking(statusMessage, "failed")
         return False
     if self._filename and not self.dataAccessor().isReplaceConfig():
         self.setFilename(None)
         self.updateLabel()
     self.toolDataAccessor().setConfigDataAccessor(self.dataAccessor())
     self.tab().propertyView().setDataObject(None)
     self._updateCode()
     self._applyPatToolAction.setVisible(True)
     self.plugin().application().stopWorking(statusMessage)
     return True
예제 #14
0
 def read(self,object,levels=1):
     """ reads contents of a branch """
     logging.debug(__name__ + ": read")
     if isinstance(object,BranchDummy):
         if hasattr(object,"product"):
             return object.product
         if not self._events:
             return object
         try:
             self._events.getByLabel(object.branchtuple[2],object.branchtuple[3],object.branchtuple[4],object.branchtuple[1])
             if object.branchtuple[1].isValid():
                 product=object.branchtuple[1].product()
                 if not isinstance(product,(int,float,long,complex,str,unicode,bool)):
                     # override comparison operator of object
                     try:
                         type(product).__eq__=eq
                         type(product).__ne__=ne
                     except:
                         pass
                 self._dataObjects.insert(self._dataObjects.index(object),product)
                 self._dataObjects.remove(object)
                 self._edmLabel[id(product)]=object.branchtuple[0]
                 object.product=product
                 object=product
             else:
                 self._edmChildrenObjects[id(object)]=[("ERROR","ERROR: Branch is not valid.",False,True)]
                 logging.info("Branch is not valid: "+object.branchtuple[0]+".")
                 object.invalid=True
                 return object
         except Exception as e:
             self._edmChildrenObjects[id(object)]=[("ERROR","ERROR: Unable to read branch : "+str(e),False,True)]
             object.unreadable=True
             logging.warning("Unable to read branch "+object.branchtuple[0]+" : "+exception_traceback())
             return object
     if self.isRead(object,levels):
         return object
     if levels>0:
         self.readDaughtersRecursive(object,[],levels)
     return object
예제 #15
0
 def recursePSetProperties(self, name, object, readonly=None):
     #logging.debug(__name__ + ": recursePSetProperties: " + name)
     properties = []
     if name != "" and not isinstance(object, typ.PSet):
         try:
             partyp=str(type(object)).split("'")[1].replace("FWCore.ParameterSet.Types","cms")
             if isinstance(object, cms.InputTag):
                 inputtagValue=object.pythonValue()
                 for i in range(3-len(inputtagValue.split(","))):
                     inputtagValue+=', ""'
                 properties += [("String", name, "cms.InputTag("+inputtagValue+")", partyp, readonly)]
             elif isinstance(object, cms.bool):
                 properties += [("Boolean", name, object.value(), partyp, readonly)]
             elif isinstance(object, (cms.int32, cms.uint32, cms.int64, cms.uint64)):
                 properties += [("Integer", name, object.value(), partyp, readonly)]
             elif isinstance(object, cms.double):
                 properties += [("Double", name, object.value(), partyp, readonly)]
             elif hasattr(object, "pythonValue"):
                 properties += [("String", name, str(object.pythonValue()).strip("\"'"), partyp, readonly)]
             elif hasattr(object, "value"):
                 properties += [("MultilineString", name, str(object.value()), partyp, readonly)]
             else:
                 properties += [("MultilineString", name, str(object), partyp, readonly)]
         except Exception:
             logging.error(__name__ + ": " + exception_traceback())
     
     if isinstance(object, ConfigFolder):
         readonly = True
     
     params = self.parameters(object)[:]
     params.sort(lambda x, y: cmp(x[0].lower(), y[0].lower()))
     for key, value in params:
         keyname = name
         if name != "":
             keyname += "."
         keyname += key
         properties += self.recursePSetProperties(keyname, value, readonly)
     return properties
예제 #16
0
 def testExample(self):
     logging.debug(self.__class__.__name__ + ': testExample()')
     try:
         from pxl.algorithms import AutoLayout
     except Exception:
         logging.info("LineDecayView needs PXL: " + exception_traceback())
         return
     self.app = QApplication(sys.argv)
     self.window = QMainWindow()
     self.window.setWindowTitle("test LineDecayView")
     self.window.resize(300, 300)
     self.app.setActiveWindow(self.window)
     self.window.show()
     self.scrollArea = ZoomableScrollArea(self.window)
     self.window.setCentralWidget(self.scrollArea)
     self.lineDecayView = LineDecayView()
     self.scrollArea.setWidget(self.lineDecayView)
     accessor = TestDataAccessor()
     self.lineDecayView.setDataAccessor(accessor)
     self.lineDecayView.setDataObjects(accessor.topLevelObjects())
     self.lineDecayView.updateContent()
     if not hasattr(unittest, "NO_GUI_TEST"):
         self.app.exec_()
예제 #17
0
 def testExample(self):
     logging.debug(self.__class__.__name__ + ': testExample()')
     try:
         from pxl.algorithms import AutoLayout
     except Exception:
         logging.info("LineDecayView needs PXL: " + exception_traceback())
         return
     self.app = QApplication(sys.argv)
     self.window = QMainWindow()
     self.window.setWindowTitle("test LineDecayView")
     self.window.resize(300,300)
     self.app.setActiveWindow(self.window)
     self.window.show()
     self.scrollArea = ZoomableScrollArea(self.window)
     self.window.setCentralWidget(self.scrollArea)
     self.lineDecayView = LineDecayView()
     self.scrollArea.setWidget(self.lineDecayView)
     accessor=TestDataAccessor()
     self.lineDecayView.setDataAccessor(accessor)
     self.lineDecayView.setDataObjects(accessor.topLevelObjects())
     self.lineDecayView.updateContent()
     if not hasattr(unittest,"NO_GUI_TEST"):
         self.app.exec_()
예제 #18
0
    def createBoxesRecursive(self, operationId, objects, widgetParent, positionName="0"):
        """ Creates a box from an object.
        
        All children of this object are created recursively.
        """
        #logging.debug(__name__ + ": createBoxesRecursive")
        if self._sortBeforeArranging and self.arrangeUsingRelations():
            thread = ThreadChain(self._sortByRelations, objects)
            while thread.isRunning():
                if not Application.NO_PROCESS_EVENTS:
                    QCoreApplication.instance().processEvents()
            objects=thread.returnValue()

        i = 1
        for object in objects:
            if operationId != self._operationId:
                return None
            # Process application event loop in order to accept user input during time consuming drawing operation
            self._updateCounter+=1
            if self._updateCounter>=self.UPDATE_EVERY:
                self._updateCounter=0
                if not Application.NO_PROCESS_EVENTS:
                    QCoreApplication.instance().processEvents()
            # create box
            text = ""
            if self._boxContentScript != "":
                dataAccessorObject = BasicDataAccessorInterface(object, self.dataAccessor(), False)
                try:
                    text = dataAccessorObject.runScript(self._boxContentScript).replace("None", "")
                except Exception, e:
                    logging.info("Error in script: " + exception_traceback())
                    text = ""
            widget = self.createBox(widgetParent, self.dataAccessor().isContainer(object), self.dataAccessor().label(object), text)
            child_positionName = positionName + "-" + str(i)
            self.addWidget(widget, object, child_positionName)
            i += 1
 def exportDot(self, fileName=None):
     if import_dotexport_error != None:
         logging.error(__name__ + ": Could not import DOTExport: " +
                       import_dotexport_error[1])
         self.plugin().application().errorMessage(
             "Could not import DOTExport (see logfile for details):\n" +
             import_dotexport_error[0])
         return
     dot = DotExport()
     if self.currentCenterViewClassId() == self.plugin().viewClassId(
             ConnectionStructureView):
         presets = {
             'seqconnect': False,
             'tagconnect': True,
             'seq': False,
             'services': False,
             'es': False,
             'endpath': True,
             'source': True,
             'legend': False
         }
     else:
         presets = {
             'seqconnect': True,
             'tagconnect': False,
             'seq': True,
             'services': False,
             'es': False,
             'endpath': True,
             'source': True,
             'legend': False
         }
     for opt, val in presets.items():
         dot.setOption(opt, val)
     types = ""
     for ft in dot.file_types:
         if types != "":
             types += ";;"
         types += ft.upper() + " File (*." + ft.lower() + ")"
     filter = QString("PDF File (*.pdf)")
     if not fileName:
         defaultname = os.path.splitext(self._filename)[0] + "_export"
         fileName = str(
             QFileDialog.getSaveFileName(self.tab(),
                                         "Export dot graphic...",
                                         defaultname, types, filter))
     if fileName != "":
         name = fileName
         ext = str(filter).split(" ")[0].lower()
         if os.path.splitext(fileName)[1].lower().strip(
                 ".") in dot.file_types:
             name = os.path.splitext(fileName)[0]
             ext = os.path.splitext(fileName)[1].lower().strip(".")
         try:
             dot.export(self.dataAccessor(), name + "." + ext, ext)
         except Exception:
             try:
                 dot.export(self.dataAccessor(), name + ".dot", "dot")
                 logging.error(
                     self.__class__.__name__ + ": exportDot() - " +
                     "'dot' executable not found which is needed for conversion to '*."
                     + ext + "'. Created '*.dot' file instead.")
                 self.plugin().application().errorMessage(
                     "'dot' executable not found which is needed for conversion to '*."
                     + ext + "'. Created '*.dot' file instead.")
             except Exception as e:
                 logging.error(
                     self.__class__.__name__ + ": exportDot() - " +
                     "Could not export dot graphic (see logfile for details): "
                     + str(e))
                 self.plugin().application().errorMessage(
                     "Could not export dot graphic: " +
                     exception_traceback())
from PyQt4.QtCore import SIGNAL, QString, QCoreApplication
from PyQt4.QtGui import QMessageBox, QFileDialog

from Vispa.Main.Application import Application
from Vispa.Main.Exceptions import exception_traceback
from Vispa.Share.ThreadChain import ThreadChain
from Vispa.Plugins.Browser.BrowserTabController import BrowserTabController
from Vispa.Views.WidgetView import WidgetView
from Vispa.Plugins.ConfigEditor.ConfigEditorBoxView import ConfigEditorBoxView, ConnectionStructureView, SequenceStructureView
from Vispa.Gui.TextDialog import TextDialog

try:
    from FWCore.GuiBrowsers.DOTExport import DotExport
    import_dotexport_error = None
except Exception as e:
    import_dotexport_error = (str(e), exception_traceback())

try:
    from Vispa.Plugins.EdmBrowser.EventContentDialog import EventContentDialog
    event_content_error = None
except Exception as e:
    event_content_error = (str(e), exception_traceback())

try:
    from .ToolDataAccessor import ToolDataAccessor, ConfigToolBase, standardConfigDir
    from .ToolDialog import ToolDialog
    import_tools_error = None
except Exception as e:
    import_tools_error = (str(e), exception_traceback())

예제 #21
0
         return error
 elif isinstance(value, str):
     # for e.g. cms.InputTag
     try:
         exec "value=" + value
     except:
         pass
 if name != "comment":
     try:
         object.setParameter(name, value)
     except Exception, e:
         error = "Cannot set parameter " + name + " (see logfile for details):\n" + str(
             e)
         logging.warning(__name__ +
                         ": setProperty: Cannot set parameter " + name +
                         ": " + exception_traceback())
         self._parameterErrors[str(id(object)) + "." + name] = error
         return error
 elif name == "comment":
     try:
         object.setComment(value)
     except Exception, e:
         error = "Cannot set comment (see logfile for details):\n" + str(
             e)
         logging.warning(__name__ +
                         ": setProperty: Cannot set comment " +
                         exception_traceback())
         self._parameterErrors[str(id(object)) + "." + name] = error
         return error
 if str(id(object)) + "." + name in self._parameterErrors.keys():
     del self._parameterErrors[str(id(object)) + "." + name]
예제 #22
0
from PyQt4.QtCore import SIGNAL,QString,QCoreApplication
from PyQt4.QtGui import QMessageBox,QFileDialog

from Vispa.Main.Application import Application
from Vispa.Main.Exceptions import exception_traceback
from Vispa.Share.ThreadChain import ThreadChain
from Vispa.Plugins.Browser.BrowserTabController import BrowserTabController
from Vispa.Views.WidgetView import WidgetView
from Vispa.Plugins.ConfigEditor.ConfigEditorBoxView import ConfigEditorBoxView,ConnectionStructureView,SequenceStructureView
from Vispa.Gui.TextDialog import TextDialog

try:
    from FWCore.GuiBrowsers.DOTExport import DotExport
    import_dotexport_error=None
except Exception as e:
    import_dotexport_error=(str(e),exception_traceback())

try:
    from Vispa.Plugins.EdmBrowser.EventContentDialog import EventContentDialog
    event_content_error=None
except Exception as e:
    event_content_error=(str(e),exception_traceback())

try:
    from .ToolDataAccessor import ToolDataAccessor,ConfigToolBase,standardConfigDir
    from .ToolDialog import ToolDialog
    import_tools_error=None
except Exception as e:
    import_tools_error=(str(e),exception_traceback())

class ConfigEditorTabController(BrowserTabController):
예제 #23
0
import logging

from PyQt4.QtCore import SIGNAL,Qt,QCoreApplication
from PyQt4.QtGui import QWidget

from Vispa.Views.AbstractView import AbstractView
from Vispa.Main.Exceptions import exception_traceback
from Vispa.Share.BasicDataAccessor import BasicDataAccessor

try:
    import ROOT
    import pxl.core,pxl.astro,pxl.hep
    import_root_error=None
except Exception,e:
    import_root_error=(str(e),exception_traceback())

from array import array

class RootCanvasView(AbstractView, QWidget):
    
    LABEL = "&ROOT Canvas View"
    
    def __init__(self, parent=None):
        AbstractView.__init__(self)
        QWidget.__init__(self, parent)
        ROOT.gROOT.SetStyle('Plain')
        #ROOT.gStyle.SetPalette(1)
        self.canvas = ROOT.TCanvas()
        #self.canvas.SetEditable(False)
        #self.canvas = None 
        self._operationId = 0
예제 #24
0
 def updateProcess(self,cp=True):
     logging.debug(__name__ + ": updateProcess")
     if cp:
         process=copy.deepcopy(self._processCopy)
     else:
         process=self.configDataAccessor().process()
     try:
         for tool in self._toolList:
             tool.apply(process)
             if not process.checkRecording():
                 logging.error(__name__ + ": Could not apply tool: "+self.label(tool)+" (problem with enable recording flag)")
                 QCoreApplication.instance().errorMessage("Could not apply tool: "+self.label(tool)+" (problem with enable recording flag)")
                 return False
     except Exception as e:
         logging.error(__name__ + ": Could not apply tool: "+self.label(tool)+": "+exception_traceback())
         QCoreApplication.instance().errorMessage("Could not apply tool (see log file for details):\n"+str(e))
         return False
     self.configDataAccessor().setProcess(process)
     self._parameterErrors={}
     return True
예제 #25
0
 def exportDot(self, fileName=None):
     if import_dotexport_error!=None:
         logging.error(__name__ + ": Could not import DOTExport: "+import_dotexport_error[1])
         self.plugin().application().errorMessage("Could not import DOTExport (see logfile for details):\n"+import_dotexport_error[0])
         return
     dot = DotExport()
     if self.currentCenterViewClassId() == self.plugin().viewClassId(ConnectionStructureView):
         presets = {'seqconnect':False, 'tagconnect':True, 'seq':False, 'services':False, 'es':False, 'endpath':True, 'source':True, 'legend':False}
     else:
         presets = {'seqconnect':True, 'tagconnect':False, 'seq':True, 'services':False, 'es':False, 'endpath':True, 'source':True, 'legend':False}
     for opt, val in presets.items():
         dot.setOption(opt, val)
     types = ""
     for ft in dot.file_types:
         if types != "":
             types += ";;"
         types += ft.upper() + " File (*." + ft.lower() + ")"
     filter = QString("PDF File (*.pdf)")
     if not fileName:
         defaultname = os.path.splitext(self._filename)[0] + "_export"
         fileName = str(QFileDialog.getSaveFileName(self.tab(), "Export dot graphic...", defaultname, types, filter))
     if fileName != "":
         name = fileName
         ext = str(filter).split(" ")[0].lower()
         if os.path.splitext(fileName)[1].lower().strip(".") in dot.file_types:
             name = os.path.splitext(fileName)[0]
             ext = os.path.splitext(fileName)[1].lower().strip(".")
         try:
             dot.export(self.dataAccessor(), name + "." + ext, ext)
         except Exception:
             try:
                 dot.export(self.dataAccessor(), name + ".dot", "dot")
                 logging.error(self.__class__.__name__ +": exportDot() - "+"'dot' executable not found which is needed for conversion to '*." + ext + "'. Created '*.dot' file instead.")
                 self.plugin().application().errorMessage("'dot' executable not found which is needed for conversion to '*." + ext + "'. Created '*.dot' file instead.")
             except Exception as e:
                 logging.error(self.__class__.__name__ +": exportDot() - "+"Could not export dot graphic (see logfile for details): " + str(e))
                 self.plugin().application().errorMessage("Could not export dot graphic: " + exception_traceback())
예제 #26
0
 def setProperty(self, object, name, value, categoryName):
     """ Sets a property with given name to value.
     """
     if hasattr(object, "_seq") and name=="sequence":
         return "Modification of sequences not supported yet."
     else: 
         process=self.process()
         try:
             if isinstance(value,str) and\
                 not value[0]=="[" and\
                 not value[0:4]=="cms.":
                 exec("object." + name + "='''" + value + "'''")
             else:
                 exec("object." + name + "=" + str(value))
         except Exception as e:
             error="Cannot set parameter "+name+" (see logfile for details):\n"+str(e)
             logging.warning(__name__ + ": setProperty: Cannot set parameter "+name+": "+exception_traceback())
             return error
     return True
예제 #27
0
                error="Error in python code (see logfile for details):\n"+str(e)
                logging.warning(__name__ + ": setProperty: Error in python code: "+exception_traceback())
                self._parameterErrors[str(id(object))+"."+name]=error
                return error
        elif isinstance(value,str):
            # for e.g. cms.InputTag
            try:
                exec "value="+value
            except:
                pass
        if name!="comment":
            try:
                object.setParameter(name,value)
            except Exception, e:
                error="Cannot set parameter "+name+" (see logfile for details):\n"+str(e)
                logging.warning(__name__ + ": setProperty: Cannot set parameter "+name+": "+exception_traceback())
                self._parameterErrors[str(id(object))+"."+name]=error
                return error
        elif name=="comment":
            try:
                object.setComment(value)
            except Exception, e:
                error="Cannot set comment (see logfile for details):\n"+str(e)
                logging.warning(__name__ + ": setProperty: Cannot set comment "+exception_traceback())
                self._parameterErrors[str(id(object))+"."+name]=error
                return error  
        if str(id(object))+"."+name in self._parameterErrors.keys():
            del self._parameterErrors[str(id(object))+"."+name]
        return True

    def setConfigDataAccessor(self,accessor):
예제 #28
0
파일: ToolDialog.py 프로젝트: Moanwar/cmssw
 def apply(self):
     # allow property view to process parameter changes
     if not self.ok.hasFocus():
         self._properties.clearFocus()
         self.ok.setFocus()
         return
     parameterErrors=self._toolDataAccessor.parameterErrors(self._selectedTool)
     if len(parameterErrors)>0:
         message="\n".join([error for error in parameterErrors])
         QCoreApplication.instance().errorMessage(message)
         return
     ok=True
     if self._selectedTool:
         try:
             self._selectedTool.apply(self._toolDataAccessor.configDataAccessor().process())
             if not self._toolDataAccessor.configDataAccessor().process().checkRecording():
                 ok=False
                 logging.error(__name__ + ": Could not apply tool "+self._toolDataAccessor.label(self._selectedTool)+" (problem with enable recording flag) Please restart the ConfigEditor.")
                 QCoreApplication.instance().errorMessage("Could not apply tool "+self._toolDataAccessor.label(self._selectedTool)+" (problem with enable recording flag) Please restart the ConfigEditor.")
         except Exception as e:
             ok=False
             logging.error(__name__ + ": Could not apply tool "+self._toolDataAccessor.label(self._selectedTool)+": "+exception_traceback())
             QCoreApplication.instance().errorMessage("Cannot apply tool "+self._toolDataAccessor.label(self._selectedTool)+" (see log file for details):\n"+str(e))
     else:
         ok=False
         logging.error(__name__ + ": Could not apply tool: No tool selected.")
         QCoreApplication.instance().errorMessage("Cannot apply tool: No tool selected.")
     # recover process copy to undo changes during the tool dialog
     self._toolDataAccessor.configDataAccessor().setProcess(self._processCopy)
     if ok:
         self.accept()
예제 #29
0
import logging

from PyQt4.QtCore import SIGNAL,Qt,QCoreApplication
from PyQt4.QtGui import QWidget

from Vispa.Views.AbstractView import AbstractView
from Vispa.Main.Exceptions import exception_traceback
from Vispa.Share.BasicDataAccessor import BasicDataAccessor

try:
    import ROOT
    import pxl.core,pxl.astro,pxl.hep
    import_root_error=None
except Exception as e:
    import_root_error=(str(e),exception_traceback())

from array import array

class RootCanvasView(AbstractView, QWidget):
    
    LABEL = "&ROOT Canvas View"
    
    def __init__(self, parent=None):
        AbstractView.__init__(self)
        QWidget.__init__(self, parent)
        ROOT.gROOT.SetStyle('Plain')
        #ROOT.gStyle.SetPalette(1)
        self.canvas = ROOT.TCanvas()
        #self.canvas.SetEditable(False)
        #self.canvas = None 
        self._operationId = 0