Skip to content

Commit 0feeb80

Browse files
authored
fix: a couple of rest api unhandled errors (#1139)
1 parent faecc38 commit 0feeb80

File tree

4 files changed

+26
-11
lines changed

4 files changed

+26
-11
lines changed

api/public/v1/serializers.py

+4
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,7 @@ class Meta:
1616
"state",
1717
)
1818
fields = read_only_fields + ("user_provided_base_sha",)
19+
20+
21+
class PullIdSerializer(serializers.Serializer):
22+
pullid = serializers.IntegerField()

api/public/v1/tests/views/test_pull_viewset.py

+7
Original file line numberDiff line numberDiff line change
@@ -133,3 +133,10 @@ def test_post_pull_user_provided_base(self, pulls_sync_mock):
133133
)
134134
self.assertEqual(response.status_code, 405)
135135
assert not pulls_sync_mock.called
136+
137+
def test_get_pull_no_pullid_provided(self):
138+
self.client.credentials(HTTP_AUTHORIZATION="Token " + self.repo.upload_token)
139+
response = self.client.get("/api/github/codecov/testRepoName/pulls/abc")
140+
self.assertEqual(response.status_code, 400)
141+
content = json.loads(response.content.decode())
142+
self.assertEqual(content["pullid"], ["A valid integer is required."])

api/public/v1/views.py

+10-7
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import logging
22

3-
from django.db.models import OuterRef, Subquery
3+
from django.db.models import OuterRef, QuerySet, Subquery
44
from django.shortcuts import get_object_or_404
55
from django_filters.rest_framework import DjangoFilterBackend
66
from rest_framework import filters, mixins, viewsets
77

88
from api.shared.mixins import RepoPropertyMixin
99
from codecov_auth.authentication.repo_auth import RepositoryLegacyTokenAuthentication
10-
from core.models import Commit
10+
from core.models import Commit, Pull
1111
from services.task import TaskService
1212

1313
from .permissions import PullUpdatePermission
14-
from .serializers import PullSerializer
14+
from .serializers import PullIdSerializer, PullSerializer
1515

1616
log = logging.getLogger(__name__)
1717

@@ -30,8 +30,11 @@ class PullViewSet(
3030
authentication_classes = [RepositoryLegacyTokenAuthentication]
3131
permission_classes = [PullUpdatePermission]
3232

33-
def get_object(self):
34-
pullid = self.kwargs.get("pk")
33+
def get_object(self) -> Pull:
34+
serializer = PullIdSerializer(data={"pullid": self.kwargs.get("pk")})
35+
serializer.is_valid(raise_exception=True)
36+
pullid = serializer.validated_data["pullid"]
37+
3538
if self.request.method == "PUT":
3639
# Note: We create a new pull if needed to make sure that they can be updated
3740
# with a base before the upload has finished processing.
@@ -41,7 +44,7 @@ def get_object(self):
4144
return obj
4245
return get_object_or_404(self.get_queryset(), pullid=pullid)
4346

44-
def get_queryset(self):
47+
def get_queryset(self) -> QuerySet:
4548
return self.repo.pull_requests.annotate(
4649
ci_passed=Subquery(
4750
Commit.objects.filter(
@@ -50,7 +53,7 @@ def get_queryset(self):
5053
)
5154
)
5255

53-
def perform_update(self, serializer):
56+
def perform_update(self, serializer: PullSerializer) -> Pull:
5457
result = super().perform_update(serializer)
5558
TaskService().pulls_sync(repoid=self.repo.repoid, pullid=self.kwargs.get("pk"))
5659
return result

api/public/v2/compare/serializers.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@ class ComparisonSerializer(BaseComparisonSerializer):
1616

1717
def get_files(self, comparison: Comparison) -> List[dict]:
1818
data = []
19-
for filename in comparison.head_report.files:
20-
file = comparison.get_file_comparison(filename, bypass_max_diff=True)
21-
if self._should_include_file(file):
22-
data.append(FileComparisonSerializer(file).data)
19+
if comparison.head_report is not None:
20+
for filename in comparison.head_report.files:
21+
file = comparison.get_file_comparison(filename, bypass_max_diff=True)
22+
if self._should_include_file(file):
23+
data.append(FileComparisonSerializer(file).data)
2324
return data
2425

2526

0 commit comments

Comments
 (0)