def testExportSteps(self): manager = Manager() stepsStats = dict() for project in manager.listProjects(): projectFolder = manager.getProjectPath(project.projName) project = Project(pyworkflow.Config.getDomain(), projectFolder) project.load() for prot in project.getRuns(): protName = prot.getClassName() for step in prot.loadSteps(): stepName = "-".join([ prot.getClassPackageName(), protName, step.funcName.get() ]) stepSeconds = step.getElapsedTime().total_seconds() if stepName not in stepsStats: stepsStats[stepName] = [] stepsStats[stepName].append(stepSeconds) # average steps for name in stepsStats: plugin, protClass, step = name.split("-") stepStats = stepsStats[name] mean = sum(stepStats) / len(stepStats) # DO not send mean values if higher than a threshold to keep chart in a decent visualization range # We are loosing long duration steps, probably due to large if mean < 30: bm = Benchmark(time=mean, name="-".join([protClass, step])) codespeed.sendData(bm)
def openProject(projectName): """ Opens a scipion project: :param projectName: Name of a existing project to open, or "here" to create a project in the current working dir, or "last" to open the most recent project """ manager = Manager() projName = os.path.basename(projectName) # Handle special name 'here' to create a project # from the current directory if projName == 'here': cwd = Config.SCIPION_CWD if " " in cwd: print("Projects can't have spaces in the name: %s" % cwd) sys.exit(1) print("\nYou are trying to create a project here:", pwutils.cyan(cwd)) if os.listdir(cwd): print(pwutils.red('\nWARNING: this folder is not empty!!!')) key = input("\nDo you want to create a project here? [y/N]?") if key.lower().strip() != 'y': print("\nAborting...") sys.exit(0) else: print("\nCreating project....") projName = os.path.basename(cwd) projDir = os.path.dirname(cwd) manager.createProject(projName, location=projDir) elif projName == 'last': # Get last project projects = manager.listProjects() if not projects: sys.exit("No projects yet, cannot open the last one.") projName = projects[0].projName projPath = manager.getProjectPath(projName) projWindow = ProjectWindow(projPath) projWindow.show()
# This fails, since it is triggering matplotlib.pyplot and then import error happens: # ... pyworkflow/gui/no-tkinter/_tkinter.py: invalid ELF header. If we want this back we might need to # invest some time "faking" tkinter again for python3. # path = pw.join('gui', 'no-tkinter') # sys.path.insert(1, path) # Create a new project manager = Manager() if not manager.hasProject(projName): usage("There is no project with this name: %s" % pwutils.red(projName)) # the project may be a soft link which may be unavailable to the cluster so get the real path try: projectPath = os.readlink(manager.getProjectPath(projName)) except: projectPath = manager.getProjectPath(projName) project = Project(pw.Config.getDomain(), projectPath) project.load() runs = project.getRuns() # Now assuming that there is no dependencies between runs # and the graph is lineal for prot in runs: protClassName = prot.getClassName() protLabelName = prot.getObjLabel() if (protClassName not in sys.argv[3:] and protLabelName not in sys.argv[3:]):
""" Launch main project window """ import pickle import sys import os from pyworkflow.project import Manager, Label from pyworkflow.gui.project import ProjectWindow if __name__ == '__main__': manager = Manager() projName = os.path.basename(sys.argv[1]) projPath = manager.getProjectPath(projName) projWindow = ProjectWindow(projPath) proj = projWindow.project sett = proj.getSettings() sett.setColorMode(sett.COLOR_MODE_LABELS) with open(proj.getPath('labels.pkl'), 'r') as f: labelsDict, colorsDict = pickle.load(f) for labelName, prots in labelsDict.iteritems(): label = Label(name=labelName, color=colorsDict[labelName]) sett.getLabels().addLabel(label) for protId in prots: node = sett.getNodeById(protId)
jsonFn = os.path.abspath(sys.argv[1]) now = datetime.now() tempSpace = "editor-%s" % now.strftime('%Y%m%d-%H%M%S') customUserData = os.path.join(pw.Config.SCIPION_USER_DATA, 'tmp', tempSpace) pwutils.makePath(os.path.join(customUserData, 'projects')) print("Loading projects from:\n", customUserData) # Create a new project manager = Manager(workspace=customUserData) projName = os.path.basename(jsonFn) proj = manager.createProject(projName) projPath = manager.getProjectPath(proj.getShortName()) proj.loadProtocols(jsonFn) class EditorProjectWindow(ProjectWindow): def close(self, e=None): try: print("Writing protocols to: ", jsonFn) proj.getRunsGraph(refresh=True) # Build project runs graph proj.exportProtocols(proj.getRuns(), jsonFn) print("Deleting temporary folder: ", customUserData) pwutils.cleanPath(customUserData) except Exception as ex: print("Error saving the workflow: ", ex) ProjectWindow.close(self, e)