Skip to content

Commit 3c1e5c9

Browse files
ilaifMidnighter
andcommitted
feat: add hydrate and other features to view set
Co-authored-by: Midnighter <[email protected]>
1 parent 9b3161b commit 3c1e5c9

File tree

1 file changed

+72
-14
lines changed

1 file changed

+72
-14
lines changed

src/structurizr/view/view_set.py

Lines changed: 72 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
2424
from ..base_model import BaseModel
2525
from ..mixin import ModelRefMixin
2626
from .configuration import Configuration, ConfigurationIO
27+
from .container_view import ContainerView, ContainerViewIO
2728
from .system_context_view import SystemContextView, SystemContextViewIO
29+
from .system_landscape_view import SystemLandscapeView, SystemLandscapeViewIO
2830

2931

3032
if TYPE_CHECKING:
@@ -44,20 +46,20 @@ class ViewSetIO(BaseModel):
4446
4547
"""
4648

47-
# TODO
48-
# system_landscape_views: Set[SystemLandscapeView] = Field(
49-
# set(), alias="systemLandscapeViews"
50-
# )
49+
system_landscape_views: List[SystemLandscapeViewIO] = Field(
50+
default=(), alias="systemLandscapeViews"
51+
)
5152
system_context_views: List[SystemContextViewIO] = Field(
52-
[], alias="systemContextView"
53+
default=(), alias="systemContextViews"
5354
)
54-
configuration: Optional[ConfigurationIO]
55-
# TODO
56-
# container_views: Set[ContainerView] = Field(set(), alias="containerViews")
57-
# component_views: Set[ComponentView] = Field(set(), alias="componentViews")
58-
# dynamic_views: Set[DynamicView] = Field(set(), alias="dynamicViews")
59-
# deployment_views: Set[DeploymentView] = Field(set(), alias="deploymentViews")
60-
# filtered_views: Set[FilteredView] = Field(set(), alias="filteredViews")
55+
configuration: Optional[ConfigurationIO] = None
56+
container_views: List[ContainerViewIO] = Field(default=(), alias="containerViews")
57+
58+
# TODO:
59+
# component_views: List[ComponentView] = Field(set(), alias="componentViews")
60+
# dynamic_views: List[DynamicView] = Field(set(), alias="dynamicViews")
61+
# deployment_views: List[DeploymentView] = Field(set(), alias="deploymentViews")
62+
# filtered_views: List[FilteredView] = Field(set(), alias="filteredViews")
6163

6264

6365
class ViewSet(ModelRefMixin, AbstractBase):
@@ -73,25 +75,81 @@ class ViewSet(ModelRefMixin, AbstractBase):
7375
def __init__(
7476
self,
7577
*,
76-
model: "Model",
78+
model: Optional["Model"] = None,
79+
# TODO:
80+
# enterprise_context_views: Iterable[EnterpriseContextView] = (),
81+
system_landscape_views: Iterable[SystemLandscapeView] = (),
7782
system_context_views: Iterable[SystemContextView] = (),
83+
container_views: Iterable[ContainerView] = (),
7884
configuration: Optional[Configuration] = None,
7985
**kwargs
8086
) -> None:
8187
"""Initialize a view set."""
8288
super().__init__(**kwargs)
89+
# self.enterprise_context_views = set(enterprise_context_views)
90+
self.system_landscape_views = set(system_landscape_views)
8391
self.system_context_views = set(system_context_views)
92+
self.container_views = set(container_views)
8493
# TODO
8594
self.configuration = Configuration() if configuration is None else configuration
8695
self.set_model(model)
8796

97+
def create_system_landscape_view(
98+
self, system_landscape_view: Optional[SystemLandscapeView] = None, **kwargs
99+
) -> SystemLandscapeView:
100+
# TODO:
101+
# assertThatTheViewKeyIsSpecifiedAndUnique(key);
102+
if system_landscape_view is None:
103+
system_landscape_view = SystemLandscapeView(
104+
model=self.get_model(), **kwargs
105+
)
106+
system_landscape_view.set_viewset(self)
107+
self.system_landscape_views.add(system_landscape_view)
108+
return system_landscape_view
109+
88110
def create_system_context_view(
89-
self, system_context_view: SystemContextView = None, **kwargs
111+
self, system_context_view: Optional[SystemContextView] = None, **kwargs
90112
) -> SystemContextView:
113+
# TODO:
91114
# assertThatTheSoftwareSystemIsNotNull(softwareSystem);
92115
# assertThatTheViewKeyIsSpecifiedAndUnique(key);
93116
if system_context_view is None:
94117
system_context_view = SystemContextView(**kwargs)
95118
system_context_view.set_viewset(self)
96119
self.system_context_views.add(system_context_view)
97120
return system_context_view
121+
122+
def create_container_view(
123+
self, container_view: Optional[ContainerView] = None, **kwargs
124+
) -> ContainerView:
125+
# TODO:
126+
# assertThatTheSoftwareSystemIsNotNull(softwareSystem);
127+
# assertThatTheViewKeyIsSpecifiedAndUnique(key);
128+
if container_view is None:
129+
container_view = ContainerView(**kwargs)
130+
container_view.set_viewset(self)
131+
self.container_views.add(container_view)
132+
return container_view
133+
134+
@classmethod
135+
def hydrate(cls, views: ViewSetIO, model: Optional["Model"] = None) -> "ViewSet":
136+
system_context_views = []
137+
for view_io in views.system_context_views:
138+
view = SystemContextView.hydrate(view_io)
139+
view.software_system_id = view_io.software_system_id
140+
view.software_system = model.get_software_system_with_id(
141+
view.software_system_id
142+
)
143+
system_context_views.append(view)
144+
145+
return cls(
146+
# model=model,
147+
# TODO:
148+
# enterprise_context_views: Iterable[EnterpriseContextView] = (),
149+
system_landscape_views=map(
150+
SystemLandscapeView.hydrate, views.system_landscape_views
151+
),
152+
system_context_views=system_context_views,
153+
container_views=map(ContainerView.hydrate, views.container_views),
154+
configuration=Configuration.hydrate(views.configuration),
155+
)

0 commit comments

Comments
 (0)