def create(self, validated_data): node = validated_data.pop('node', {}) if isinstance(node, dict): node = Node.objects.create(creator=self.context['request'].user, **node) if node.is_deleted: raise exceptions.ValidationError( 'Cannot create a preprint from a deleted node.') auth = get_user_auth(self.context['request']) if not node.has_permission(auth.user, permissions.ADMIN): raise exceptions.PermissionDenied provider = validated_data.pop('provider', None) if not provider: raise exceptions.ValidationError( detail='You must specify a valid provider to create a preprint.' ) node_preprints = node.preprints.filter(provider=provider) if node_preprints.exists(): raise Conflict( 'Only one preprint per provider can be submitted for a node. Check `meta[existing_resource_id]`.', meta={'existing_resource_id': node_preprints.first()._id}) preprint = PreprintService(node=node, provider=provider) preprint.save() preprint.node._has_abandoned_preprint = True preprint.node.save() return self.update(preprint, validated_data)
def create(self, validated_data): node = validated_data.pop('node', {}) if isinstance(node, dict): node = Node.objects.create(creator=self.context['request'].user, **node) if node.is_deleted: raise exceptions.ValidationError('Cannot create a preprint from a deleted node.') auth = get_user_auth(self.context['request']) if not node.has_permission(auth.user, permissions.ADMIN): raise exceptions.PermissionDenied provider = validated_data.pop('provider', None) if not provider: raise exceptions.ValidationError(detail='You must specify a valid provider to create a preprint.') node_preprints = node.preprints.filter(provider=provider) if node_preprints.exists(): raise Conflict('Only one preprint per provider can be submitted for a node. Check `meta[existing_resource_id]`.', meta={'existing_resource_id': node_preprints.first()._id}) preprint = PreprintService(node=node, provider=provider) preprint.save() preprint.node._has_abandoned_preprint = True preprint.node.save() return self.update(preprint, validated_data)
def create(self, validated_data): node = validated_data.pop('node', None) if not node: raise exceptions.NotFound('Unable to find Node with specified id.') elif node.is_deleted: raise exceptions.ValidationError('Cannot create a preprint from a deleted node.') auth = get_user_auth(self.context['request']) if not node.has_permission(auth.user, permissions.ADMIN): raise exceptions.PermissionDenied primary_file = validated_data.pop('primary_file', None) if not primary_file: raise exceptions.ValidationError(detail='You must specify a valid primary_file to create a preprint.') provider = validated_data.pop('provider', None) if not provider: raise exceptions.ValidationError(detail='You must specify a valid provider to create a preprint.') if PreprintService.find(Q('node', 'eq', node) & Q('provider', 'eq', provider)).count(): conflict = PreprintService.find_one(Q('node', 'eq', node) & Q('provider', 'eq', provider)) raise Conflict('Only one preprint per provider can be submitted for a node. Check `meta[existing_resource_id]`.', meta={'existing_resource_id': conflict._id}) preprint = PreprintService(node=node, provider=provider) self.set_field(preprint.set_primary_file, primary_file, auth) preprint.save() preprint.node._has_abandoned_preprint = True preprint.node.save() return self.update(preprint, validated_data)