Loading rpc/methods.py +42 −0 Original line number Diff line number Diff line Loading @@ -1159,6 +1159,48 @@ def remove_meta_from_resource(user: User, resource_id: int, meta_value_id: int) return False @_rpc_groups(["Metadatas", "Resources"]) def set_metas_to_resource(user: User, resource_id: int, metas: dict) -> bool: """ Sets all metas for a unique metadata set. Metas is metadata id => metadata value dictionary. All metas must share the same metadata set. """ # prevent mixing metas from different sets metadatasets_ids = [] for meta_id, meta_value in metas.items(): meta = Metadata.objects.get(pk=meta_id) metadatasets_ids.append(meta.set.pk) metadatasets_ids = list(set(metadatasets_ids)) if len(metadatasets_ids) > 1: raise ServiceException( "can't mix metadata sets when setting multiple meta values at once" ) # check that objects exist resource_instance = Resource.objects.filter( pk=resource_id, deleted_at__isnull=True ).first() if not resource_instance: raise ServiceException("no such resource") metadataset_instance = MetadataSet.objects.filter(pk=metadatasets_ids[0]).first() if not metadataset_instance: raise ServiceException("no such metadatas set") # remove all metas from the set for meta_value in resource_instance.metadataresourcevalue_set.filter( metadata__set=metadataset_instance ): remove_meta_from_resource(user, resource_id, meta_value.metadata.pk) # add metas for meta_id, meta_value in metas.items(): add_meta_to_resource(user, resource_id, meta_id, meta_value) return True @_rpc_groups(["Metadatas", "Resources"]) def add_meta_to_resource( user: User, resource_id: int, meta_id: int, meta_value: str Loading Loading
rpc/methods.py +42 −0 Original line number Diff line number Diff line Loading @@ -1159,6 +1159,48 @@ def remove_meta_from_resource(user: User, resource_id: int, meta_value_id: int) return False @_rpc_groups(["Metadatas", "Resources"]) def set_metas_to_resource(user: User, resource_id: int, metas: dict) -> bool: """ Sets all metas for a unique metadata set. Metas is metadata id => metadata value dictionary. All metas must share the same metadata set. """ # prevent mixing metas from different sets metadatasets_ids = [] for meta_id, meta_value in metas.items(): meta = Metadata.objects.get(pk=meta_id) metadatasets_ids.append(meta.set.pk) metadatasets_ids = list(set(metadatasets_ids)) if len(metadatasets_ids) > 1: raise ServiceException( "can't mix metadata sets when setting multiple meta values at once" ) # check that objects exist resource_instance = Resource.objects.filter( pk=resource_id, deleted_at__isnull=True ).first() if not resource_instance: raise ServiceException("no such resource") metadataset_instance = MetadataSet.objects.filter(pk=metadatasets_ids[0]).first() if not metadataset_instance: raise ServiceException("no such metadatas set") # remove all metas from the set for meta_value in resource_instance.metadataresourcevalue_set.filter( metadata__set=metadataset_instance ): remove_meta_from_resource(user, resource_id, meta_value.metadata.pk) # add metas for meta_id, meta_value in metas.items(): add_meta_to_resource(user, resource_id, meta_id, meta_value) return True @_rpc_groups(["Metadatas", "Resources"]) def add_meta_to_resource( user: User, resource_id: int, meta_id: int, meta_value: str Loading