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

Commit cfa3d82

Browse files
Merge branch 'main' of github.com:codecov/codecov-api into 3171-gh-webhook-commit-lock-help
2 parents 08416b3 + 902a5cb commit cfa3d82

File tree

13 files changed

+62
-40
lines changed

13 files changed

+62
-40
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
24.12.2
1+
25.1.3

api/internal/commit/serializers.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
from typing import Dict, List
23

34
import shared.reports.api_report_service as report_service
45
from rest_framework import serializers
@@ -32,7 +33,7 @@ class Meta:
3233
class CommitWithFileLevelReportSerializer(CommitSerializer):
3334
report = serializers.SerializerMethodField()
3435

35-
def get_report(self, commit: Commit):
36+
def get_report(self, commit: Commit) -> Dict[str, List[Dict] | Dict] | None:
3637
report = report_service.build_report_from_commit(commit)
3738
if report is None:
3839
return None

codecov_auth/commands/owner/interactors/save_terms_agreement.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from dataclasses import dataclass
2-
from typing import Optional
2+
from typing import Any, Optional
33

44
from django.utils import timezone
55

@@ -20,7 +20,7 @@ class TermsAgreementInput:
2020
class SaveTermsAgreementInteractor(BaseInteractor):
2121
requires_service = False
2222

23-
def validate(self, input: TermsAgreementInput):
23+
def validate(self, input: TermsAgreementInput) -> None:
2424
valid_customer_intents = ["Business", "BUSINESS", "Personal", "PERSONAL"]
2525
if (
2626
input.customer_intent
@@ -30,7 +30,7 @@ def validate(self, input: TermsAgreementInput):
3030
if not self.current_user.is_authenticated:
3131
raise Unauthenticated()
3232

33-
def update_terms_agreement(self, input: TermsAgreementInput):
33+
def update_terms_agreement(self, input: TermsAgreementInput) -> None:
3434
self.current_user.terms_agreement = input.terms_agreement
3535
self.current_user.terms_agreement_at = timezone.now()
3636
self.current_user.customer_intent = input.customer_intent
@@ -44,14 +44,14 @@ def update_terms_agreement(self, input: TermsAgreementInput):
4444
if input.marketing_consent:
4545
self.send_data_to_marketo()
4646

47-
def send_data_to_marketo(self):
47+
def send_data_to_marketo(self) -> None:
4848
event_data = {
4949
"email": self.current_user.email,
5050
}
5151
AnalyticsService().opt_in_email(self.current_user.id, event_data)
5252

5353
@sync_to_async
54-
def execute(self, input):
54+
def execute(self, input: Any) -> None:
5555
typed_input = TermsAgreementInput(
5656
business_email=input.get("business_email"),
5757
terms_agreement=input.get("terms_agreement"),

codecov_auth/signals.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Any, Dict, Optional, Type
1+
from typing import Any, Dict, Optional, Type, cast
22

33
from django.db.models.signals import post_save
44
from django.dispatch import receiver
@@ -38,7 +38,7 @@ def update_owner(
3838
"""
3939
Shelter tracks a limited set of Owner fields - only update if those fields have changed.
4040
"""
41-
created: bool = kwargs["created"]
41+
created: bool = cast(bool, kwargs["created"])
4242
tracked_fields = [
4343
"upload_token_required_for_public_repos",
4444
"username",

codecov_auth/views/sentry.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def _perform_login(self, request: HttpRequest) -> HttpResponse:
123123
# user has not connected any owners yet
124124
return redirect(f"{settings.CODECOV_DASHBOARD_URL}/sync")
125125

126-
def _login_user(self, request: HttpRequest, user_data: dict):
126+
def _login_user(self, request: HttpRequest, user_data: dict) -> User:
127127
sentry_id = user_data["user"]["id"]
128128
user_name = user_data["user"].get("name")
129129
user_email = user_data["user"].get("email")
@@ -177,7 +177,7 @@ def _login_user(self, request: HttpRequest, user_data: dict):
177177
login(request, current_user)
178178
return current_user
179179

180-
def get(self, request):
180+
def get(self, request: HttpRequest) -> HttpResponse:
181181
if request.GET.get("code"):
182182
return self._perform_login(request)
183183
else:

core/commands/commit/interactors/get_file_content.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import logging
2+
from typing import Any, Coroutine
23

34
from codecov.commands.base import BaseInteractor
5+
from core.models import Commit
46
from services.repo_providers import RepoProviderService
57

68
log = logging.getLogger(__name__)
79

810

911
class GetFileContentInteractor(BaseInteractor):
10-
async def get_file_from_service(self, commit, path):
12+
async def get_file_from_service(self, commit: Commit, path: str) -> str | None:
1113
try:
1214
repository_service = await RepoProviderService().async_get_adapter(
1315
owner=self.current_owner, repo=commit.repository
@@ -27,5 +29,5 @@ async def get_file_from_service(self, commit, path):
2729
)
2830
return None
2931

30-
def execute(self, commit, path):
32+
def execute(self, commit: Commit, path: str) -> Coroutine[Any, Any, str | None]:
3133
return self.get_file_from_service(commit, path)

graphql_api/actions/repository.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
log = logging.getLogger(__name__)
1010

1111

12-
def apply_filters_to_queryset(queryset, filters: dict[str, Any]) -> QuerySet:
12+
def apply_filters_to_queryset(
13+
queryset: QuerySet, filters: dict[str, Any] | None
14+
) -> QuerySet:
1315
filters = filters or {}
1416
term = filters.get("term")
1517
active = filters.get("active")

requirements.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ freezegun
2626
google-cloud-pubsub
2727
gunicorn>=22.0.0
2828
https://github.com/codecov/opentelem-python/archive/refs/tags/v0.0.4a1.tar.gz#egg=codecovopentelem
29-
https://github.com/codecov/shared/archive/abc6b36feceb05c3b754050061436574111058f9.tar.gz#egg=shared
29+
https://github.com/codecov/shared/archive/c3288a017d49d72a85d6f42a2056d3063cfd8dda.tar.gz#egg=shared
3030
https://github.com/photocrowd/django-cursor-pagination/archive/f560902696b0c8509e4d95c10ba0d62700181d84.tar.gz
3131
idna>=3.7
3232
minio

requirements.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,8 @@ googleapis-common-protos[grpc]==1.59.1
202202
# grpcio-status
203203
graphql-core==3.2.3
204204
# via ariadne
205+
greenlet==3.1.1
206+
# via sqlalchemy
205207
grpc-google-iam-v1==0.12.6
206208
# via google-cloud-pubsub
207209
grpcio==1.62.1
@@ -414,7 +416,7 @@ sentry-sdk[celery]==2.13.0
414416
# shared
415417
setproctitle==1.1.10
416418
# via -r requirements.in
417-
shared @ https://github.com/codecov/shared/archive/abc6b36feceb05c3b754050061436574111058f9.tar.gz
419+
shared @ https://github.com/codecov/shared/archive/c3288a017d49d72a85d6f42a2056d3063cfd8dda.tar.gz
418420
# via -r requirements.in
419421
simplejson==3.17.2
420422
# via -r requirements.in

upload/serializers.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
from typing import Any, Dict, List
2+
13
from django.conf import settings
4+
from django.db.models import QuerySet
25
from rest_framework import serializers
36
from shared.api_archive.archive import ArchiveService
47

@@ -11,7 +14,7 @@
1114
class FlagListField(serializers.ListField):
1215
child = serializers.CharField()
1316

14-
def to_representation(self, data):
17+
def to_representation(self, data: QuerySet) -> List[str | None]:
1518
return [item.flag_name if item is not None else None for item in data.all()]
1619

1720

@@ -47,12 +50,12 @@ class Meta:
4750

4851
raw_upload_location = serializers.SerializerMethodField()
4952

50-
def get_raw_upload_location(self, obj: ReportSession):
53+
def get_raw_upload_location(self, obj: ReportSession) -> str:
5154
repo = obj.report.commit.repository
5255
archive_service = ArchiveService(repo)
5356
return archive_service.create_presigned_put(obj.storage_path)
5457

55-
def get_url(self, obj: ReportSession):
58+
def get_url(self, obj: ReportSession) -> str:
5659
repository = obj.report.commit.repository
5760
commit = obj.report.commit
5861
return f"{settings.CODECOV_DASHBOARD_URL}/{repository.author.service}/{repository.author.username}/{repository.name}/commit/{commit.commitid}"
@@ -64,7 +67,7 @@ def _create_existing_flags_map(self, repoid: int) -> dict:
6467
existing_flags_map[flag_obj.flag_name] = flag_obj
6568
return existing_flags_map
6669

67-
def create(self, validated_data):
70+
def create(self, validated_data: Dict[str, Any]) -> ReportSession | None:
6871
flag_names = (
6972
validated_data.pop("flags") if "flags" in validated_data.keys() else []
7073
)
@@ -134,7 +137,7 @@ class Meta:
134137
"branch",
135138
)
136139

137-
def create(self, validated_data):
140+
def create(self, validated_data: Dict[str, Any]) -> Commit:
138141
repo = validated_data.pop("repository", None)
139142
commitid = validated_data.pop("commitid", None)
140143
commit, created = Commit.objects.get_or_create(
@@ -161,7 +164,7 @@ class Meta:
161164
)
162165
fields = read_only_fields + ("code",)
163166

164-
def create(self, validated_data) -> tuple[CommitReport, bool]:
167+
def create(self, validated_data: Dict[str, Any]) -> tuple[CommitReport, bool]:
165168
report = (
166169
CommitReport.objects.coverage_reports()
167170
.filter(

0 commit comments

Comments
 (0)