Skip to content

Commit d07da16

Browse files
tagulous: fix serializers DRF
1 parent bad3ab6 commit d07da16

File tree

2 files changed

+123
-90
lines changed

2 files changed

+123
-90
lines changed

dojo/api_v2/serializers.py

Lines changed: 60 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ def __getitem__(self, item):
4848
return result
4949

5050
def __str__(self):
51+
print('TagList str: ' + str(self))
5152
if self.pretty_print:
5253
return json.dumps(
5354
self, sort_keys=True, indent=4, separators=(',', ': '))
@@ -78,6 +79,7 @@ def __init__(self, **kwargs):
7879
self.pretty_print = pretty_print
7980

8081
def to_internal_value(self, data):
82+
print('to_internal_value: ' + str(data))
8183
if isinstance(data, six.string_types):
8284
if not data:
8385
data = []
@@ -95,18 +97,23 @@ def to_internal_value(self, data):
9597

9698
self.child.run_validation(s)
9799

98-
return data
100+
return ','.join(data)
101+
# return data
99102

100103
def to_representation(self, value):
104+
print('to_representation: ' + str(value))
101105
if not isinstance(value, TagList):
106+
print('to_representation2: ' + str(value))
102107
if not isinstance(value, list):
108+
print('to_representation3: ' + str(value))
103109
# this will trigger when a queryset is found...
104110
if self.order_by:
105111
tags = value.all().order_by(*self.order_by)
106112
else:
107113
tags = value.all()
108114
value = [tag.name for tag in tags]
109115
elif len(value) > 0 and isinstance(value[0], Tag):
116+
print('to_representation4: ' + str(value))
110117
# .. but sometimes the queryset already has been converted into a list, i.e. by prefetch_related
111118
tags = value
112119
value = [tag.name for tag in tags]
@@ -119,6 +126,7 @@ def to_representation(self, value):
119126

120127
class TaggitSerializer(serializers.Serializer):
121128
def create(self, validated_data):
129+
print('create!')
122130
to_be_tagged, validated_data = self._pop_tags(validated_data)
123131

124132
tag_object = super(TaggitSerializer, self).create(validated_data)
@@ -134,13 +142,21 @@ def update(self, instance, validated_data):
134142
return self._save_tags(tag_object, to_be_tagged)
135143

136144
def _save_tags(self, tag_object, tags):
145+
print('save tags: ' + str(tags))
146+
print('tag_object: ' + str(tag_object))
147+
print('tag_object.pk: ' + str(tag_object.pk))
137148
for key in list(tags.keys()):
149+
print('save: ' + str(key))
138150
tag_values = tags.get(key)
139-
tag_object.tags = ", ".join(tag_values)
151+
# tag_object.tags = ", ".join(tag_values)
152+
tag_object.tags = tag_values
153+
print('tag_object.tags: ' + str(tag_object.tags))
154+
tag_object.save()
140155

141156
return tag_object
142157

143158
def _pop_tags(self, validated_data):
159+
print('pop tags: ' + str(validated_data))
144160
to_be_tagged = {}
145161

146162
for key in list(self.fields.keys()):
@@ -323,11 +339,15 @@ class Meta:
323339
fields = '__all__'
324340

325341

342+
# class ProductSerializer(serializers.ModelSerializer):
326343
class ProductSerializer(TaggitSerializer, serializers.ModelSerializer):
327344
findings_count = serializers.SerializerMethodField()
328345
findings_list = serializers.SerializerMethodField()
329346

330347
tags = TagListSerializerField(required=False)
348+
# import tagulous.serializers.json.Serializer as tagulous_json_serializer
349+
# import tagulous.serializers.json
350+
# tags = tagulous.serializers.json.Serializer()
331351
product_meta = ProductMetaSerializer(read_only=True, many=True)
332352

333353
class Meta:
@@ -354,8 +374,9 @@ class Meta:
354374
}
355375

356376

357-
class EngagementSerializer(TaggitSerializer, serializers.ModelSerializer):
358-
tags = TagListSerializerField(required=False)
377+
# class EngagementSerializer(TaggitSerializer, serializers.ModelSerializer):
378+
class EngagementSerializer(serializers.ModelSerializer):
379+
# tags = TagListSerializerField(required=False)
359380

360381
class Meta:
361382
model = Engagement
@@ -441,8 +462,9 @@ def create(self, validated_data):
441462
return status
442463

443464

444-
class EndpointSerializer(TaggitSerializer, serializers.ModelSerializer):
445-
tags = TagListSerializerField(required=False)
465+
# class EndpointSerializer(TaggitSerializer, serializers.ModelSerializer):
466+
class EndpointSerializer(serializers.ModelSerializer):
467+
# tags = TagListSerializerField(required=False)
446468

447469
class Meta:
448470
model = Endpoint
@@ -575,8 +597,9 @@ class Meta:
575597
fields = '__all__'
576598

577599

578-
class TestSerializer(TaggitSerializer, serializers.ModelSerializer):
579-
tags = TagListSerializerField(required=False)
600+
# class TestSerializer(TaggitSerializer, serializers.ModelSerializer):
601+
class TestSerializer(serializers.ModelSerializer):
602+
# tags = TagListSerializerField(required=False)
580603
test_type_name = serializers.ReadOnlyField()
581604

582605
class Meta:
@@ -589,23 +612,25 @@ def build_relational_field(self, field_name, relation_info):
589612
return super().build_relational_field(field_name, relation_info)
590613

591614

592-
class TestCreateSerializer(TaggitSerializer, serializers.ModelSerializer):
615+
# class TestCreateSerializer(TaggitSerializer, serializers.ModelSerializer):
616+
class TestCreateSerializer(serializers.ModelSerializer):
593617
engagement = serializers.PrimaryKeyRelatedField(
594618
queryset=Engagement.objects.all())
595619
notes = serializers.PrimaryKeyRelatedField(
596620
allow_null=True,
597621
default=[],
598622
queryset=Notes.objects.all(),
599623
many=True)
600-
tags = TagListSerializerField(required=False)
624+
# tags = TagListSerializerField(required=False)
601625

602626
class Meta:
603627
model = Test
604628
fields = '__all__'
605629

606630

607-
class TestTypeSerializer(TaggitSerializer, serializers.ModelSerializer):
608-
tags = TagListSerializerField(required=False)
631+
# class TestTypeSerializer(TaggitSerializer, serializers.ModelSerializer):
632+
class TestTypeSerializer(serializers.ModelSerializer):
633+
# tags = TagListSerializerField(required=False)
609634

610635
class Meta:
611636
model = Test_Type
@@ -684,9 +709,10 @@ class Meta:
684709
fields = ["id", "title", "test_type", "engagement", "environment"]
685710

686711

687-
class FindingSerializer(TaggitSerializer, serializers.ModelSerializer):
712+
# class FindingSerializer(TaggitSerializer, serializers.ModelSerializer):
713+
class FindingSerializer(serializers.ModelSerializer):
688714
images = FindingImageSerializer(many=True, read_only=True)
689-
tags = TagListSerializerField(required=False)
715+
# tags = TagListSerializerField(required=False)
690716
request_response = serializers.SerializerMethodField()
691717
accepted_risks = RiskAcceptanceSerializer(many=True, read_only=True, source='risk_acceptance_set')
692718
push_to_jira = serializers.BooleanField(default=False)
@@ -726,7 +752,7 @@ def get_display_status(self, obj):
726752
# Overriding this to push add Push to JIRA functionality
727753
def update(self, instance, validated_data):
728754
# remove tags from validated data and store them seperately
729-
to_be_tagged, validated_data = self._pop_tags(validated_data)
755+
# to_be_tagged, validated_data = self._pop_tags(validated_data)
730756

731757
# pop push_to_jira so it won't get send to the model as a field
732758
# TODO: JIRA can we remove this is_push_all_issues, already checked in apiv2 viewset?
@@ -754,8 +780,9 @@ def update(self, instance, validated_data):
754780
instance.save(push_to_jira=push_to_jira)
755781

756782
# not sure why we are returning a tag_object, but don't want to change too much now as we're just fixing a bug
757-
tag_object = self._save_tags(instance, to_be_tagged)
758-
return tag_object
783+
# tag_object = self._save_tags(instance, to_be_tagged)
784+
# return tag_object
785+
return instance
759786

760787
def validate(self, data):
761788
if self.context['request'].method == 'PATCH':
@@ -792,7 +819,8 @@ def get_request_response(self, obj):
792819
return serialized_burps.data
793820

794821

795-
class FindingCreateSerializer(TaggitSerializer, serializers.ModelSerializer):
822+
# class FindingCreateSerializer(TaggitSerializer, serializers.ModelSerializer):
823+
class FindingCreateSerializer(serializers.ModelSerializer):
796824
notes = serializers.PrimaryKeyRelatedField(
797825
read_only=True,
798826
allow_null=True,
@@ -807,7 +835,7 @@ class FindingCreateSerializer(TaggitSerializer, serializers.ModelSerializer):
807835
url = serializers.CharField(
808836
allow_null=True,
809837
default=None)
810-
tags = TagListSerializerField(required=False)
838+
# tags = TagListSerializerField(required=False)
811839
push_to_jira = serializers.BooleanField(default=False)
812840

813841
class Meta:
@@ -820,7 +848,7 @@ class Meta:
820848
# Overriding this to push add Push to JIRA functionality
821849
def create(self, validated_data):
822850
# remove tags from validated data and store them seperately
823-
to_be_tagged, validated_data = self._pop_tags(validated_data)
851+
# to_be_tagged, validated_data = self._pop_tags(validated_data)
824852

825853
# pop push_to_jira so it won't get send to the model as a field
826854
push_to_jira = validated_data.pop('push_to_jira')
@@ -844,8 +872,9 @@ def create(self, validated_data):
844872
new_finding.save(push_to_jira=push_to_jira)
845873

846874
# not sure why we are returning a tag_object, but don't want to change too much now as we're just fixing a bug
847-
tag_object = self._save_tags(new_finding, to_be_tagged)
848-
return tag_object
875+
# tag_object = self._save_tags(new_finding, to_be_tagged)
876+
# return tag_object
877+
return instance
849878

850879
def validate(self, data):
851880
if ((data['active'] or data['verified']) and data['duplicate']):
@@ -923,7 +952,8 @@ class Meta:
923952
fields = '__all__'
924953

925954

926-
class ImportScanSerializer(TaggitSerializer, serializers.Serializer):
955+
# class ImportScanSerializer(TaggitSerializer, serializers.Serializer):
956+
class ImportScanSerializer(serializers.Serializer):
927957
scan_date = serializers.DateField(default=datetime.date.today)
928958

929959
minimum_severity = serializers.ChoiceField(
@@ -944,7 +974,7 @@ class ImportScanSerializer(TaggitSerializer, serializers.Serializer):
944974
allow_null=True,
945975
default=None,
946976
queryset=User.objects.all())
947-
tags = TagListSerializerField(required=False)
977+
# tags = TagListSerializerField(required=False)
948978
close_old_findings = serializers.BooleanField(required=False, default=False)
949979
push_to_jira = serializers.BooleanField(default=False)
950980

@@ -992,8 +1022,8 @@ def save(self, push_to_jira=False):
9921022

9931023
test.engagement.save()
9941024

995-
if 'tags' in data:
996-
test.tags = ' '.join(data['tags'])
1025+
# if 'tags' in data:
1026+
# test.tags = ' '.join(data['tags'])
9971027
try:
9981028
parser = import_parser_factory(data.get('file', None),
9991029
test,
@@ -1150,7 +1180,8 @@ def validate_scan_data(self, value):
11501180
return value
11511181

11521182

1153-
class ReImportScanSerializer(TaggitSerializer, serializers.Serializer):
1183+
# class ReImportScanSerializer(TaggitSerializer, serializers.Serializer):
1184+
class ReImportScanSerializer(serializers.Serializer):
11541185
scan_date = serializers.DateField()
11551186
minimum_severity = serializers.ChoiceField(
11561187
choices=SEVERITY_CHOICES,
@@ -1462,8 +1493,8 @@ class ReportGenerateSerializer(serializers.Serializer):
14621493
finding_notes = FindingToNotesSerializer(many=True, allow_null=True, required=False)
14631494

14641495

1465-
class TagSerializer(serializers.Serializer):
1466-
tags = TagListSerializerField(required=True)
1496+
# class TagSerializer(serializers.Serializer):
1497+
# tags = TagListSerializerField(required=True)
14671498

14681499

14691500
class SystemSettingsSerializer(serializers.Serializer):

0 commit comments

Comments
 (0)