Skip to content

Commit 4eba7e8

Browse files
authored
fix: translate threat in elementary action (#2849)
* fix: Elementary action threat translation * Fix ListView translation
1 parent fc7c638 commit 4eba7e8

File tree

4 files changed

+23
-6
lines changed

4 files changed

+23
-6
lines changed

backend/core/serializer_fields.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from hashlib import sha256
2-
from typing import Any
2+
from typing import Any, Optional, Type
33

44
from django.db import models
55
from rest_framework import serializers
@@ -34,17 +34,29 @@ class FieldsRelatedField(serializers.RelatedField):
3434

3535
fields = []
3636

37-
def __init__(self, fields: list[str | dict[str, list[str]]] = ["id"], **kwargs):
37+
def __init__(
38+
self,
39+
fields: list[str | dict[str, list[str]]] = ["id"],
40+
serializer: Optional[Type[serializers.ModelSerializer]] = None,
41+
**kwargs,
42+
):
3843
kwargs["read_only"] = True
3944
self.fields = fields
45+
self.serializer = serializer
4046
super().__init__(**kwargs)
4147

4248
def to_representation(
4349
self, value, fields: list[str | dict[str, list[str]]] | None = None
4450
) -> dict[str, Any]:
45-
res = {"str": str(value)}
46-
4751
fields = fields or self.fields
52+
if self.serializer is not None:
53+
data: dict = self.serializer(value).data
54+
if fields is not None:
55+
data = {field: data.get(field) for field in fields}
56+
57+
return data
58+
59+
res = {"str": str(value)}
4860

4961
field_data: dict[str, Any] = {
5062
field_name: self._process_field(value, field_name, sub_fields)

backend/ebios_rm/serializers.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,11 +428,14 @@ class Meta:
428428
exclude = ["created_at", "updated_at"]
429429

430430

431+
from core.serializers import ThreatReadSerializer
432+
433+
431434
class ElementaryActionReadSerializer(BaseModelSerializer):
432435
icon = serializers.CharField(source="get_icon_display")
433436
icon_fa_class = serializers.CharField()
434437
icon_fa_hex = serializers.CharField()
435-
threat = FieldsRelatedField()
438+
threat = FieldsRelatedField(["id", "name"], serializer=ThreatReadSerializer)
436439
folder = FieldsRelatedField()
437440
attack_stage = serializers.CharField(source="get_attack_stage_display")
438441

frontend/src/lib/components/DetailView/DetailView.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@
531531
>
532532
{:else}
533533
<Anchor breadcrumbAction="push" href={itemHref} class="anchor"
534-
>{value.str}</Anchor
534+
>{value.str || value.name}</Anchor
535535
>
536536
{/if}
537537
<!-- Shortcut before DetailView refactoring -->

frontend/src/lib/components/ModelTable/ModelTable.svelte

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,8 @@
604604
{:else}
605605
{value.str ?? '-'}
606606
{/if}
607+
{:else if value && value.name}
608+
{value.name}
607609
{:else if value && value.hexcolor}
608610
<p
609611
class="flex w-fit min-w-24 justify-center px-2 py-1 rounded-md ml-2 whitespace-nowrap {classesHexBackgroundText(

0 commit comments

Comments
 (0)