def put(self, instance_id): """ Update a model with data given in the request body. JSON format is expected. Model performs the validation automatically when fields are modified. """ try: data = self.get_arguments() entity = self.get_model_or_404(instance_id) self.check_update_permissions(entity.serialize(), data) extra_data = copy.copy(entity.data) or {} if "data" not in data or data["data"] is None: data["data"] = {} extra_data.update(data["data"]) data["data"] = extra_data previous_version = entity.serialize() data = self.update_data(data, instance_id) if data.get("source_id", None) == "null": data["source_id"] = None is_ready_for_changed = \ str(entity.ready_for) != data.get("ready_for", "") entity.update(data) entity_dict = self.serialize_instance(entity) if shots_service.is_shot(entity_dict): shots_service.clear_shot_cache(entity_dict["id"]) self.save_version_if_needed(entity_dict, previous_version) elif assets_service.is_asset(entity): if is_ready_for_changed: breakdown_service.refresh_casting_stats(entity_dict) assets_service.clear_asset_cache(entity_dict["id"]) elif shots_service.is_sequence(entity_dict): shots_service.clear_sequence_cache(entity_dict["id"]) elif shots_service.is_episode(entity_dict): shots_service.clear_episode_cache(entity_dict["id"]) self.emit_update_event(entity_dict) return entity_dict, 200 except StatementError as exception: current_app.logger.error(str(exception), exc_info=1) return {"error": True, "message": str(exception)}, 400 except TypeError as exception: current_app.logger.error(str(exception), exc_info=1) return {"error": True, "message": str(exception)}, 400 except IntegrityError as exception: current_app.logger.error(str(exception), exc_info=1) return {"error": True, "message": str(exception)}, 400 except StatementError as exception: current_app.logger.error(str(exception), exc_info=1) return {"error": True, "message": str(exception)}, 400 except NotFound as exception: return {"error": True, "message": str(exception)}, 404 except Exception as exception: current_app.logger.error(str(exception), exc_info=1) return {"error": True, "message": str(exception)}, 400
def get_type_name(self, entity_dict): type_name = "asset" if shots_service.is_shot(entity_dict): type_name = "shot" elif shots_service.is_sequence(entity_dict): type_name = "sequence" elif shots_service.is_episode(entity_dict): type_name = "episode" return type_name
def get_folder_from_episode(entity): if shots_service.is_shot(entity) or shots_service.is_scene(entity): sequence = shots_service.get_sequence_from_shot(entity) elif shots_service.is_sequence(entity): sequence = entity try: episode = shots_service.get_episode_from_sequence(sequence) episode_name = episode["name"] except: episode_name = "e001" return episode_name
def get_folder_from_sequence(entity): if shots_service.is_shot(entity) or shots_service.is_scene(entity): sequence = shots_service.get_sequence_from_shot(entity) sequence_name = sequence["name"] elif shots_service.is_sequence(entity): sequence_name = entity["name"] else: sequence_name = "" if "Seq" in sequence_name: sequence_number = sequence.name[3:] sequence_name = "S%s" % sequence_number.zfill(3) return sequence_name
def get_file_name_template(tree, mode, entity): try: if entity["type"] == "AssetInstance": return tree[mode]["file_name"]["instance"] elif shots_service.is_shot(entity): return tree[mode]["file_name"]["shot"] elif shots_service.is_sequence(entity): return tree[mode]["file_name"]["sequence"] elif shots_service.is_scene(entity): return tree[mode]["file_name"]["scene"] else: return tree[mode]["file_name"]["asset"] except KeyError: raise MalformedFileTreeException
def get_folder_path_template(tree, mode, entity): try: if entity["type"] == "AssetInstance": if entity.get("target_asset_id", None) is not None: return tree[mode]["folder_path"]["instance_asset"] else: return tree[mode]["folder_path"]["instance"] elif shots_service.is_shot(entity): return tree[mode]["folder_path"]["shot"] elif shots_service.is_sequence(entity): return tree[mode]["folder_path"]["sequence"] elif shots_service.is_scene(entity): return tree[mode]["folder_path"]["scene"] else: return tree[mode]["folder_path"]["asset"] except KeyError: raise MalformedFileTreeException
def test_is_sequence(self): self.assertTrue(shots_service.is_sequence(self.sequence.serialize())) self.assertFalse(shots_service.is_sequence(self.asset.serialize()))
def pre_delete(self, entity): if shots_service.is_sequence(entity): Subscription.delete_all_by(entity_id=entity["id"]) return entity