def init_data(): projects_service.get_open_status() projects_service.get_closed_status() print("Project status initialized.") assets_service.get_or_create_type("Characters") assets_service.get_or_create_type("Props") assets_service.get_or_create_type("Environment") assets_service.get_or_create_type("FX") assets_service.get_or_create_type("Camera") print("Asset types initialized.") shots_service.get_episode_type() shots_service.get_sequence_type() shots_service.get_shot_type() print("Shot types initialized.") modeling = tasks_service.get_or_create_department("Modeling") animation = tasks_service.get_or_create_department("Animation") fx = tasks_service.get_or_create_department("FX") compositing = tasks_service.get_or_create_department("Compositing") concept = tasks_service.get_or_create_department("Concept") layout = tasks_service.get_or_create_department("Layout") tasks_service.get_or_create_task_type(concept, "Concept", "#8D6E63", 1) tasks_service.get_or_create_task_type(modeling, "Texture", "#64B5F6", 2) tasks_service.get_or_create_task_type(modeling, "Modeling", "#78909C", 3) tasks_service.get_or_create_task_type(animation, "Setup", "#9CCC65", 4) tasks_service.get_or_create_task_type(concept, "Storyboard", "#43A047", 1, True) tasks_service.get_or_create_task_type(layout, "Layout", "#7CB342", 2, True) tasks_service.get_or_create_task_type(animation, "Animation", "#009688", 3, True) tasks_service.get_or_create_task_type(compositing, "Lighting", "#F9A825", 4, True) tasks_service.get_or_create_task_type(fx, "FX", "#26C6DA", 5, True) tasks_service.get_or_create_task_type(compositing, "Render", "#F06292", 6, True) tasks_service.get_or_create_task_type(compositing, "Compositing", "#ff5252", 7, True) print("Task types initialized.") tasks_service.get_or_create_status("Todo", "todo", "#f5f5f5") tasks_service.get_or_create_status("Work In Progress", "wip", "#3273dc") tasks_service.get_or_create_status("Waiting For Approval", "wfa", "#ab26ff", is_reviewable=True) tasks_service.get_or_create_status("Retake", "retake", "#ff3860", is_reviewable=True) tasks_service.get_or_create_status("Done", "done", "#22d160", is_done=True) print("Task status initialized.")
def test_is_asset_ready(self): self.generate_fixture_department() self.generate_fixture_task_type() self.generate_fixture_task_status() self.generate_fixture_person() self.generate_fixture_assigner() self.task_type_compositing = tasks_service.get_or_create_task_type( self.department_animation.serialize(), "compositing", color="#FFFFFF", short_name="compo", for_entity="Shot", ) self.task_type_layout_id = str(self.task_type_layout.id) self.task_type_animation_id = str(self.task_type_animation.id) self.task_type_compositing_id = self.task_type_compositing["id"] projects_service.create_project_task_type_link( self.project_id, self.task_type_layout_id, 1 ) projects_service.create_project_task_type_link( self.project_id, self.task_type_animation_id, 2 ) projects_service.create_project_task_type_link( self.project_id, self.task_type_compositing_id, 3 ) self.task_layout = self.generate_fixture_shot_task( task_type_id=self.task_type_layout_id ) self.task_animation = self.generate_fixture_shot_task( task_type_id=self.task_type_animation_id ) self.task_compositing = self.generate_fixture_shot_task( task_type_id=self.task_type_compositing_id ) priority_map = breakdown_service._get_task_type_priority_map( self.project_id ) self.assertEqual(priority_map[self.task_type_layout_id], 1) self.assertEqual(priority_map[self.task_type_animation_id], 2) self.assertEqual(priority_map[self.task_type_compositing_id], 3) asset = {"ready_for": str(self.task_type_animation.id)} self.assertTrue( breakdown_service._is_asset_ready( asset, self.task_layout, priority_map ) ) self.assertTrue( breakdown_service._is_asset_ready( asset, self.task_animation, priority_map ) ) self.assertFalse( breakdown_service._is_asset_ready( asset, self.task_compositing, priority_map ) ) self.shot_id = str(self.shot.id) self.sequence_id = str(self.sequence.id) self.asset_id = str(self.asset.id) self.asset_character_id = str(self.asset_character.id) new_casting = [ {"asset_id": self.asset_id, "nb_occurences": 1}, {"asset_id": self.asset_character_id, "nb_occurences": 3}, ] breakdown_service.update_casting(self.shot_id, new_casting) asset = assets_service.get_asset_raw(self.asset_id) asset.update({"ready_for": self.task_type_animation_id}) char = assets_service.get_asset_raw(self.asset_character_id) char.update({"ready_for": self.task_type_compositing_id}) breakdown_service.refresh_casting_stats(asset.serialize()) self.task_layout = tasks_service.get_task(self.task_layout.id) self.task_animation = tasks_service.get_task(self.task_animation.id) self.task_compositing = tasks_service.get_task( self.task_compositing.id ) self.assertEqual(self.task_layout["nb_assets_ready"], 2) self.assertEqual(self.task_animation["nb_assets_ready"], 2) self.assertEqual(self.task_compositing["nb_assets_ready"], 1)
def init_data(): """ Put the minimum required data into the database to start with it. """ projects_service.get_open_status() projects_service.get_closed_status() print("Project status initialized.") assets_service.get_or_create_asset_type("Characters") assets_service.get_or_create_asset_type("Props") assets_service.get_or_create_asset_type("Environment") assets_service.get_or_create_asset_type("FX") print("Asset types initialized.") shots_service.get_episode_type() shots_service.get_sequence_type() shots_service.get_shot_type() print("Shot types initialized.") modeling = tasks_service.get_or_create_department("Modeling") animation = tasks_service.get_or_create_department("Animation") fx = tasks_service.get_or_create_department("FX") compositing = tasks_service.get_or_create_department("Compositing") concept = tasks_service.get_or_create_department("Concept") layout = tasks_service.get_or_create_department("Layout") tasks_service.get_or_create_task_type(concept, "Concept", "#8D6E63", 1) tasks_service.get_or_create_task_type(modeling, "Modeling", "#78909C", 2) tasks_service.get_or_create_task_type(modeling, "Shading", "#64B5F6", 3) tasks_service.get_or_create_task_type(animation, "Rigging", "#9CCC65", 4) tasks_service.get_or_create_task_type( concept, "Storyboard", "#43A047", priority=1, for_shots=True, for_entity="Shot", ) tasks_service.get_or_create_task_type( layout, "Layout", "#7CB342", priority=2, for_shots=True, for_entity="Shot", ) tasks_service.get_or_create_task_type( animation, "Animation", "#009688", priority=3, for_shots=True, for_entity="Shot", ) tasks_service.get_or_create_task_type( compositing, "Lighting", "#F9A825", priority=4, for_shots=True, for_entity="Shot", ) tasks_service.get_or_create_task_type(fx, "FX", "#26C6DA", priority=5, for_shots=True, for_entity="Shot") tasks_service.get_or_create_task_type( compositing, "Rendering", "#F06292", priority=6, for_shots=True, for_entity="Shot", ) tasks_service.get_or_create_task_type( compositing, "Compositing", "#ff5252", priority=7, for_shots=True, for_entity="Shot", ) print("Task types initialized.") tasks_service.get_or_create_status("Todo", "todo", "#f5f5f5") tasks_service.get_or_create_status("Work In Progress", "wip", "#3273dc") tasks_service.get_or_create_status("Waiting For Approval", "wfa", "#ab26ff") tasks_service.get_or_create_status("Retake", "retake", "#ff3860", is_retake=True) tasks_service.get_or_create_status("Done", "done", "#22d160", is_done=True) print("Task status initialized.")
def import_row(self, row): project_name = row["Project"] department_name = row["Department"] task_type_name = row["Task Type"] task_status_name = row["Task Status"] entity_type_name = row["Asset Type"] entity_name = row["Asset"] episode_name = row["Episode"] sequence_name = row["Sequence"] shot_name = row["Shot"] name = row["Name"] assigner_name = row["Assigner"] assignee_name = row["Assignee"] duration = int(row["Duration"]) * 3600 estimation = int(row["Estimation"]) * 3600 start_date = self.normalize_date(row["Start Date"]) real_start_date = self.normalize_date(row["Real Start Date"]) due_date = self.normalize_date(row["Due Date"]) end_date = self.normalize_date(row["End Date"]) self.add_to_cache_if_absent(self.task_statuses, tasks_service.get_or_create_status, task_status_name) task_status_id = self.get_id_from_cache(self.task_statuses, task_status_name) self.add_to_cache_if_absent(self.departments, tasks_service.get_or_create_department, department_name) department_id = self.get_id_from_cache(self.departments, department_name) task_type_key = "%s-%s" % (department_id, task_type_name) if task_type_key not in self.task_types: department = self.departments[department_name] self.task_types[task_type_key] = \ tasks_service.get_or_create_task_type( department, task_type_name ) task_type_id = self.get_id_from_cache(self.task_types, task_type_key) project_id = self.projects[project_name].id assigner_id = self.persons[assigner_name].id assignee = self.persons.get(assignee_name, None) if len(shot_name) > 0: episode_id = self.episodes[str(project_id) + episode_name]["id"] sequence_id = self.sequences[str(project_id) + str(episode_id) + sequence_name]["id"] entity_id = self.shots[str(project_id) + str(sequence_id) + shot_name]["id"] else: entity_type_id = self.entity_types[entity_type_name].id entity_id = self.entities[str(project_id) + str(entity_type_id) + entity_name].id task = Task.create(name=name, project_id=project_id, task_type_id=task_type_id, entity_id=entity_id, task_status_id=task_status_id, assigner_id=assigner_id, duration=duration, estimation=estimation, start_date=start_date, end_date=end_date, real_start_date=real_start_date, due_date=due_date) if assignee is not None: task.assignees.append(assignee) task.save() return task