def remove_episode(episode_id, force=False): """ Remove an episode and all related sequences and shots. """ from zou.app.services import shots_service, assets_service episode = shots_service.get_episode_raw(episode_id) if force: for sequence in Entity.get_all_by(parent_id=episode_id): shots_service.remove_sequence(sequence.id, force=True) for asset in Entity.get_all_by(source_id=episode_id): assets_service.remove_asset(asset.id, force=True) Playlist.delete_all_by(episode_id=episode_id) ScheduleItem.delete_all_by(object_id=episode_id) try: episode.delete() events.emit( "episode:delete", {"episode_id": episode_id}, project_id=str(episode.project_id), ) except IntegrityError: raise ModelWithRelationsDeletionException( "Some data are still linked to this episode.") shots_service.clear_episode_cache(episode_id) return episode.serialize(obj_type="Episode")
def remove_episode(episode_id, force=False): """ Remove an episode and all related sequences and shots. """ episode = get_episode_raw(episode_id) if force: for sequence in Entity.get_all_by(parent_id=episode_id): remove_sequence(sequence.id, force=True) Playlist.delete_all_by(episode_id=episode_id) ScheduleItem.delete_all_by(object_id=episode_id) try: episode.delete() except IntegrityError: raise ModelWithRelationsDeletionException( "Some data are still linked to this episode.") return episode.serialize(obj_type="Episode")
def remove_sequence(sequence_id, force=False): """ Remove a sequence and all related shots. """ sequence = get_sequence_raw(sequence_id) if force: for shot in Entity.get_all_by(parent_id=sequence_id): remove_shot(shot.id, force=True) Subscription.delete_all_by(entity_id=sequence_id) ScheduleItem.delete_all_by(object_id=sequence_id) try: sequence.delete() except IntegrityError: raise ModelWithRelationsDeletionException( "Some data are still linked to this sequence.") return sequence.serialize(obj_type="Sequence")
def get_schedule_items(project_id): """ Return all schedule items for given project. If no schedule item exists for a given task type, it creates one. """ task_types = tasks_service.get_task_types_for_project(project_id) task_type_map = base_service.get_model_map_from_array(task_types) schedule_items = set( ScheduleItem.query.filter_by(project_id=project_id).all()) schedule_item_map = { str(schedule_item.task_type_id): schedule_item for schedule_item in schedule_items } new_schedule_items = set() schedule_item_to_remove = set() for schedule_item in schedule_items: if schedule_item.task_type_id is not None: if str(schedule_item.task_type_id) not in task_type_map: schedule_item_to_remove.add(schedule_item) for task_type in task_types: if task_type["id"] not in schedule_item_map: new_schedule_item = ScheduleItem.create( project_id=project_id, start_date=date.today(), end_date=date.today() + timedelta(days=1), task_type_id=task_type["id"]) new_schedule_items.add(new_schedule_item) schedule_items = \ schedule_items.union(new_schedule_items) - schedule_item_to_remove return sorted( [schedule_item.present() for schedule_item in schedule_items], key=lambda x: x["start_date"])
def check_creation_integrity(self, data): schedule_item = ScheduleItem.get_by( project_id=data.get("project_id", None), task_type_id=data.get("task_type_id", None), object_id=data.get("object_id", None), ) if schedule_item is not None: raise ArgumentsException("A similar schedule item already exists") return schedule_item
def generate_fixture_schedule_item(self, task_type_id=None, object_id=None): if task_type_id is None: task_type_id = self.task_type.id self.schedule_item = ScheduleItem.create( project_id=self.project.id, task_type_id=self.task_type.id, object_id=object_id) return self.schedule_item.serialize()
def remove_project(project_id): from zou.app.services import playlists_service tasks = Task.query.filter_by(project_id=project_id) for task in tasks: remove_task(task.id, force=True) query = EntityLink.query.join(Entity, EntityLink.entity_in_id == Entity.id).filter( Entity.project_id == project_id) for link in query: link.delete_no_commit() EntityLink.commit() query = EntityVersion.query.join( Entity, EntityVersion.entity_id == Entity.id).filter( Entity.project_id == project_id) for version in query: version.delete_no_commit() EntityLink.commit() playlists = Playlist.query.filter_by(project_id=project_id) for playlist in playlists: playlists_service.remove_playlist(playlist.id) ApiEvent.delete_all_by(project_id=project_id) Entity.delete_all_by(project_id=project_id) MetadataDescriptor.delete_all_by(project_id=project_id) Milestone.delete_all_by(project_id=project_id) ScheduleItem.delete_all_by(project_id=project_id) SearchFilter.delete_all_by(project_id=project_id) for news in News.query.join(Task).filter_by(project_id=project_id).all(): news.delete_no_commit() News.commit() project = Project.get(project_id) project.delete() events.emit("project:delete", {"project_id": project.id}) return project_id
def get_entity_schedule_items( project_id, task_type_id, to_create, to_create_map, existing_schedule_items ): schedule_item_map = { str(schedule_item.object_id): schedule_item for schedule_item in existing_schedule_items } new_schedule_items = set() schedule_item_to_remove = set() for schedule_item in existing_schedule_items: if schedule_item.object_id is not None: if str(schedule_item.object_id) not in to_create_map: schedule_item_to_remove.add(schedule_item) for entity in to_create: if entity["id"] not in schedule_item_map: new_schedule_item = ScheduleItem.create( project_id=project_id, start_date=date.today(), end_date=date.today() + timedelta(days=1), object_id=entity["id"], task_type_id=task_type_id, ) events.emit( "schedule-item:new", {"schedule_item_id": str(new_schedule_item.id)}, ) new_schedule_items.add(new_schedule_item) schedule_items = ( existing_schedule_items.union(new_schedule_items) - schedule_item_to_remove ) results = [] for schedule_item in schedule_items: result = schedule_item.present() result["name"] = to_create_map[result["object_id"]]["name"] results.append(result) return sorted(results, key=lambda x: x["name"])
def setUp(self): super(ScheduleItemTestCase, self).setUp() self.generate_fixture_department() self.generate_fixture_task_type() self.generate_shot_suite() ScheduleItem.create(project_id=self.project.id, task_type_id=self.task_type.id, start_date=date.today(), end_date=date.today() + timedelta(days=1)) ScheduleItem.create(project_id=self.project.id, task_type_id=self.task_type_animation.id, start_date=date.today(), end_date=date.today() + timedelta(days=1)) ScheduleItem.create(project_id=self.project.id, task_type_id=self.task_type_layout.id, start_date=date.today(), end_date=date.today() + timedelta(days=1))