def create( cls, user: str, company: str, name: str, description: str, tags: Sequence[str] = None, system_tags: Sequence[str] = None, default_output_destination: str = None, ) -> str: """ Create a new project. Returns project ID """ now = datetime.utcnow() project = Project( id=database.utils.id(), user=user, company=company, name=name, description=description, tags=tags, system_tags=system_tags, default_output_destination=default_output_destination, created=now, last_update=now, ) project.save() return project.id
def _save_under_parent(project: Project, parent: Optional[Project]): """ Save the project under the given parent project or top level (parent=None) Check that the project location matches the parent name """ location, _, _ = project.name.rpartition(name_separator) if not parent: if location: raise ValueError( f"Project location {location} does not match empty parent name" ) project.parent = None project.path = [] project.save() return if location != parent.name: raise ValueError( f"Project location {location} does not match parent name {parent.name}" ) project.parent = parent.id project.path = [*(parent.path or []), parent.id] project.save()