Skip to content

Commit fde7a5c

Browse files
Maffoochclaude
andcommitted
remove: questionnaire API endpoints (announced 2.56, EOL in 2.59)
Removes the five deprecated questionnaire REST endpoints and their backing viewsets/serializers. The questionnaire UI feature itself (under dojo/survey/) and all underlying models stay untouched — this PR only removes the API surface that was announced for removal in DefectDojo 2.56.0 and is now end-of-life per the 2.59 release notes. Endpoints removed: - /api/v2/questionnaire_answered_questionnaires/ - /api/v2/questionnaire_answers/ - /api/v2/questionnaire_engagement_questionnaires/ - /api/v2/questionnaire_general_questionnaires/ - /api/v2/questionnaire_questions/ Drops the corresponding ViewSets, serializers, and the QuestionSubClassFieldsMixin / AnswerSubClassFieldsMixin helpers that existed solely to support these viewsets. Removes the matching endpoint registrations in dojo/urls.py and prunes the corresponding test classes from unittests/test_rest_framework.py and the expected-endpoint list in unittests/test_apiv2_methods_and_endpoints.py. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 5deca76 commit fde7a5c

6 files changed

Lines changed: 1 addition & 443 deletions

File tree

dojo/api_v2/mixins.py

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from rest_framework.decorators import action
99

1010
from dojo.api_v2 import serializers
11-
from dojo.models import Answer, Question
1211

1312

1413
class DeletePreviewModelMixin:
@@ -46,13 +45,3 @@ def flatten(elem):
4645

4746
serializer = serializers.DeletePreviewSerializer(page, many=True)
4847
return self.get_paginated_response(serializer.data)
49-
50-
51-
class QuestionSubClassFieldsMixin:
52-
def get_queryset(self):
53-
return Question.objects.select_subclasses()
54-
55-
56-
class AnswerSubClassFieldsMixin:
57-
def get_queryset(self):
58-
return Answer.objects.select_subclasses()

dojo/api_v2/serializers.py

Lines changed: 0 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,9 @@
4848
SEVERITY_CHOICES,
4949
STATS_FIELDS,
5050
Announcement,
51-
Answer,
52-
Answered_Survey,
5351
App_Analysis,
5452
BurpRawRequestResponse,
5553
Check_List,
56-
ChoiceAnswer,
57-
ChoiceQuestion,
5854
Cred_Mapping,
5955
Cred_User,
6056
Development_Environment,
@@ -67,12 +63,10 @@
6763
Endpoint_Status,
6864
Engagement,
6965
Engagement_Presets,
70-
Engagement_Survey,
7166
FileUpload,
7267
Finding,
7368
Finding_Group,
7469
Finding_Template,
75-
General_Survey,
7670
Global_Role,
7771
Language_Type,
7872
Languages,
@@ -87,7 +81,6 @@
8781
Product_Type,
8882
Product_Type_Group,
8983
Product_Type_Member,
90-
Question,
9184
Regulation,
9285
Risk_Acceptance,
9386
Role,
@@ -100,8 +93,6 @@
10093
Test_Import,
10194
Test_Import_Finding_Action,
10295
Test_Type,
103-
TextAnswer,
104-
TextQuestion,
10596
Tool_Configuration,
10697
Tool_Product_Settings,
10798
Tool_Type,
@@ -3120,111 +3111,6 @@ class Meta:
31203111
exclude = ("content_type",)
31213112

31223113

3123-
class QuestionnaireQuestionSerializer(serializers.ModelSerializer):
3124-
def to_representation(self, instance):
3125-
if isinstance(instance, TextQuestion):
3126-
return TextQuestionSerializer(instance=instance).data
3127-
if isinstance(instance, ChoiceQuestion):
3128-
return ChoiceQuestionSerializer(instance=instance).data
3129-
return QuestionSerializer(instance=instance).data
3130-
3131-
class Meta:
3132-
model = Question
3133-
exclude = ("polymorphic_ctype",)
3134-
3135-
3136-
class QuestionSerializer(serializers.ModelSerializer):
3137-
class Meta:
3138-
model = Question
3139-
exclude = ("polymorphic_ctype",)
3140-
3141-
3142-
class TextQuestionSerializer(serializers.ModelSerializer):
3143-
class Meta:
3144-
model = TextQuestion
3145-
exclude = ("polymorphic_ctype",)
3146-
3147-
3148-
class ChoiceQuestionSerializer(serializers.ModelSerializer):
3149-
choices = serializers.StringRelatedField(many=True)
3150-
3151-
class Meta:
3152-
model = ChoiceQuestion
3153-
exclude = ("polymorphic_ctype",)
3154-
3155-
3156-
class QuestionnaireAnsweredSurveySerializer(serializers.ModelSerializer):
3157-
class Meta:
3158-
model = Answered_Survey
3159-
fields = "__all__"
3160-
3161-
3162-
class QuestionnaireAnswerSerializer(serializers.ModelSerializer):
3163-
def to_representation(self, instance):
3164-
if isinstance(instance, TextAnswer):
3165-
return TextAnswerSerializer(instance=instance).data
3166-
if isinstance(instance, ChoiceAnswer):
3167-
return ChoiceAnswerSerializer(instance=instance).data
3168-
return AnswerSerializer(instance=instance).data
3169-
3170-
class Meta:
3171-
model = Answer
3172-
exclude = ("polymorphic_ctype",)
3173-
3174-
3175-
class AnswerSerializer(serializers.ModelSerializer):
3176-
question = serializers.StringRelatedField()
3177-
answered_survey = QuestionnaireAnsweredSurveySerializer()
3178-
3179-
class Meta:
3180-
model = Answer
3181-
exclude = ("polymorphic_ctype",)
3182-
3183-
3184-
class TextAnswerSerializer(serializers.ModelSerializer):
3185-
question = serializers.StringRelatedField()
3186-
answered_survey = QuestionnaireAnsweredSurveySerializer()
3187-
3188-
class Meta:
3189-
model = TextAnswer
3190-
exclude = ("polymorphic_ctype",)
3191-
3192-
3193-
class ChoiceAnswerSerializer(serializers.ModelSerializer):
3194-
answer = serializers.StringRelatedField(many=True)
3195-
question = serializers.StringRelatedField()
3196-
answered_survey = QuestionnaireAnsweredSurveySerializer()
3197-
3198-
class Meta:
3199-
model = ChoiceAnswer
3200-
exclude = ("polymorphic_ctype",)
3201-
3202-
3203-
class QuestionnaireEngagementSurveySerializer(serializers.ModelSerializer):
3204-
questions = serializers.SerializerMethodField()
3205-
3206-
@extend_schema_field(serializers.ListField(child=serializers.CharField()))
3207-
def get_questions(self, obj):
3208-
questions = obj.questions.all()
3209-
formated_questions = []
3210-
for question in questions:
3211-
formated_question = f"Order #{question.order} - {question.text}{' (Optional)' if question.optional else ''}"
3212-
formated_questions.append(formated_question)
3213-
return formated_questions
3214-
3215-
class Meta:
3216-
model = Engagement_Survey
3217-
fields = "__all__"
3218-
3219-
3220-
class QuestionnaireGeneralSurveySerializer(serializers.ModelSerializer):
3221-
survey = QuestionnaireEngagementSurveySerializer()
3222-
3223-
class Meta:
3224-
model = General_Survey
3225-
fields = "__all__"
3226-
3227-
32283114
class AnnouncementSerializer(serializers.ModelSerializer):
32293115

32303116
class Meta:

0 commit comments

Comments
 (0)