From 1dce13d61bc92afa5d9cca9b2a7b0c20007fcf01 Mon Sep 17 00:00:00 2001 From: Christian Studer Date: Wed, 30 Oct 2024 15:10:53 +0100 Subject: [PATCH] fix: [AnalystData] Avoiding issues with analyst data objects --- pymisp/mispevent.py | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/pymisp/mispevent.py b/pymisp/mispevent.py index 362fd1e0..20ad33b1 100644 --- a/pymisp/mispevent.py +++ b/pymisp/mispevent.py @@ -60,28 +60,35 @@ def relationships(self) -> list[MISPRelationship]: def add_note(self, note: str, language: str | None = None, **kwargs) -> MISPNote: # type: ignore[no-untyped-def] the_note = MISPNote() - the_note.from_dict(note=note, language=language, - object_uuid=self.uuid, object_type=self.analyst_data_object_type, - **kwargs) + the_note.from_dict( + note=note, language=language, object_uuid=self.uuid, + object_type=self.analyst_data_object_type, contained=True, + **kwargs + ) self.notes.append(the_note) self.edited = True return the_note def add_opinion(self, opinion: int, comment: str | None = None, **kwargs) -> MISPOpinion: # type: ignore[no-untyped-def] the_opinion = MISPOpinion() - the_opinion.from_dict(opinion=opinion, comment=comment, - object_uuid=self.uuid, object_type=self.analyst_data_object_type, - **kwargs) + the_opinion.from_dict( + opinion=opinion, comment=comment, object_uuid=self.uuid, + object_type=self.analyst_data_object_type, contained=True, + **kwargs + ) self.opinions.append(the_opinion) self.edited = True return the_opinion def add_relationship(self, related_object_type: AbstractMISP | str, related_object_uuid: str | None, relationship_type: str, **kwargs) -> MISPRelationship: # type: ignore[no-untyped-def] the_relationship = MISPRelationship() - the_relationship.from_dict(related_object_type=related_object_type, related_object_uuid=related_object_uuid, - relationship_type=relationship_type, - object_uuid=self.uuid, object_type=self.analyst_data_object_type, - **kwargs) + the_relationship.from_dict( + related_object_type=related_object_type, + related_object_uuid=related_object_uuid, + relationship_type=relationship_type, object_uuid=self.uuid, + object_type=self.analyst_data_object_type, contained=True, + **kwargs + ) self.relationships.append(the_relationship) self.edited = True return the_relationship @@ -2591,8 +2598,8 @@ def __init__(self, **kwargs: dict[str, Any]) -> None: self.language: str super().__init__(**kwargs) - def from_dict(self, **kwargs) -> None: # type: ignore[no-untyped-def] - if 'Note' in kwargs: + def from_dict(self, contained=False, **kwargs) -> None: # type: ignore[no-untyped-def] + if not conainted and 'Note' in kwargs: kwargs = kwargs['Note'] self.note = kwargs.pop('note', None) if self.note is None: @@ -2616,8 +2623,8 @@ def __init__(self, **kwargs: dict[str, Any]) -> None: self.comment: str super().__init__(**kwargs) - def from_dict(self, **kwargs) -> None: # type: ignore[no-untyped-def] - if 'Opinion' in kwargs: + def from_dict(self, contained=False, **kwargs) -> None: # type: ignore[no-untyped-def] + if not contained and 'Opinion' in kwargs: kwargs = kwargs['Opinion'] self.opinion = kwargs.pop('opinion', None) if self.opinion is not None: @@ -2651,8 +2658,8 @@ def __init__(self, **kwargs: dict[str, Any]) -> None: self.relationship_type: str super().__init__(**kwargs) - def from_dict(self, **kwargs) -> None: # type: ignore[no-untyped-def] - if 'Relationship' in kwargs: + def from_dict(self, contained=False, **kwargs) -> None: # type: ignore[no-untyped-def] + if not contained and 'Relationship' in kwargs: kwargs = kwargs['Relationship'] self.related_object_type = kwargs.pop('related_object_type', None) if self.related_object_type is None: