Skip to content
This repository was archived by the owner on Jan 21, 2023. It is now read-only.

Commit d5e487d

Browse files
committed
refactor: improve some of the type annotations
1 parent 3d0e2d9 commit d5e487d

File tree

1 file changed

+21
-10
lines changed

1 file changed

+21
-10
lines changed

src/structurizr/view/view_set.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818

1919
from itertools import chain
20-
from typing import TYPE_CHECKING, Iterable, List, Optional, TypeVar
20+
from typing import TYPE_CHECKING, Iterable, List, Optional, TypeVar, Type
2121

2222
from pydantic import Field
2323

@@ -37,12 +37,22 @@
3737

3838

3939
if TYPE_CHECKING:
40-
from ..model import Model # pragma: no cover
40+
from ..model import Model, Container # pragma: no cover
4141

4242

43-
__all__ = ("ViewSet", "ViewSetIO")
43+
ConcreteView = TypeVar(
44+
"ConcreteView",
45+
ComponentView,
46+
ContainerView,
47+
DeploymentView,
48+
DynamicView,
49+
FilteredView,
50+
SystemContextView,
51+
SystemLandscapeView,
52+
)
53+
4454

45-
T = TypeVar("T")
55+
__all__ = ("ViewSet", "ViewSetIO")
4656

4757

4858
class ViewSetIO(BaseModel):
@@ -123,7 +133,7 @@ def container_views(self) -> Iterable[ContainerView]:
123133

124134
@property
125135
def component_views(self) -> Iterable[ComponentView]:
126-
"""Return the CompoentViews in this ViewSet."""
136+
"""Return the ComponentViews in this ViewSet."""
127137
return self._get_typed_views(ComponentView)
128138

129139
@property
@@ -142,7 +152,7 @@ def filtered_views(self) -> Iterable[FilteredView]:
142152
return self._get_typed_views(FilteredView)
143153

144154
@property
145-
def views(self) -> Iterable[AbstractView]:
155+
def views(self) -> Iterable[View]:
146156
"""Return all the views in this ViewSet."""
147157
return self._views.values()
148158

@@ -176,6 +186,7 @@ def hydrate(cls, views: ViewSetIO, model: "Model") -> "ViewSet":
176186
component_views = []
177187
for view_io in views.component_views:
178188
container = model.get_element(view_io.container_id)
189+
assert isinstance(container, Container)
179190
view = ComponentView.hydrate(view_io, container=container)
180191
cls._hydrate_view(view, model=model)
181192
component_views.append(view)
@@ -229,7 +240,7 @@ def _hydrate_view(cls, view: View, model: "Model") -> None:
229240
relationship_view.id
230241
)
231242

232-
def _add_view(self, view: View) -> None:
243+
def _add_view(self, view: AbstractView) -> None:
233244
self._views[view.key] = view
234245

235246
def create_system_landscape_view(
@@ -332,7 +343,7 @@ def create_dynamic_view(self, **kwargs) -> DynamicView:
332343
"""
333344
Add a new DynamicView to the ViewSet.
334345
335-
Args:
346+
Keyword Args:
336347
**kwagrs: Provide keyword arguments for instantiating a `DynamicView`.
337348
"""
338349
dynamic_view = DynamicView(**kwargs)
@@ -381,5 +392,5 @@ def _ensure_key_is_specific_and_unique(self, key: str) -> None:
381392
if key in self._views:
382393
raise ValueError(f"View already exists in workspace with key '{key}'.")
383394

384-
def _get_typed_views(self, klass: T) -> Iterable[T]:
385-
return (view for view in self._views.values() if isinstance(view, klass))
395+
def _get_typed_views(self, view_type: Type[ConcreteView]) -> Iterable[ConcreteView]:
396+
return (view for view in self._views.values() if isinstance(view, view_type))

0 commit comments

Comments
 (0)