1717
1818
1919from 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
2222from pydantic import Field
2323
3737
3838
3939if 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
4858class 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