def load(self, name, projectdir=None, **kwargs): """ Load existing project :use: >>> project1 = project_manager.load('project1') >>> project2 = project_manager.load('project2', '/path/to/project') # doctest: +SKIP :param name: name of project to load. Must be a string. :param projectdir: path of project to load. Must be a path (see module path.py). By default, try to guess with name only. If there are various projects with the same name, return the first. :return: Project """ project = None if 'proj_path' in kwargs: projectdir = kwargs['proj_path'] elif 'path' in kwargs: projectdir = kwargs['path'] if not projectdir: try: project = self.item(name) except UnknownItemError: pass else: full_path = Path(projectdir) / name if full_path.exists(): project = Project(full_path) else: print 'Project %s in repository %s does not exist' % (name, projectdir) if project: self.cproject = project return self.cproject
def discover(self, config_name='oaproject.cfg'): """ Discover projects from your disk and put them in self.projects. Projects are not loaded, only metadata are. :use: >>> project_manager.discover() >>> list_of_projects = project_manager.projects To discover new projects, you can add path into *self.repositories* .. code-block:: python project_manager.repositories.append('path/to/search/projects') project_manager.discover() """ projects = {} for _path in self.repositories: _path = Path(_path) if not _path.exists(): continue for p in _path.walkfiles(config_name): project = Project(p.parent) projects[project.path] = project self.projects = projects.values()
def default(self): """ :return: a default empty project """ # TODO: should define a generic "create" method that returns a patched item. # for the moment, patch it manually _path = self.defaultdir proj = Project(_path / "temp") proj.label = "Temporary Project" if not proj.path.exists(): txt = '''""" OpenAlea Lab editor This temporary script is saved in temporary project in %s You can rename/move this project thanks to the button "Save As" in menu. """''' % str(proj.path) proj.add("model", filename="model.py", content=txt) proj.save() return proj
def default(self): """ :return: a default empty project """ _path = self.defaultdir proj = Project(_path / "temp") if not proj.path.exists(): txt = '''""" OpenAlea Lab editor This temporary script is saved in temporary project in %s You can rename/move this project thanks to the button "Save As" in menu. """''' % str(proj.path) proj.add("model", filename="model.py", content=txt) proj.save() return proj
def create(self, name, projectdir=None, **kwargs): """ Create new project and return it. :use: >>> project1 = project_manager.create('project1') >>> project2 = project_manager.create('project2', '/path/to/project') :param name: name of project to create (str) :param path: path where project will be saved. By default, path is the user path of all projects ($HOME/.openalea/projects/). :return: Project """ if projectdir is None: projectdir = self.defaultdir else: projectdir = Path(projectdir).abspath() if projectdir not in self.repositories: self.repositories.append(projectdir) project = Project(projectdir / name, **kwargs) self.patch_item(project) return project
def create_projects(self): """ tmp1 - p1 - p2 - link -> p2 tmp2 - p1 - p3 - link -> p4 """ project = Project(self.tmpdir / 'p1', alias="p1") project.save() project = Project(self.tmpdir / 'p2') project.save() project.path.symlink(self.tmpdir / 'link') project = Project(self.tmpdir2 / 'p1', alias="Project 1") project.save() project = Project(self.tmpdir2 / 'p3') project.save() project.path.symlink(self.tmpdir2 / 'link')
def create_projects(self): """ tmp1 - p1 - p2 - link -> p2 tmp2 - p1 - p3 - link -> p4 """ project = Project(self.tmpdir / 'p1', alias="p1") project.save() project = Project(self.tmpdir / 'p2') project.save() if not win: project.path.symlink(self.tmpdir / 'link') project = Project(self.tmpdir2 / 'p1', alias="Project 1") project.save() project = Project(self.tmpdir2 / 'p3') project.save() if not win: project.path.symlink(self.tmpdir2 / 'link')