Skip to content

Commit 595f28f

Browse files
ilaifMidnighter
andcommitted
feat: add hydrate method to the relationship model
Co-authored-by: Midnighter <[email protected]>
1 parent ba805f0 commit 595f28f

File tree

1 file changed

+39
-3
lines changed

1 file changed

+39
-3
lines changed

src/structurizr/model/relationship.py

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
from .interaction_style import InteractionStyle
2424
from .model_item import ModelItem, ModelItemIO
25+
from .tags import Tags
2526

2627

2728
if TYPE_CHECKING:
@@ -88,10 +89,45 @@ def __init__(
8889
"""Initialize a relationship between two elements."""
8990
super().__init__(**kwargs)
9091
self.source = source
91-
self.source_id = source_id
92+
self._source_id = source_id
9293
self.destination = destination
93-
self.destination_id = destination_id
94+
self._destination_id = destination_id
9495
self.description = description
9596
self.technology = technology
96-
self.interaction_style = interaction_style
9797
self.linked_relationship_id = linked_relationship_id
98+
99+
self.tags.add(Tags.RELATIONSHIP)
100+
self.tags.add(
101+
Tags.SYNCHRONOUS
102+
if interaction_style == InteractionStyle.Synchronous
103+
else Tags.ASYNCHRONOUS
104+
)
105+
106+
@property
107+
def source_id(self) -> str:
108+
if self.source is not None:
109+
return self.source.id
110+
111+
return self._source_id
112+
113+
@property
114+
def destination_id(self) -> str:
115+
if self.destination is not None:
116+
return self.destination.id
117+
118+
return self._destination_id
119+
120+
@classmethod
121+
def hydrate(cls, relationship_io: RelationshipIO) -> "Relationship":
122+
""""""
123+
return cls(
124+
id=relationship_io.id,
125+
tags=relationship_io.tags,
126+
properties=relationship_io.properties,
127+
perspectives=relationship_io.perspectives,
128+
source_id=relationship_io.source_id,
129+
destination_id=relationship_io.destination_id,
130+
description=relationship_io.description,
131+
technology=relationship_io.technology,
132+
interaction_style=relationship_io.interaction_style,
133+
)

0 commit comments

Comments
 (0)