From 4ad4d3477e6b36906c946214a2d6453330268ae0 Mon Sep 17 00:00:00 2001 From: Marcelo Robert Santos Date: Fri, 17 Jan 2025 14:48:40 -0300 Subject: [PATCH] refactor: reuse Issue class --- .../kernelCI_app/helpers/hardwareDetails.py | 2 +- .../kernelCI_app/typeModels/commonDetails.py | 23 +++---------------- .../kernelCI_app/typeModels/issueDetails.py | 11 --------- backend/kernelCI_app/typeModels/issues.py | 22 ++++++++++++++++++ backend/kernelCI_app/utils.py | 17 +++----------- .../views/issueDetailsBuildsView.py | 2 +- .../views/issueDetailsTestsView.py | 2 +- .../kernelCI_app/views/issueDetailsView.py | 6 +++-- backend/kernelCI_app/views/issuesView.py | 3 +-- .../views/treeDetailsBootsView.py | 4 +--- .../views/treeDetailsTestsView.py | 4 +--- backend/kernelCI_app/views/treeDetailsView.py | 3 +-- 12 files changed, 39 insertions(+), 60 deletions(-) delete mode 100644 backend/kernelCI_app/typeModels/issueDetails.py create mode 100644 backend/kernelCI_app/typeModels/issues.py diff --git a/backend/kernelCI_app/helpers/hardwareDetails.py b/backend/kernelCI_app/helpers/hardwareDetails.py index befc03fe..d57bdd76 100644 --- a/backend/kernelCI_app/helpers/hardwareDetails.py +++ b/backend/kernelCI_app/helpers/hardwareDetails.py @@ -460,7 +460,7 @@ def update_issues( issue_report_url: Optional[str], task: Dict, is_failed_task: bool, - issue_from: str, + issue_from: Literal["build", "test"], ) -> None: can_insert_issue = True if issue_from == "build": diff --git a/backend/kernelCI_app/typeModels/commonDetails.py b/backend/kernelCI_app/typeModels/commonDetails.py index d95e7f20..a944bc9a 100644 --- a/backend/kernelCI_app/typeModels/commonDetails.py +++ b/backend/kernelCI_app/typeModels/commonDetails.py @@ -1,6 +1,7 @@ from datetime import datetime from typing import Dict, List, Optional, Union +from kernelCI_app.typeModels.issues import Issue from pydantic import BaseModel @@ -30,24 +31,6 @@ class BuildConfigs(BuildStatusCount): null: int -class IncidentsInfo(BaseModel): - incidentsCount: int - - -class TestIssuesItem(BaseModel): - id: str - comment: Optional[str] - report_url: Optional[str] - incidents_info: IncidentsInfo - - -class BuildsIssuesItem(BaseModel): - id: str - comment: Optional[str] - report_url: Optional[str] - incidents_info: IncidentsInfo - - class BuildArchitectures(BuildStatusCount): compilers: List[str] @@ -89,7 +72,7 @@ class TestSummary(BaseModel): status: TestStatusCount architectures: List[TestArchSummaryItem] configs: Dict[str, TestStatusCount] - issues: List[TestIssuesItem] + issues: List[Issue] unknown_issues: int fail_reasons: Dict[str, int] failed_platforms: List[str] @@ -102,7 +85,7 @@ class BuildSummary(BaseModel): status: BuildStatusCount architectures: Dict[str, BuildArchitectures] configs: Dict[str, BuildConfigs] - issues: List[BuildsIssuesItem] + issues: List[Issue] unknown_issues: int diff --git a/backend/kernelCI_app/typeModels/issueDetails.py b/backend/kernelCI_app/typeModels/issueDetails.py deleted file mode 100644 index 34807d98..00000000 --- a/backend/kernelCI_app/typeModels/issueDetails.py +++ /dev/null @@ -1,11 +0,0 @@ -from typing import Dict, Tuple -from kernelCI_app.utils import Issue -from pydantic import BaseModel - - -class IssueDetailsPathParameters(BaseModel): - issue_id: str - version: int - - -type IssueDict = Dict[Tuple[str, str], Issue] diff --git a/backend/kernelCI_app/typeModels/issues.py b/backend/kernelCI_app/typeModels/issues.py new file mode 100644 index 00000000..3b47095c --- /dev/null +++ b/backend/kernelCI_app/typeModels/issues.py @@ -0,0 +1,22 @@ +from typing import Dict, Optional, Tuple +from pydantic import BaseModel + + +class IssueDetailsPathParameters(BaseModel): + issue_id: str + version: int + + +class IncidentInfo(BaseModel): + incidentsCount: int + + +class Issue(BaseModel): + id: str + version: int + comment: Optional[str] + report_url: Optional[str] + incidents_info: IncidentInfo + + +type IssueDict = Dict[Tuple[str, str], Issue] diff --git a/backend/kernelCI_app/utils.py b/backend/kernelCI_app/utils.py index 5c8dccbc..cc5c84e8 100644 --- a/backend/kernelCI_app/utils.py +++ b/backend/kernelCI_app/utils.py @@ -1,29 +1,18 @@ import json -from typing import Union, TypedDict, List, Optional, Dict +from typing import Union, List, Optional, Dict from django.utils import timezone from datetime import timedelta from kernelCI_app.helpers.logger import log_message +from kernelCI_app.typeModels.issues import Issue DEFAULT_QUERY_TIME_INTERVAL = {"days": 7} -class IncidentInfo(TypedDict): - incidentsCount: int - - -class Issue(TypedDict): - id: str - version: str - comment: Optional[str] - report_url: Optional[str] - incidents_info: IncidentInfo - - def create_issue( *, issue_id: str, - issue_version: str, + issue_version: int, issue_comment: Optional[str], issue_report_url: Optional[str] ) -> Issue: diff --git a/backend/kernelCI_app/views/issueDetailsBuildsView.py b/backend/kernelCI_app/views/issueDetailsBuildsView.py index 5ec5ac77..eec9ec13 100644 --- a/backend/kernelCI_app/views/issueDetailsBuildsView.py +++ b/backend/kernelCI_app/views/issueDetailsBuildsView.py @@ -4,7 +4,7 @@ from django.views import View from kernelCI_app.helpers.errorHandling import create_error_response from kernelCI_app.models import Incidents -from kernelCI_app.typeModels.issueDetails import IssueDetailsPathParameters +from kernelCI_app.typeModels.issues import IssueDetailsPathParameters from pydantic import ValidationError diff --git a/backend/kernelCI_app/views/issueDetailsTestsView.py b/backend/kernelCI_app/views/issueDetailsTestsView.py index 9659e0a5..6d363e06 100644 --- a/backend/kernelCI_app/views/issueDetailsTestsView.py +++ b/backend/kernelCI_app/views/issueDetailsTestsView.py @@ -4,7 +4,7 @@ from django.views import View from kernelCI_app.helpers.errorHandling import create_error_response from kernelCI_app.models import Incidents -from kernelCI_app.typeModels.issueDetails import IssueDetailsPathParameters +from kernelCI_app.typeModels.issues import IssueDetailsPathParameters from pydantic import ValidationError diff --git a/backend/kernelCI_app/views/issueDetailsView.py b/backend/kernelCI_app/views/issueDetailsView.py index 258a6e0e..9f981a0f 100644 --- a/backend/kernelCI_app/views/issueDetailsView.py +++ b/backend/kernelCI_app/views/issueDetailsView.py @@ -4,7 +4,7 @@ from django.views import View from kernelCI_app.helpers.errorHandling import create_error_response from kernelCI_app.models import Issues -from kernelCI_app.typeModels.issueDetails import IssueDetailsPathParameters +from kernelCI_app.typeModels.issues import IssueDetailsPathParameters from pydantic import ValidationError @@ -34,7 +34,9 @@ def _fetch_issue(self, *, issue_id: str, version: int) -> Optional[Dict]: return query - def get(self, _request, issue_id: Optional[str], version: Optional[str]) -> JsonResponse: + def get( + self, _request, issue_id: Optional[str], version: Optional[str] + ) -> JsonResponse: try: parsed_params = IssueDetailsPathParameters( issue_id=issue_id, version=version diff --git a/backend/kernelCI_app/views/issuesView.py b/backend/kernelCI_app/views/issuesView.py index 84947a38..d91de984 100644 --- a/backend/kernelCI_app/views/issuesView.py +++ b/backend/kernelCI_app/views/issuesView.py @@ -5,12 +5,11 @@ from kernelCI_app.helpers.errorHandling import create_error_response from kernelCI_app.utils import ( - Issue, convert_issues_dict_to_list, create_issue, ) from http import HTTPStatus -from kernelCI_app.typeModels.issueDetails import IssueDict +from kernelCI_app.typeModels.issues import Issue, IssueDict class IssueView(View): diff --git a/backend/kernelCI_app/views/treeDetailsBootsView.py b/backend/kernelCI_app/views/treeDetailsBootsView.py index e657ca4e..b153e0d9 100644 --- a/backend/kernelCI_app/views/treeDetailsBootsView.py +++ b/backend/kernelCI_app/views/treeDetailsBootsView.py @@ -2,6 +2,7 @@ from http import HTTPStatus from drf_spectacular.utils import extend_schema +from kernelCI_app.typeModels.issues import Issue from pydantic import ValidationError from kernelCI_app.helpers.errorHandling import create_error_response from kernelCI_app.helpers.filters import ( @@ -23,9 +24,6 @@ from kernelCI_app.typeModels.commonDetails import ( TestHistoryItem ) -from kernelCI_app.utils import ( - Issue, -) type IssueDict = Dict[Tuple[str, str], Issue] diff --git a/backend/kernelCI_app/views/treeDetailsTestsView.py b/backend/kernelCI_app/views/treeDetailsTestsView.py index 6fb54854..0928f89c 100644 --- a/backend/kernelCI_app/views/treeDetailsTestsView.py +++ b/backend/kernelCI_app/views/treeDetailsTestsView.py @@ -1,5 +1,6 @@ from typing import Dict, Tuple from drf_spectacular.utils import extend_schema +from kernelCI_app.typeModels.issues import Issue from pydantic import ValidationError from rest_framework.response import Response from rest_framework.views import APIView @@ -22,9 +23,6 @@ from kernelCI_app.typeModels.commonDetails import ( TestHistoryItem ) -from kernelCI_app.utils import ( - Issue, -) type IssueDict = Dict[Tuple[str, str], Issue] diff --git a/backend/kernelCI_app/views/treeDetailsView.py b/backend/kernelCI_app/views/treeDetailsView.py index 0786a776..3e519390 100644 --- a/backend/kernelCI_app/views/treeDetailsView.py +++ b/backend/kernelCI_app/views/treeDetailsView.py @@ -25,7 +25,6 @@ process_filters, ) from kernelCI_app.utils import ( - Issue, convert_issues_dict_to_list, ) @@ -33,7 +32,7 @@ from kernelCI_app.viewCommon import create_details_build_summary -from kernelCI_app.typeModels.issueDetails import IssueDict +from kernelCI_app.typeModels.issues import Issue, IssueDict class TreeDetails(View):