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
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
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
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
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
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)
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
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()
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
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
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 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
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
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
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_()
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_()
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())
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]
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):
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
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
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())
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
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):
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()
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