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"])
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))
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))
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))
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))
def get_project_by_name(project_name): project = Project.get_by(name=project_name) if project is None: raise ProjectNotFoundException() return project
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))
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()
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))
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()
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
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
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"])
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))
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
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)