예제 #1
0
 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
예제 #2
0
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()