Skip to content

Commit 12f4426

Browse files
committed
Refactor error handling to maintain exception context and update type hint for verification field
1 parent b5bc6d8 commit 12f4426

File tree

3 files changed

+6
-41
lines changed

3 files changed

+6
-41
lines changed

backend/analytics_server/mhq/exapi/github.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import contextlib
22
from datetime import datetime
33
from http import HTTPStatus
4-
from typing import Optional, Dict, Tuple, List, cast
4+
from typing import Any, Optional, Dict, Tuple, List, cast
55

66
import requests
77

@@ -297,7 +297,7 @@ def _fetch_timeline_events(page: int = 1) -> List[Dict]:
297297
except requests.RequestException as e:
298298
raise GithubException(
299299
HTTPStatus.SERVICE_UNAVAILABLE, f"Network error: {str(e)}"
300-
)
300+
) from e
301301

302302
if response.status_code == HTTPStatus.NOT_FOUND:
303303
raise GithubException(
@@ -319,7 +319,7 @@ def _fetch_timeline_events(page: int = 1) -> List[Dict]:
319319
except ValueError as e:
320320
raise GithubException(
321321
HTTPStatus.INTERNAL_SERVER_ERROR, f"Invalid JSON response: {str(e)}"
322-
)
322+
) from e
323323

324324
def _create_timeline_event(event_data: Dict) -> GitHubPrTimelineEventsDict:
325325
return GitHubPrTimelineEventsDict(
@@ -352,7 +352,7 @@ def _create_timeline_event(event_data: Dict) -> GitHubPrTimelineEventsDict:
352352
except Exception as e:
353353
raise GithubException(
354354
HTTPStatus.INTERNAL_SERVER_ERROR, f"Unexpected error: {str(e)}"
355-
)
355+
) from e
356356

357357
return adapt_github_timeline_events(all_timeline_events)
358358

@@ -390,7 +390,7 @@ def __init__(self, event_type: str, data: GitHubPullTimelineEvent):
390390
self.event_type = event_type
391391
self.data = data
392392

393-
def _get_nested_value(self, path: str) -> Optional[any]:
393+
def _get_nested_value(self, path: str) -> Optional[Any]:
394394
keys = path.split(".")
395395
current = self.data
396396

backend/analytics_server/mhq/exapi/schemas/timeline.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class CommitEvent(TypedDict):
5858
tree: TreeDict
5959
message: str
6060
parents: List[ParentDict]
61-
verification: VerificationDict
61+
verification: Optional[VerificationDict]
6262
event: str
6363

6464

backend/analytics_server/tests/service/code/sync/test_etl_code_analytics.py

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -744,38 +744,3 @@ def test_cycle_time_ready_for_review_with_draft_pr_workflow():
744744

745745
assert performance.cycle_time == 86400
746746
assert performance.first_review_time == 14400
747-
748-
749-
def test_cycle_time_ready_for_review_after_first_review():
750-
"""Test cycle time when ready_for_review event occurs after first review (edge case)."""
751-
pr_service = CodeETLAnalyticsService()
752-
t1 = time_now()
753-
t2 = t1 + timedelta(hours=1) # first review
754-
t3 = t1 + timedelta(hours=2) # ready for review (after review)
755-
t4 = t1 + timedelta(days=1) # merged
756-
757-
pr = get_pull_request(
758-
state=PullRequestState.MERGED, created_at=t1, state_changed_at=t4, updated_at=t4
759-
)
760-
761-
review_event = get_pull_request_event(
762-
pull_request_id=pr.id, type=PullRequestEventType.REVIEW.value, created_at=t2
763-
)
764-
765-
ready_for_review_event = get_pull_request_event(
766-
pull_request_id=pr.id,
767-
type=PullRequestEventType.READY_FOR_REVIEW.value,
768-
created_at=t3,
769-
)
770-
771-
performance = pr_service.get_pr_performance(
772-
pr, [review_event, ready_for_review_event]
773-
)
774-
775-
# Should still use ready_for_review as start time for cycle time
776-
# t4 - t3 = 22 hours = 79200 seconds
777-
assert performance.cycle_time == 79200
778-
# First response time should be from ready_for_review to first review
779-
# Since review happened before ready_for_review, this should be from creation time
780-
# t2 - t1 = 1 hour = 3600 seconds
781-
assert performance.first_review_time == -3600

0 commit comments

Comments
 (0)