11import logging
22
3+ from django .conf import settings
4+ from django .http import HttpRequest
35from rest_framework import status
4- from rest_framework .generics import ListCreateAPIView
6+ from rest_framework .views import APIView
57from rest_framework .response import Response
8+ from services .archive import ArchiveService
69
710from codecov_auth .authentication .repo_auth import (
811 GitHubOIDCTokenAuthentication ,
1922 UploadSerializer ,
2023)
2124from upload .throttles import UploadsPerCommitThrottle , UploadsPerWindowThrottle
25+ from upload .views .base import GetterMixin
2226from upload .views .commits import CommitLogicMixin
2327from upload .views .reports import ReportLogicMixin
2428from upload .views .uploads import CanDoCoverageUploadsPermission , UploadLogicMixin
2529
2630log = logging .getLogger (__name__ )
2731
2832
29- class CombinedUploadMixin (CommitLogicMixin , ReportLogicMixin , UploadLogicMixin ):
30- pass
31-
32-
33- class CombinedUploadView (ListCreateAPIView , CombinedUploadMixin ):
33+ class CombinedUploadView (APIView , GetterMixin , CommitLogicMixin , ReportLogicMixin , UploadLogicMixin ):
3434 permission_classes = [CanDoCoverageUploadsPermission ]
3535 authentication_classes = [
3636 UploadTokenRequiredAuthenticationCheck ,
@@ -40,86 +40,62 @@ class CombinedUploadView(ListCreateAPIView, CombinedUploadMixin):
4040 RepositoryLegacyTokenAuthentication ,
4141 TokenlessAuthentication ,
4242 ]
43- throttle_classes = [UploadsPerCommitThrottle , UploadsPerWindowThrottle ]
4443
4544 def get_exception_handler (self ):
4645 return repo_auth_custom_exception_handler
4746
48- def create (self , request , * args , ** kwargs ):
47+ def post (self , request : HttpRequest , * args , ** kwargs ) -> Response :
4948 # Create commit
5049 create_commit_data = dict (
50+ commitid = request .data .get ("commit_sha" ),
51+ parent_commit_id = request .data .get ("parent_sha" ),
52+ pullid = request .data .get ("pull_request_number" ),
5153 branch = request .data .get ("branch" ),
52- commit_sha = request .data .get ("commit_sha" ),
53- fail_on_error = True ,
54- git_service = request .data .get ("git_service" ),
55- parent_sha = request .data .get ("parent_sha" ),
56- pull_request_number = request .data .get ("pull_request_number" ),
57- slug = request .data .get ("slug" ),
58- token = request .data .get ("token" ),
5954 )
6055 commit_serializer = CommitSerializer (data = create_commit_data )
61- commit_serializer .is_valid (raise_exception = True )
62-
56+ if not commit_serializer .is_valid ():
57+ return Response (
58+ commit_serializer .errors , status = status .HTTP_400_BAD_REQUEST
59+ )
60+ log .info (f"Creating commit for { commit_serializer .validated_data } " )
6361 repository = self .get_repo ()
6462 commit = self .create_commit (commit_serializer , repository )
6563
6664 # Create report
6765 commit_report_data = dict (
6866 code = request .data .get ("code" ),
69- commit_sha = request .data .get ("commit_sha" ),
70- fail_on_error = True ,
71- git_service = request .data .get ("git_service" ),
72- slug = request .data .get ("slug" ),
73- token = request .data .get ("token" ),
7467 )
7568 commit_report_serializer = CommitReportSerializer (data = commit_report_data )
69+ if not commit_report_serializer .is_valid ():
70+ return Response (
71+ commit_report_serializer .errors , status = status .HTTP_400_BAD_REQUEST
72+ )
7673 report = self .create_report (commit_report_serializer , repository , commit )
7774
7875 # Do upload
7976 upload_data = dict (
80- branch = request .data .get ("branch" ),
81- build_code = request .data .get ("build_code" ),
82- build_url = request .data .get ("build_url" ),
83- commit_sha = request .data .get ("commit_sha" ),
84- disable_file_fixes = request .data .get ("disable_file_fixes" ),
85- disable_search = request .data .get ("disable_search" ),
86- dry_run = request .data .get ("dry_run" ),
87- env_vars = request .data .get ("env_vars" ),
88- fail_on_error = request .data .get ("fail_on_error" ),
89- files_search_exclude_folders = request .data .get (
90- "files_search_exclude_folders"
91- ),
92- files_search_explicitly_listed_files = request .data .get (
93- "files_search_explicitly_listed_files"
94- ),
95- files_search_root_folder = request .data .get ("files_search_root_folder" ),
77+ ci_url = request .data .get ("build_url" ),
78+ env = request .data .get ("env_vars" ),
9679 flags = request .data .get ("flags" ),
97- gcov_args = request .data .get ("gcov_args" ),
98- gcov_executable = request .data .get ("gcov_executable" ),
99- gcov_ignore = request .data .get ("gcov_ignore" ),
100- gcov_include = request .data .get ("gcov_include" ),
101- git_service = request .data .get ("git_service" ),
102- handle_no_reports_found = request .data .get ("handle_no_reports_found" ),
80+ ci_service = request .data .get ("ci_service" ),
10381 job_code = request .data .get ("job_code" ),
10482 name = request .data .get ("name" ),
105- network_filter = request .data .get ("network_filter" ),
106- network_prefix = request .data .get ("network_prefix" ),
107- network_root_folder = request .data .get ("network_root_folder" ),
108- plugin_names = request .data .get ("plugin_names" ),
109- pull_request_number = request .data .get ("pull_request_number" ),
110- report_code = report .code ,
111- report_type = request .data .get ("report_type" ),
112- slug = request .data .get ("slug" ),
113- swift_project = request .data .get ("swift_project" ),
114- token = request .data .get ("token" ),
115- use_legacy_uploader = request .data .get ("use_legacy_uploader" ),
11683 )
11784 upload_serializer = UploadSerializer (data = upload_data )
118- upload_serializer .is_valid (raise_exception = True )
119-
85+ if not upload_serializer .is_valid ():
86+ return Response ( upload_serializer . errors , status = status . HTTP_400_BAD_REQUEST )
12087 instance = self .create_upload (upload_serializer , repository , commit , report )
88+
89+ repository = instance .report .commit .repository
90+ commit = instance .report .commit
91+
92+ url = f"{ settings .CODECOV_DASHBOARD_URL } /{ repository .author .service } /{ repository .author .username } /{ repository .name } /commit/{ commit .commitid } "
93+
94+ archive_service = ArchiveService (repository )
95+ raw_upload_location = archive_service .create_presigned_put (instance .storage_path )
96+
12197 if instance :
122- return Response (data = instance . data , status = status .HTTP_201_CREATED )
98+ return Response ({ "raw_upload_location" : raw_upload_location , "url" : url } , status = status .HTTP_201_CREATED )
12399 else :
124100 return Response (
125101 upload_serializer .errors , status = status .HTTP_400_BAD_REQUEST
0 commit comments