Ejemplo n.º 1
0
def get_or_create_status(
    name,
    short_name="",
    color="#f5f5f5",
    is_done=False,
    is_retake=False
):
    """
    Create a new task status if it doesn't exist. If it exists, it returns the
    status from database.
    """
    task_status = TaskStatus.get_by(name=name)
    if task_status is None and len(short_name) > 0:
        task_status = TaskStatus.get_by(short_name=short_name)

    if task_status is None:
        task_status = TaskStatus.create(
            name=name,
            short_name=short_name or name.lower(),
            color=color,
            is_reviewable=True,
            is_done=is_done,
            is_retake=is_retake
        )
        events.emit("task_status:new", {
            "task_status_id": task_status.id
        })
    return task_status.serialize()
Ejemplo n.º 2
0
def get_or_create_status(
    name,
    short_name="",
    color="#f5f5f5",
    is_done=False,
    is_retake=False,
    is_feedback_request=False,
    is_default=None,
):
    """
    Create a new task status if it doesn't exist. If it exists, it returns the
    status from database.
    """
    if is_default:
        task_status = TaskStatus.get_by(is_default=is_default, )
    else:
        task_status = TaskStatus.get_by(name=name)
    if task_status is None and len(short_name) > 0:
        task_status = TaskStatus.get_by(short_name=short_name)

    if task_status is None:
        task_status = TaskStatus.create(
            name=name,
            short_name=short_name or name.lower(),
            color=color,
            is_done=is_done,
            is_retake=is_retake,
            is_feedback_request=is_feedback_request,
            is_default=is_default,
        )
        events.emit("task-status:new", {"task_status_id": task_status.id})
    return task_status.serialize()
Ejemplo n.º 3
0
    def test_import_task(self):
        self.load_task()
        self.assertEqual(len(self.tasks), 1)

        self.tasks = self.get("data/tasks")
        self.assertEqual(len(self.tasks), 1)

        task = self.tasks[0]
        task = tasks_service.get_task_with_relations(task["id"])
        project = Project.get_by(name=self.sg_task["project"]["name"])
        task_type = \
            TaskType.get_by(name=self.sg_task["step"]["name"])
        task_status = TaskStatus.get_by(
            short_name=self.sg_task["sg_status_list"])
        assets = assets_service.get_assets(
            {"shotgun_id": self.sg_task["entity"]["id"]})
        entity = assets[0]
        assigner = Person.get_by(
            last_name=self.sg_task["created_by"]["name"].split(" ")[1])
        assignee = Person.get_by(
            last_name=self.sg_task["task_assignees"][0]["name"].split(" ")[1])

        self.assertEqual(task["name"], self.sg_task["cached_display_name"])
        self.assertEqual(task["duration"], self.sg_task["duration"])
        self.assertEqual(task["shotgun_id"], self.sg_task["id"])
        self.assertEqual(task["project_id"], str(project.id))
        self.assertEqual(task["task_type_id"], str(task_type.id))
        self.assertEqual(task["task_status_id"], str(task_status.id))
        self.assertEqual(task["entity_id"], entity["id"])
        self.assertEqual(task["assigner_id"], str(assigner.id))
        self.assertEqual(task["assignees"][0], str(assignee.id))
Ejemplo n.º 4
0
def get_or_create_status(name,
                         short_name="",
                         color="#f5f5f5",
                         is_reviewable=False,
                         is_done=False):
    status = TaskStatus.get_by(name=name)
    if status is None and len(short_name) > 0:
        status = TaskStatus.get_by(short_name=short_name)

    if status is None:
        status = TaskStatus.create(name=name,
                                   short_name=short_name or name.lower(),
                                   color=color,
                                   is_reviewable=is_reviewable,
                                   is_done=is_done)
    return status.serialize()
Ejemplo n.º 5
0
def get_status(status_name, short_name=""):
    status = TaskStatus.get_by(
        name=app.config[status_name]
    )
    if status is None:
        status = TaskStatus.get_by(
            short_name=short_name
        )

    if status is None:
        status = TaskStatus(
            name=app.config[status_name],
            short_name=short_name,
            color="#FFFFFF"
        )
        status.save()
    return status
Ejemplo n.º 6
0
def reset_task_data(task_id):
    clear_task_cache(task_id)
    task = Task.get(task_id)
    retake_count = 0
    real_start_date = None
    last_comment_date = None
    end_date = None
    task_status_id = TaskStatus.get_by(short_name="todo").id
    comments = (
        Comment.query.join(TaskStatus)
        .filter(Comment.object_id == task_id)
        .order_by(Comment.created_at)
        .add_columns(
            TaskStatus.is_retake, TaskStatus.is_done, TaskStatus.short_name
        )
        .all()
    )

    previous_is_retake = False
    for (
        comment,
        task_status_is_retake,
        task_status_is_done,
        task_status_short_name,
    ) in comments:
        if task_status_is_retake and not previous_is_retake:
            retake_count += 1
        previous_is_retake = task_status_is_retake

        if task_status_short_name.lower() == "wip" and real_start_date is None:
            real_start_date = comment.created_at

        if task_status_is_done:
            end_date = comment.created_at
        else:
            end_date = None

        task_status_id = comment.task_status_id
        last_comment_date = comment.created_at

    duration = 0
    time_spents = TimeSpent.get_all_by(task_id=task.id)
    for time_spent in time_spents:
        duration += time_spent.duration

    task.update(
        {
            "duration": duration,
            "retake_count": retake_count,
            "real_start_date": real_start_date,
            "last_comment_date": last_comment_date,
            "end_date": end_date,
            "task_status_id": task_status_id,
        }
    )
    project_id = str(task.project_id)
    events.emit("task:update", {"task_id": task.id}, project_id)
    return task.serialize()
Ejemplo n.º 7
0
def get_or_create_task_status(name):
    task_status = TaskStatus.get_by(name=name)
    if task_status is None:
        task_status = TaskStatus(
            name=name,
            short_name=name,
            color="#000000"
        )
        task_status.save()
    return task_status
Ejemplo n.º 8
0
def get_or_create_status(
    name,
    short_name="",
    color="#f5f5f5",
    is_reviewable=False,
    is_done=False
):
    """
    Create a new task status if it doesn't exist. If it exists, it returns the
    status from database.
    """
    status = TaskStatus.get_by(name=name)
    if status is None and len(short_name) > 0:
        status = TaskStatus.get_by(short_name=short_name)

    if status is None:
        status = TaskStatus.create(
            name=name,
            short_name=short_name or name.lower(),
            color=color,
            is_reviewable=is_reviewable,
            is_done=is_done
        )
    return status.serialize()
Ejemplo n.º 9
0
    def post(self, file_id):
        (
            task_status_id,  # NOT USED CURRENTLY
            comment,
            person_id,
            created_at,
            checklist) = self.get_arguments()

        output_file = files_service.get_output_file(file_id)

        # TODO: test and maybe check_asset_access
        if output_file.get("entity_id"):
            instance = entities_service.get_entity(output_file["entity_id"])
        elif output_file.get("asset_instance_id"):
            instance = assets_service.get_asset_instance(
                output_file["asset_instance_id"])
        user_service.check_project_access(instance["project_id"])

        # TODO: improve this
        task_status = TaskStatus.get_by(short_name="wip")
        if not task_status:
            print("no task status")
            return None, 404
        task_status_id = task_status.id

        if not permissions.has_manager_permissions():
            person_id = None
            created_at = None

        if person_id:
            person = persons_service.get_person(person_id)
        else:
            person = persons_service.get_current_user()

        comment = tasks_service.create_comment(object_id=file_id,
                                               object_type="OutputFile",
                                               files=request.files,
                                               person_id=person["id"],
                                               task_status_id=task_status_id,
                                               text=comment,
                                               checklist=checklist,
                                               created_at=created_at)

        comment["task_status"] = task_status.serialize()
        comment["person"] = person
        return comment, 201
Ejemplo n.º 10
0
 def get_existing_status(self, data):
     task_status = TaskStatus.get_by(shotgun_id=data["shotgun_id"])
     if task_status is None:
         task_status = TaskStatus.get_by(short_name=data["short_name"])
     return task_status
Ejemplo n.º 11
0
 def pre_update(self, instance_dict, data):
     if data.get("is_default", False):
         status = TaskStatus.get_by(is_default=True)
         if status:
             status.update({"is_default": False})
     return instance_dict
Ejemplo n.º 12
0
 def check_creation_integrity(self, data):
     if data.get("is_default", False):
         status = TaskStatus.get_by(is_default=True)
         if status:
             status.update({"is_default": False})
     return data