예제 #1
0
    def import_entry(self, data):
        task = Task.get_by(shotgun_id=data["shotgun_id"])

        if task is None:
            task = Task.get_by(
                name=data["name"],
                project_id=data["project_id"],
                task_type_id=data["task_type_id"],
                entity_id=data["entity_id"],
            )

        if task is None:
            task = Task(**data)
            task.save()
            current_app.logger.info("Task created: %s" % task)
        else:
            existing_task = Task.get_by(
                name=data["name"],
                project_id=data["project_id"],
                task_type_id=data["task_type_id"],
                entity_id=data["entity_id"],
            )

            if existing_task is not None:
                data.pop("name", None)
                data.pop("project_id", None)
                data.pop("task_type_id", None)
                data.pop("entity_id", None)

            task.update(data)
            tasks_service.clear_task_cache(str(task.id))
            current_app.logger.info("Task updated: %s" % task)

        return task
예제 #2
0
    def test_import_version(self):
        sg_version = {
            "code": "S01_Animation",
            "description": "description test",
            "id": 2,
            "user": {
                "id": 1,
                "name": "Jhon Doe",
                "type": "HumanUser"
            },
            "entity": {
                "id": 1,
                "name": "SH01",
                "type": "Shot"
            },
            "project": {
                "id": 1,
                "name": "Cosmos Landromat",
                "type": "Project"
            },
            "sg_task": {
                "id": 1,
                "name": "Animation",
                "type": "Task"
            },
            "sg_uploaded_movie": {
                "content_type": "video/mp4",
                "id": 1,
                "link_type": "upload",
                "name": "movie_new.mp4",
                "type": "Attachment",
                "url": "https://sg-media.amazonaws.com/9e73/movie_new.mp4"
            },
            "type": "Version"
        }

        api_path = "/import/shotgun/versions"
        self.preview_files = self.post(api_path, [sg_version], 200)
        self.assertEqual(len(self.preview_files), 1)

        self.preview_files = self.get("data/preview-files")
        self.assertEqual(len(self.preview_files), 1)
        preview_file = self.preview_files[0]

        task = Task.get_by(shotgun_id=sg_version["sg_task"]["id"])
        person = Person.get_by(shotgun_id=sg_version["user"]["id"])

        self.assertEqual(preview_file["name"], sg_version["code"])
        self.assertEqual(preview_file["source"], "Shotgun")
        self.assertEqual(preview_file["task_id"], str(task.id))

        self.assertEqual(preview_file["name"], sg_version["code"])
        self.assertEqual(preview_file["description"],
                         sg_version["description"])
        self.assertEqual(preview_file["shotgun_id"], sg_version["id"])
        self.assertEqual(preview_file["uploaded_movie_url"],
                         sg_version["sg_uploaded_movie"]["url"])
        self.assertEqual(preview_file["uploaded_movie_url"],
                         sg_version["sg_uploaded_movie"]["url"])
        self.assertEqual(preview_file["person_id"], str(person.id))
예제 #3
0
def get_task_by_shotgun_id(shotgun_id):
    """
    Get task matching given shotgun id as a dictionary.
    """
    task = Task.get_by(shotgun_id=shotgun_id)
    if task is None:
        raise TaskNotFoundException
    return task.serialize()
예제 #4
0
    def import_entry(self, data):
        task = Task.get_by(shotgun_id=data["shotgun_id"])

        if task is None:
            task = Task.get_by(
                name=data["name"],
                project_id=data["project_id"],
                task_type_id=data["task_type_id"],
                entity_id=data["entity_id"]
            )

        if task is None:
            task = Task(**data)
            task.save()
            current_app.logger.info("Task created: %s" % task)
        else:
            task.update(data)
            current_app.logger.info("Task updated: %s" % task)

        return task
예제 #5
0
    def import_entry(self, data):
        task = Task.get_by(shotgun_id=data["shotgun_id"])

        if task is None:
            task = Task(**data)
            task.save()
            current_app.logger.info("Task created: %s" % task)
        else:
            task.update(data)
            current_app.logger.info("Task updated: %s" % task)

        return task
예제 #6
0
def guess_task(entity, task_type, task_name):
    if entity is None:
        raise WrongPathFormatException("No asset or shot found in given path.")

    criterions = {"entity_id": entity.id, "task_type_id": task_type.id}
    if len(task_name) > 0:
        criterions["name"] = task_name

    task = Task.get_by(**criterions)
    if task is None:
        raise TaskNotFoundException
    else:
        return task
예제 #7
0
    def extract_data(self, sg_note):
        task = Task.get_by(shotgun_id=sg_note["tasks"][0]["id"])
        person_id = self.person_ids.get(sg_note["user"]["id"], None)
        date = datetime.datetime.strptime(sg_note["created_at"][:19],
                                          "%Y-%m-%dT%H:%M:%S")

        return {
            "text": sg_note["content"],
            "shotgun_id": sg_note["id"],
            "object_id": task.id,
            "object_type": "Task",
            "person_id": person_id,
            "created_at": date,
        }
예제 #8
0
    def test_import_note(self):
        self.load_note()
        self.assertEqual(len(self.notes), 1)

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

        note = self.comments[0]
        task = Task.get_by(shotgun_id=self.sg_note["tasks"][0]["id"])
        person = Person.get_by(shotgun_id=self.sg_note["user"]["id"])

        self.assertEqual(note["text"], self.sg_note["content"])
        self.assertEqual(note["object_type"], "Task")
        self.assertEqual(note["shotgun_id"], self.sg_note["id"])
        self.assertEqual(note["object_id"], str(task.id))
        self.assertEqual(note["person_id"], str(person.id))
        self.assertEqual(note["created_at"][:19],
                         self.sg_note["created_at"][:19])
예제 #9
0
    def is_note_linked_to_task(self, sg_note):
        if len(sg_note["tasks"]) == 0:
            return False

        task = Task.get_by(shotgun_id=sg_note["tasks"][0]["id"])
        return task is not None
예제 #10
0
def get_task_by_shotgun_id(shotgun_id):
    task = Task.get_by(shotgun_id=shotgun_id)
    if task is None:
        raise TaskNotFoundException
    return task.serialize()