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

CenterForOpenScience / SHARE / 13726922278

07 Mar 2025 06:27PM UTC coverage: 82.817% (-8.9%) from 91.752%
13726922278

Pull #848

github

web-flow
Merge fc29eb2c8 into cf198c88f
Pull Request #848: [chore] update github actions workflow

16498 of 19921 relevant lines covered (82.82%)

1.66 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✔
47
        links = {
×
48
            'normalizeddata': 'api:normalizeddata-list',
49
            'rawdata': 'api:rawdatum-list',
50
            'sourceregistrations': 'api:sourceregistration-list',
51
            'sources': 'api:source-list',
52
            'users': 'api:user-list',
53
            'schema': 'api:schema',
54
            'status': 'api:status',
55
            'rss': 'api:rss',
56
            'atom': 'api:atom',
57
        }
58
        ret = {k: request.build_absolute_uri(reverse(v)) for k, v in links.items()}
×
59
        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