• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

CenterForOpenScience / SHARE / 14839804620

05 May 2025 03:11PM UTC coverage: 79.141% (-12.6%) from 91.745%
14839804620

push

github

web-flow
Merge pull request #859 from CenterForOpenScience/release/25.2.0

Release/25.2.0 share cleanupgrade (milestone 1: simplify)

147 of 204 new or added lines in 33 files covered. (72.06%)

984 existing lines in 69 files now uncovered.

6101 of 7709 relevant lines covered (79.14%)

1.58 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

74.19
/api/base/views.py
1
import re
2✔
2

3
from django.urls import reverse
2✔
4

5
from rest_framework import views, viewsets
2✔
6
from rest_framework.response import Response
2✔
7
from rest_framework_json_api import serializers
2✔
8

9
from share.util import IDObfuscator, InvalidID
2✔
10

11

12
__all__ = ('ShareViewSet', 'RootView')
2✔
13

14

15
class ShareViewSet(viewsets.ViewSet):
2✔
16
    ordering = ('-id', )
2✔
17

18
    def initial(self, request, *args, **kwargs):
2✔
19
        ret = super().initial(request, *args, **kwargs)
2✔
20

21
        lookup_key = self.lookup_url_kwarg or self.lookup_field
2✔
22
        if lookup_key not in self.kwargs:
2✔
23
            return ret
2✔
24
        lookup = self.kwargs[lookup_key]
2✔
25
        expected_model = self.get_serializer_class().Meta.model
2✔
26

27
        # Decode id's before the all the internal dispatching
28
        try:
2✔
29
            model, id = IDObfuscator().decode(lookup)
2✔
30
        except InvalidID:
×
31
            if re.fullmatch(r'\d+', lookup):
×
32
                # Allow primary keys for debugging convenience.
33
                # Mabye remove if people start abusing this to harvest by sequential PK.
34
                return ret
×
35
            raise serializers.ValidationError('Invalid ID')
×
36

37
        if not issubclass(expected_model, model):
2✔
38
            raise serializers.ValidationError('Invalid ID')
×
39

40
        self.kwargs[lookup_key] = str(id)
2✔
41

42
        return ret
2✔
43

44

45
class RootView(views.APIView):
2✔
46
    def get(self, request):
2✔
UNCOV
47
        links = {
×
48
            'rawdata': 'api:rawdatum-list',
49
            'sources': 'api:source-list',
50
            'users': 'api:user-list',
51
            'status': 'api:status',
52
            'rss': 'api:rss',
53
            'atom': 'api:atom',
54
        }
55
        ret = {k: request.build_absolute_uri(reverse(v)) for k, v in links.items()}
×
56
        return Response(ret)
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc