Skip to content
This repository was archived by the owner on Jun 13, 2025. It is now read-only.

Commit 52ce8a4

Browse files
committed
Use functions instead of Mix ins
1 parent a99b9f2 commit 52ce8a4

File tree

6 files changed

+207
-187
lines changed

6 files changed

+207
-187
lines changed

upload/tests/views/test_combined_upload.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ def test_combined_upload_post(db, mocker):
106106
return_value="presigned put",
107107
)
108108
upload_task_mock = mocker.patch(
109-
"upload.views.uploads.UploadLogicMixin.trigger_upload_task", return_value=True
109+
"upload.views.uploads.trigger_upload_task", return_value=True
110110
)
111111

112112
repository = RepositoryFactory(
@@ -204,7 +204,7 @@ def test_combined_upload_post_shelter(db, mocker):
204204
return_value="presigned put",
205205
)
206206
upload_task_mock = mocker.patch(
207-
"upload.views.uploads.UploadLogicMixin.trigger_upload_task", return_value=True
207+
"upload.views.uploads.trigger_upload_task", return_value=True
208208
)
209209

210210
repository = RepositoryFactory(

upload/tests/views/test_uploads.py

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,12 @@
2323
)
2424
from reports.tests.factories import CommitReportFactory, UploadFactory
2525
from services.archive import ArchiveService, MinioEndpoints
26-
from upload.views.uploads import CanDoCoverageUploadsPermission, UploadViews
26+
from upload.views.uploads import (
27+
CanDoCoverageUploadsPermission,
28+
UploadViews,
29+
activate_repo,
30+
trigger_upload_task,
31+
)
2732

2833

2934
def test_upload_permission_class_pass(db, mocker):
@@ -197,7 +202,7 @@ def test_uploads_post(db, mocker, mock_redis):
197202
return_value="presigned put",
198203
)
199204
upload_task_mock = mocker.patch(
200-
"upload.views.uploads.UploadViews.trigger_upload_task", return_value=True
205+
"upload.views.uploads.trigger_upload_task", return_value=True
201206
)
202207

203208
repository = RepositoryFactory(
@@ -293,7 +298,7 @@ def test_uploads_post_tokenless(db, mocker, mock_redis, private, branch, branch_
293298
return_value="presigned put",
294299
)
295300
upload_task_mock = mocker.patch(
296-
"upload.views.uploads.UploadViews.trigger_upload_task", return_value=True
301+
"upload.views.uploads.trigger_upload_task", return_value=True
297302
)
298303
analytics_service_mock = mocker.patch("upload.views.uploads.AnalyticsService")
299304

@@ -433,7 +438,7 @@ def test_uploads_post_token_required_auth_check(
433438
return_value="presigned put",
434439
)
435440
upload_task_mock = mocker.patch(
436-
"upload.views.uploads.UploadViews.trigger_upload_task", return_value=True
441+
"upload.views.uploads.trigger_upload_task", return_value=True
437442
)
438443
analytics_service_mock = mocker.patch("upload.views.uploads.AnalyticsService")
439444

@@ -577,7 +582,7 @@ def test_uploads_post_github_oidc_auth(
577582
return_value="presigned put",
578583
)
579584
upload_task_mock = mocker.patch(
580-
"upload.views.uploads.UploadViews.trigger_upload_task", return_value=True
585+
"upload.views.uploads.trigger_upload_task", return_value=True
581586
)
582587

583588
repository = RepositoryFactory(
@@ -696,9 +701,7 @@ def test_uploads_post_shelter(db, mocker, mock_redis):
696701
"services.archive.StorageService.create_presigned_put",
697702
return_value="presigned put",
698703
)
699-
mocker.patch(
700-
"upload.views.uploads.UploadViews.trigger_upload_task", return_value=True
701-
)
704+
mocker.patch("upload.views.uploads.trigger_upload_task", return_value=True)
702705
mock_prometheus_metrics = mocker.patch("upload.metrics.API_UPLOAD_COUNTER.labels")
703706

704707
repository = RepositoryFactory(
@@ -798,14 +801,13 @@ def test_deactivated_repo(db, mocker, mock_redis):
798801

799802

800803
def test_trigger_upload_task(db, mocker):
801-
upload_views = UploadViews()
802804
repo = RepositoryFactory.create()
803805
upload = UploadFactory.create()
804806
report = CommitReportFactory.create()
805807
commitid = "commit id"
806808
mocked_redis = mocker.patch("upload.views.uploads.get_redis_connection")
807809
mocked_dispatched_task = mocker.patch("upload.views.uploads.dispatch_upload_task")
808-
upload_views.trigger_upload_task(repo, commitid, upload, report)
810+
trigger_upload_task(repo, commitid, upload, report)
809811
mocked_redis.assert_called()
810812
mocked_dispatched_task.assert_called()
811813

@@ -814,8 +816,7 @@ def test_activate_repo(db):
814816
repo = RepositoryFactory(
815817
active=False, deleted=True, activated=False, coverage_enabled=False
816818
)
817-
upload_views = UploadViews()
818-
upload_views.activate_repo(repo)
819+
activate_repo(repo)
819820
assert repo.active
820821
assert repo.activated
821822
assert not repo.deleted
@@ -826,8 +827,7 @@ def test_activate_already_activated_repo(db):
826827
repo = RepositoryFactory(
827828
active=True, activated=True, deleted=False, coverage_enabled=True
828829
)
829-
upload_views = UploadViews()
830-
upload_views.activate_repo(repo)
830+
activate_repo(repo)
831831
assert repo.active
832832

833833

@@ -855,9 +855,7 @@ def test_uploads_post_github_enterprise_oidc_auth_jwks_url(
855855
"services.archive.StorageService.create_presigned_put",
856856
return_value="presigned put",
857857
)
858-
self.mocker.patch(
859-
"upload.views.uploads.UploadViews.trigger_upload_task", return_value=True
860-
)
858+
self.mocker.patch("upload.views.uploads.trigger_upload_task", return_value=True)
861859

862860
repository = RepositoryFactory(
863861
name="the_repo",

upload/views/combined_upload.py

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,18 @@
2626
)
2727
from upload.throttles import UploadsPerCommitThrottle, UploadsPerWindowThrottle
2828
from upload.views.base import GetterMixin
29-
from upload.views.commits import CommitLogicMixin
30-
from upload.views.reports import ReportLogicMixin
31-
from upload.views.uploads import CanDoCoverageUploadsPermission, UploadLogicMixin
29+
from upload.views.commits import create_commit
30+
from upload.views.reports import create_report
31+
from upload.views.uploads import (
32+
CanDoCoverageUploadsPermission,
33+
create_upload,
34+
get_token_for_analytics,
35+
)
3236

3337
log = logging.getLogger(__name__)
3438

3539

36-
class CombinedUploadView(
37-
APIView, GetterMixin, CommitLogicMixin, ReportLogicMixin, UploadLogicMixin
38-
):
40+
class CombinedUploadView(APIView, GetterMixin):
3941
permission_classes = [CanDoCoverageUploadsPermission]
4042
authentication_classes = [
4143
UploadTokenRequiredAuthenticationCheck,
@@ -79,9 +81,16 @@ def post(self, request: HttpRequest, *args, **kwargs) -> Response:
7981
)
8082

8183
repository = self.get_repo()
82-
log.info(f"Creating commit for {commit_serializer.validated_data}")
8384
self.emit_metrics(position="create_commit")
84-
commit = self.create_commit(commit_serializer, repository)
85+
commit = create_commit(commit_serializer, repository)
86+
87+
log.info(
88+
"Request to create new combined upload",
89+
extra=dict(
90+
repo=repository.name,
91+
commit=commit.commitid,
92+
),
93+
)
8594

8695
# Create report
8796
commit_report_data = dict(
@@ -93,9 +102,8 @@ def post(self, request: HttpRequest, *args, **kwargs) -> Response:
93102
commit_report_serializer.errors, status=status.HTTP_400_BAD_REQUEST
94103
)
95104

96-
log.info(f"Creating report for {commit_report_serializer.validated_data}")
97105
self.emit_metrics(position="create_report")
98-
report = self.create_report(commit_report_serializer, repository, commit)
106+
report = create_report(commit_report_serializer, repository, commit)
99107

100108
# Do upload
101109
upload_data = dict(
@@ -117,9 +125,15 @@ def post(self, request: HttpRequest, *args, **kwargs) -> Response:
117125
upload_serializer.errors, status=status.HTTP_400_BAD_REQUEST
118126
)
119127

120-
log.info(f"Creating upload for {upload_serializer.validated_data}")
121128
self.emit_metrics(position="create_upload")
122-
upload = self.create_upload(upload_serializer, repository, commit, report)
129+
upload = create_upload(
130+
upload_serializer,
131+
repository,
132+
commit,
133+
report,
134+
self.is_shelter_request(),
135+
get_token_for_analytics(commit, self.request),
136+
)
123137

124138
self.emit_metrics(position="end")
125139

upload/views/commits.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,13 @@
2626
log = logging.getLogger(__name__)
2727

2828

29-
class CommitLogicMixin:
30-
def create_commit(self, serializer, repository):
31-
validate_activated_repo(repository)
32-
commit = serializer.save(repository=repository)
33-
return commit
29+
def create_commit(serializer, repository):
30+
validate_activated_repo(repository)
31+
commit = serializer.save(repository=repository)
32+
return commit
3433

3534

36-
class CommitViews(ListCreateAPIView, GetterMixin, CommitLogicMixin):
35+
class CommitViews(ListCreateAPIView, GetterMixin):
3736
serializer_class = CommitSerializer
3837
permission_classes = [CanDoCoverageUploadsPermission]
3938
authentication_classes = [
@@ -75,7 +74,7 @@ def perform_create(self, serializer):
7574
),
7675
)
7776
repository = self.get_repo()
78-
commit = self.create_commit(serializer, repository)
77+
commit = create_commit(serializer, repository)
7978

8079
log.info(
8180
"Request to create new commit",

upload/views/reports.py

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,23 +28,22 @@
2828
log = logging.getLogger(__name__)
2929

3030

31-
class ReportLogicMixin:
32-
def create_report(self, serializer, repository, commit):
33-
code = serializer.validated_data.get("code")
34-
if code == "default":
35-
serializer.validated_data["code"] = None
36-
instance, was_created = serializer.save(
37-
commit_id=commit.id,
38-
report_type=CommitReport.ReportType.COVERAGE,
31+
def create_report(serializer, repository, commit):
32+
code = serializer.validated_data.get("code")
33+
if code == "default":
34+
serializer.validated_data["code"] = None
35+
instance, was_created = serializer.save(
36+
commit_id=commit.id,
37+
report_type=CommitReport.ReportType.COVERAGE,
38+
)
39+
if was_created:
40+
TaskService().preprocess_upload(
41+
repository.repoid, commit.commitid, instance.code
3942
)
40-
if was_created:
41-
TaskService().preprocess_upload(
42-
repository.repoid, commit.commitid, instance.code
43-
)
44-
return instance
43+
return instance
4544

4645

47-
class ReportViews(ListCreateAPIView, GetterMixin, ReportLogicMixin):
46+
class ReportViews(ListCreateAPIView, GetterMixin):
4847
serializer_class = CommitReportSerializer
4948
permission_classes = [CanDoCoverageUploadsPermission]
5049
authentication_classes = [
@@ -77,7 +76,7 @@ def perform_create(self, serializer):
7776
"Request to create new report",
7877
extra=dict(repo=repository.name, commit=commit.commitid),
7978
)
80-
instance = self.create_report(serializer, repository, commit)
79+
instance = create_report(serializer, repository, commit)
8180

8281
inc_counter(
8382
API_UPLOAD_COUNTER,

0 commit comments

Comments
 (0)