Skip to content

Commit 8a61da3

Browse files
authored
chore: remove swagger warnings (SecObserve#4207)
1 parent 7d978fa commit 8a61da3

6 files changed

Lines changed: 83 additions & 0 deletions

File tree

backend/application/core/api/views_others.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class PURLTypeOneView(APIView):
3434
methods=["GET"],
3535
request=None,
3636
responses={HTTP_200_OK: PURLTypeSerializer},
37+
operation_id="purl_types_retrieve",
3738
)
3839
@action(detail=True, methods=["get"])
3940
def get(self, request: Request, purl_type_id: str) -> Response:
@@ -53,6 +54,7 @@ class PURLTypeManyView(APIView):
5354
methods=["GET"],
5455
request=None,
5556
responses={HTTP_200_OK: PURLTypeSerializer},
57+
operation_id="purl_types_list",
5658
)
5759
@action(detail=False, methods=["get"])
5860
def get(self, request: Request) -> Response:

backend/application/core/api/views_product.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,9 @@ def create(self, request: Request) -> Response:
516516
return response
517517

518518
@extend_schema(
519+
parameters=[
520+
OpenApiParameter(name="id", location=OpenApiParameter.PATH, required=True, type=int),
521+
],
519522
responses={HTTP_204_NO_CONTENT: None},
520523
)
521524
def destroy(self, request: Request, pk: int) -> Response:

backend/application/import_observations/api/views.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,7 @@ class ScanOSVProductView(APIView):
403403
@extend_schema(
404404
request=None,
405405
responses={status.HTTP_200_OK: APIImportObservationsResponseSerializer},
406+
operation_id="products_scan_osv_create",
406407
)
407408
@action(detail=True, methods=["post"])
408409
def post(self, request: Request, product_id: int) -> Response:
@@ -428,6 +429,7 @@ class ScanOSVBranchView(APIView):
428429
@extend_schema(
429430
request=None,
430431
responses={status.HTTP_200_OK: APIImportObservationsResponseSerializer},
432+
operation_id="products_branch_scan_osv_create",
431433
)
432434
@action(detail=True, methods=["post"])
433435
def post(self, request: Request, product_id: int, branch_id: int) -> Response:
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from rest_framework.serializers import DateTimeField, IntegerField, Serializer
2+
3+
4+
class ProductMetricsSerializer(Serializer):
5+
active_critical = IntegerField()
6+
active_high = IntegerField()
7+
active_medium = IntegerField()
8+
active_low = IntegerField()
9+
active_none = IntegerField()
10+
active_unknown = IntegerField()
11+
open = IntegerField()
12+
affected = IntegerField()
13+
resolved = IntegerField()
14+
duplicate = IntegerField()
15+
false_positive = IntegerField()
16+
in_review = IntegerField()
17+
not_affected = IntegerField()
18+
not_security = IntegerField()
19+
risk_accepted = IntegerField()
20+
21+
22+
class ProductMetricsStatusSerializer(Serializer):
23+
last_calculated = DateTimeField()
24+
calculation_interval = IntegerField()

backend/application/metrics/api/views.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33
from typing import Optional
44

55
from django.http import HttpResponse
6+
from drf_spectacular.types import OpenApiTypes
7+
from drf_spectacular.utils import extend_schema
68
from rest_framework.decorators import action
79
from rest_framework.exceptions import ValidationError
810
from rest_framework.request import Request
911
from rest_framework.response import Response
12+
from rest_framework.status import HTTP_200_OK
1013
from rest_framework.views import APIView
1114

1215
from application.authorization.services.authorization import user_has_permission_or_403
@@ -15,6 +18,10 @@
1518
from application.core.models import Product
1619
from application.core.queries.product import get_product_by_id
1720
from application.core.types import Severity
21+
from application.metrics.api.serializers import (
22+
ProductMetricsSerializer,
23+
ProductMetricsStatusSerializer,
24+
)
1825
from application.metrics.models import Product_Metrics_Status
1926
from application.metrics.services.export_metrics import (
2027
export_product_metrics_csv,
@@ -28,6 +35,11 @@
2835

2936

3037
class ProductMetricsTimelineView(APIView):
38+
@extend_schema(
39+
methods=["GET"],
40+
request=None,
41+
responses={HTTP_200_OK: dict},
42+
)
3143
@action(detail=False, methods=["get"])
3244
def get(self, request: Request) -> Response:
3345
product = _get_and_check_product(request)
@@ -36,13 +48,25 @@ def get(self, request: Request) -> Response:
3648

3749

3850
class ProductMetricsCurrentView(APIView):
51+
@extend_schema(
52+
methods=["GET"],
53+
request=None,
54+
responses={HTTP_200_OK: ProductMetricsSerializer},
55+
)
3956
@action(detail=False, methods=["get"])
4057
def get(self, request: Request) -> Response:
4158
product = _get_and_check_product(request)
4259
return Response(get_product_metrics_current(product))
4360

4461

4562
class ProductMetricsExportExcelView(APIView):
63+
@extend_schema(
64+
methods=["GET"],
65+
request=None,
66+
responses={
67+
(HTTP_200_OK, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"): OpenApiTypes.BINARY
68+
},
69+
)
4670
@action(detail=False, methods=["get"])
4771
def get(self, request: Request) -> HttpResponse:
4872
product = _get_and_check_product(request)
@@ -65,6 +89,11 @@ def get(self, request: Request) -> HttpResponse:
6589

6690

6791
class ProductMetricsExportCsvView(APIView):
92+
@extend_schema(
93+
methods=["GET"],
94+
request=None,
95+
responses={(HTTP_200_OK, "text/csv"): OpenApiTypes.BINARY},
96+
)
6897
@action(detail=False, methods=["get"])
6998
def get(self, request: Request) -> HttpResponse:
7099
product = _get_and_check_product(request)
@@ -78,6 +107,11 @@ def get(self, request: Request) -> HttpResponse:
78107

79108

80109
class ProductMetricsExportCodeChartaView(APIView):
110+
@extend_schema(
111+
methods=["GET"],
112+
request=None,
113+
responses={(HTTP_200_OK, "text/csv"): OpenApiTypes.BINARY},
114+
)
81115
@action(detail=False, methods=["get"])
82116
def get(self, request: Request) -> HttpResponse:
83117
product = _get_and_check_product(request)
@@ -111,6 +145,11 @@ def get(self, request: Request) -> HttpResponse:
111145

112146

113147
class ProductMetricsStatusView(APIView):
148+
@extend_schema(
149+
methods=["GET"],
150+
request=None,
151+
responses={HTTP_200_OK: ProductMetricsStatusSerializer},
152+
)
114153
@action(detail=False, methods=["get"])
115154
def get(self, request: Request) -> Response:
116155
settings = Settings.load()

backend/config/settings/base.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,19 @@ def whitenoise_security_headers(headers: dict, path: str, url: str) -> None:
414414
"REDOC_DIST": "SIDECAR",
415415
"SWAGGER_UI_SETTINGS": {"docExpansion": "none"},
416416
"ENUM_GENERATE_CHOICE_DESCRIPTION": False,
417+
"ENUM_NAME_OVERRIDES": {
418+
"ApprovalStatusEnum": "application.core.types.Assessment_Status.ASSESSMENT_STATUS_CHOICES_APPROVAL",
419+
"AssessmentStatusEnum": "application.core.types.Assessment_Status.ASSESSMENT_STATUS_CHOICES",
420+
"NotificationTypeEnum": "application.notifications.models.Notification.TYPE_CHOICES",
421+
"ParserTypeEnum": "application.import_observations.types.Parser_Type.TYPE_CHOICES",
422+
"PotentialDuplicateTypeEnum": "application.core.models.Potential_Duplicate.POTENTIAL_DUPLICATE_TYPES",
423+
"RuleStatusEnum": "application.rules.types.Rule_Status.RULE_STATUS_CHOICES",
424+
"RuleTypeEnum": "application.rules.types.Rule_Type.RULE_TYPE_CHOICES",
425+
"SeverityEnum": "application.core.types.Severity.SEVERITY_CHOICES",
426+
"Status82cEnum": "application.core.types.Status.STATUS_CHOICES",
427+
"VexDocumentTypeEnum": "application.vex.types.VEX_Document_Type.VEX_DOCUMENT_TYPE_CHOICES",
428+
"VexJustificationEnum": "application.core.types.VEX_Justification.VEX_JUSTIFICATION_CHOICES",
429+
},
417430
}
418431

419432
FIELD_ENCRYPTION_KEY = env("FIELD_ENCRYPTION_KEY")

0 commit comments

Comments
 (0)