1616"""Provide a superclass for all views."""
1717
1818
19- from abc import ABC
2019from typing import Any , Dict , Iterable , List , Optional , Set
2120
2221from pydantic import Field
2322
24- from ..abstract_base import AbstractBase
25- from ..base_model import BaseModel
26- from ..mixin import ViewSetRefMixin
23+ from .abstract_view import AbstractView , AbstractViewIO
2724from ..model import Element , Model , Relationship , SoftwareSystem
2825from .automatic_layout import AutomaticLayout , AutomaticLayoutIO
2926from .element_view import ElementView , ElementViewIO
3431__all__ = ("View" , "ViewIO" )
3532
3633
37- class ViewIO (BaseModel , ABC ):
34+ class ViewIO (AbstractViewIO ):
3835 """
39- Define an abstract base class for all views.
36+ Define a base class for non-filtered views.
4037
4138 Views include static views, dynamic views and deployment views.
4239 """
4340
44- key : str
45- description : str = ""
4641 software_system_id : Optional [str ] = Field (default = None , alias = "softwareSystemId" )
4742 paper_size : Optional [PaperSize ] = Field (default = None , alias = "paperSize" )
4843 automatic_layout : Optional [AutomaticLayoutIO ] = Field (
4944 default = None , alias = "automaticLayout"
5045 )
51- title : str = ""
5246
5347 element_views : List [ElementViewIO ] = Field (default = (), alias = "elements" )
5448 relationship_views : List [RelationshipViewIO ] = Field (
@@ -61,9 +55,9 @@ class ViewIO(BaseModel, ABC):
6155 # )
6256
6357
64- class View (ViewSetRefMixin , AbstractBase , ABC ):
58+ class View (AbstractView ):
6559 """
66- Define an abstract base class for all views.
60+ Define a base class for non-filtered views.
6761
6862 Views include static views, dynamic views and deployment views.
6963
@@ -73,11 +67,8 @@ def __init__(
7367 self ,
7468 * ,
7569 software_system : Optional [SoftwareSystem ] = None ,
76- key : str = None ,
77- description : str ,
7870 paper_size : Optional [PaperSize ] = None ,
7971 automatic_layout : Optional [AutomaticLayout ] = None ,
80- title : str = "" ,
8172 element_views : Optional [Iterable [ElementView ]] = (),
8273 relationship_views : Optional [Iterable [RelationshipView ]] = (),
8374 layout_merge_strategy : Optional [Any ] = None ,
@@ -87,33 +78,24 @@ def __init__(
8778 super ().__init__ (** kwargs )
8879 self .software_system = software_system
8980 self .software_system_id = software_system .id if software_system else None
90- self .key = key
91- self .description = description
9281 self .paper_size = paper_size
9382 self .automatic_layout = automatic_layout
94- self .title = title
9583 self .element_views : Set [ElementView ] = set (element_views )
9684 self ._relationship_views : Set [RelationshipView ] = set (relationship_views )
9785
9886 # TODO
9987 self .layout_merge_strategy = layout_merge_strategy
10088
101- def __repr__ (self ) -> str :
102- """Return repr(self)."""
103- return f"{ type (self ).__name__ } (key={ self .key } )"
104-
10589 @classmethod
10690 def hydrate_arguments (cls , view_io : ViewIO ) -> Dict :
10791 """Hydrate a ViewIO into the constructor arguments for View."""
10892 return {
93+ ** super ().hydrate_arguments (view_io ),
10994 # TODO: should we add this here? probably not: "software_system"
110- "key" : view_io .key ,
111- "description" : view_io .description ,
11295 "paper_size" : view_io .paper_size ,
11396 "automatic_layout" : AutomaticLayout .hydrate (view_io .automatic_layout )
11497 if view_io .automatic_layout
11598 else None ,
116- "title" : view_io .title ,
11799 "element_views" : map (ElementView .hydrate , view_io .element_views ),
118100 "relationship_views" : map (
119101 RelationshipView .hydrate , view_io .relationship_views
0 commit comments