Ejemplo n.º 1
0
 def test_get_or_create_instance_by_name(self):
     self.assertIsNone(Project.get_by(name="Test"))
     project = \
         base_service.get_or_create_instance_by_name(Project, name="Test")
     self.assertIsNotNone(Project.get_by(name="Test"))
     project_again = \
         base_service.get_or_create_instance_by_name(Project, name="Test")
     self.assertEquals(project["id"], project_again["id"])
Ejemplo n.º 2
0
    def test_import_episode(self):
        self.load_fixture('projects')
        sg_episode = {
            "project": {
                "type": "Project",
                "id": 4,
                "name": "Agent327"
            },
            "code": "E04",
            "type": "Episode",
            "id": 4,
            "description": "test description"
        }
        api_path = "/import/shotgun/episodes"
        self.episodes = self.post(api_path, [sg_episode], 200)
        self.assertEqual(len(self.episodes), 1)

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

        episode = self.episodes[0]
        project = Project.get_by(name="Agent327")
        self.assertEqual(episode["name"], sg_episode["code"])
        self.assertEqual(episode["description"], sg_episode["description"])
        self.assertEqual(episode["shotgun_id"], sg_episode["id"])
        self.assertEqual(episode["project_id"], str(project.id))
Ejemplo n.º 3
0
    def test_import_sequence(self):
        self.load_fixture("projects")
        self.load_fixture("episodes")
        sg_sequence = {
            "project": {"type": "Project", "id": 1, "name": "Agent327"},
            "episode": {"type": "Episode", "id": 1, "name": "E01"},
            "code": "S04",
            "type": "Sequence",
            "id": 4,
            "description": "test description",
        }
        api_path = "/import/shotgun/sequences"
        self.sequences = self.post(api_path, [sg_sequence], 200)
        self.assertEqual(len(self.sequences), 1)

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

        sequence = self.sequences[0]
        project = Project.get_by(name="Agent327")
        episode = Entity.get_by(name="E01")
        self.assertEqual(sequence["name"], sg_sequence["code"])
        self.assertEqual(sequence["description"], sg_sequence["description"])
        self.assertEqual(sequence["shotgun_id"], sg_sequence["id"])
        self.assertEqual(sequence["project_id"], str(project.id))
        self.assertEqual(sequence["parent_id"], str(episode.id))
Ejemplo n.º 4
0
    def test_import_sequence(self):
        self.load_fixture('projects')
        sg_sequence = {
            "project": {
                "type": "Project",
                "id": 1,
                "name": "Cosmos Landromat"
            },
            "code": "S04",
            "type": "Sequence",
            "id": 4,
            "description": "test description"
        }
        api_path = "data/import/shotgun/sequences"
        self.sequences = self.post(api_path, [sg_sequence], 200)
        self.assertEqual(len(self.sequences), 1)

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

        sequence = self.sequences[0]
        project = Project.get_by(name="Cosmos Landromat")
        self.assertEqual(sequence["name"], sg_sequence["code"])
        self.assertEqual(sequence["description"], sg_sequence["description"])
        self.assertEqual(sequence["shotgun_id"], sg_sequence["id"])
        self.assertEqual(sequence["project_id"], str(project.id))
Ejemplo n.º 5
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.º 6
0
def get_project_by_name(project_name):
    project = Project.get_by(name=project_name)

    if project is None:
        raise ProjectNotFoundException()

    return project
Ejemplo n.º 7
0
    def test_import_asset(self):
        self.load_fixture('projects')
        sg_asset = {
            "code": "Cake",
            "description": "yellow cake",
            "project": {
                "type": "Project",
                "id": 1,
                "name": "Cosmos Landromat"
            },
            "sg_asset_type": "Props",
            "type": "Asset",
            "id": 3
        }

        api_path = "data/import/shotgun/assets"
        self.assets = self.post(api_path, [sg_asset], 200)
        self.assertEqual(len(self.assets), 1)

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

        asset = self.assets[0]
        project = Project.get_by(shotgun_id=sg_asset["project"]["id"])
        self.assertEqual(asset["description"], sg_asset["description"])
        self.assertEqual(asset["shotgun_id"], sg_asset["id"])
        self.assertEqual(asset["project_id"], str(project.id))
Ejemplo n.º 8
0
def get_or_create(name):
    project = Project.get_by(name=name)
    if project is None:
        open_status = get_or_create_open_status()
        project = Project(name=name, project_status_id=open_status["id"])
        project.save()
    return project.serialize()
Ejemplo n.º 9
0
    def test_import_shot(self):
        self.load_fixture('projects')
        self.load_fixture('sequences')
        self.load_fixture('assets')
        self.load_fixture('scenes')

        api_path = "/import/shotgun/shots"
        self.shots = self.post(api_path, [self.sg_shot], 200)
        self.assertEqual(len(self.shots), 1)

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

        shot = self.shots[0]
        sequence = Entity.get_by(
            shotgun_id=self.sg_shot["sg_sequence"]["id"],
            entity_type_id=shots_service.get_sequence_type()["id"]
        )
        entity = Entity.get_by(name=self.sg_shot["assets"][0]["name"])
        project = Project.get_by(name=self.sg_shot["project"]["name"])
        scene = Entity.get_by(name=self.sg_shot["sg_scene"]["name"])
        self.assertEqual(shot["name"], self.sg_shot["code"])
        self.assertEqual(shot["data"]["frame_in"], 0)
        self.assertEqual(shot["data"]["frame_out"], 122)
        self.assertEqual(shot["data"]["sg_custom_field"], "test")
        self.assertEqual(shot["parent_id"], str(sequence.id))
        self.assertEqual(shot["entities_out"][0], str(entity.id))
        self.assertEqual(shot["project_id"], str(project.id))
        self.assertEqual(shot["source_id"], str(scene.id))
Ejemplo n.º 10
0
def get_or_create_project(name):
    """
    Get project which match given name. Create it if it does not exist.
    """
    project = Project.get_by(name=name)
    if project is None:
        open_status = get_or_create_open_status()
        project = Project(name=name, project_status_id=open_status["id"])
        project.save()
    return project.serialize()
Ejemplo n.º 11
0
    def import_row(self, row):
        name = row["Name"]
        project_status_name = row["Status"]

        self.add_to_cache_if_absent(self.project_statuses,
                                    project_info.get_or_create_status,
                                    project_status_name)
        project_status_id = self.get_id_from_cache(self.project_statuses,
                                                   project_status_name)

        try:
            project = Project.create(name=name,
                                     project_status_id=project_status_id)
        except IntegrityError:
            project = Project.get_by(name=name)

        return project
Ejemplo n.º 12
0
    def import_entry(self, data):
        project = Project.get_by(shotgun_id=data["shotgun_id"])

        if project is None:
            project = Project(**data)

            tree_name = current_app.config["DEFAULT_FILE_TREE"]
            project.file_tree = file_tree_service.get_tree_from_file(tree_name)

            project.save()
            current_app.logger.info("Project created: %s" % project)

        else:
            project.update(data)
            current_app.logger.info("Project updated: %s" % project)

        return project
Ejemplo n.º 13
0
    def test_import_asset(self):
        self.generate_fixture_asset_type()
        self.generate_fixture_project_status()
        self.generate_fixture_project()
        self.generate_fixture_sequence()
        self.generate_fixture_shot()
        self.shot.update({"shotgun_id": 3})

        self.load_fixture("projects")
        self.load_fixture("assets")
        sg_asset = {
            "code": "Cake",
            "description": "yellow cake",
            "project": {
                "type": "Project",
                "id": 1,
                "name": "Agent 327"
            },
            "sg_asset_type": "Props",
            "type": "Asset",
            "parents": [{
                "type": "Asset",
                "id": 1
            }],
            "id": 3,
        }

        api_path = "/import/shotgun/assets"
        self.assets = self.post(api_path, [sg_asset], 200)
        self.assertEqual(len(self.assets), 1)

        self.assets = self.get("data/assets/all")
        self.assertEqual(len(self.assets), 3)

        assets = sorted(self.assets, key=lambda x: x["name"])
        asset = assets[0]
        asset = assets_service.get_asset_with_relations(asset["id"])
        project = Project.get_by(shotgun_id=sg_asset["project"]["id"])
        self.assertEqual(asset["description"], sg_asset["description"])
        self.assertEqual(asset["shotgun_id"], sg_asset["id"])
        self.assertEqual(asset["project_id"], str(project.id))
        self.assertEqual(len(asset["entities_out"]), 0)

        parent = Entity.get_by(shotgun_id=1)
        self.assertEqual(str(parent.entities_out[0].id), asset["id"])
Ejemplo n.º 14
0
    def import_entry(self, data):
        project_person_link = ProjectPersonLink.query.filter(
            ProjectPersonLink.shotgun_id == data["shotgun_id"]).first()

        if project_person_link is None:
            project = Project.get_by(shotgun_id=data["project_shotgun_id"])
            person = Person.get_by(shotgun_id=data["person_shotgun_id"])

            if project is not None and person is not None:
                project.team.append(person)
                project.save()
                current_app.logger.info("Project Person Link created: %s" %
                                        project)
        else:
            project.update(data)
            current_app.logger.info("Project updated: %s" % project)

        return project
    def test_import_scene(self):
        self.load_fixture("projects")
        self.load_fixture("sequences")

        api_path = "/import/shotgun/scenes"
        self.scenes = self.post(api_path, [self.sg_scene], 200)
        self.assertEqual(len(self.scenes), 1)

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

        scene = self.scenes[0]
        sequence = Entity.get_by(
            shotgun_id=self.sg_scene["sequence_sg_scenes_1_sequences"][0]["id"],
            entity_type_id=shots_service.get_sequence_type()["id"]
        )
        project = Project.get_by(name=self.sg_scene["project"]["name"])
        self.assertEqual(scene["name"], self.sg_scene["code"])
        self.assertEqual(scene["parent_id"], str(sequence.id))
        self.assertEqual(scene["project_id"], str(project.id))
Ejemplo n.º 16
0
    def import_entry(self, data):
        project = Project.get_by(shotgun_id=data["shotgun_id"])

        if project is None:
            project = Project(**data)

            tree_name = current_app.config["DEFAULT_FILE_TREE"]
            try:
                project.file_tree = file_tree_service.get_tree_from_file(
                    tree_name)
            except WrongFileTreeFileException:
                current_app.logger.error(
                    "Can't find default file to set project file tree. Set "
                    "an empty file tree instead.")
                project.file_tree = {}

            project.save()
            current_app.logger.info("Project created: %s" % project)

        else:
            project.update(data)
            current_app.logger.info("Project updated: %s" % project)

        return project
Ejemplo n.º 17
0
 def test_get_by(self):
     self.generate_fixture_project_status()
     self.generate_fixture_project()
     project_id = self.generate_fixture_project("Second project").id
     project = Project.get_by(name="Second project")
     self.assertEqual(project.id, project_id)