Ejemplo n.º 1
0
    def create(self, validated_data):
        node = Node.load(validated_data.pop('node', None))
        if not node:
            raise exceptions.NotFound('Unable to find Node with specified id.')

        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, save=True)
        preprint.node._has_abandoned_preprint = True
        preprint.node.save()

        return self.update(preprint, validated_data)
Ejemplo n.º 2
0
    def create(self, validated_data):
        node = Node.load(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,
                       save=True)
        preprint.node._has_abandoned_preprint = True
        preprint.node.save()

        return self.update(preprint, validated_data)
Ejemplo n.º 3
0
 def get_queryset(self):
     query = self.get_query_from_request()
     return PreprintService.find(query)
def validate_map_completeness():
    logger.info('Validating completeness of PLOS->BePress mapping')
    assert set([s['text'] for p in PreprintService.find() for hier in p.get_subjects() for s in hier]).issubset(set(PLOS_TO_BP_MAP.keys())),\
        'Subjects not found in map: {}'.format(
            set([s['text'] for p in PreprintService.find() for hier in p.get_subjects() for s in hier]) - set(PLOS_TO_BP_MAP.keys())
        )
Ejemplo n.º 5
0
def validate_map_completeness():
    logger.info('Validating completeness of PLOS->BePress mapping')
    assert set([s['text'] for p in PreprintService.find() for hier in p.get_subjects() for s in hier]).issubset(set(PLOS_TO_BP_MAP.keys())),\
        'Subjects not found in map: {}'.format(
            set([s['text'] for p in PreprintService.find() for hier in p.get_subjects() for s in hier]) - set(PLOS_TO_BP_MAP.keys())
        )