1818from typing import Union
1919
2020from easyscience .global_object .undo_redo import NotarizedDict
21+ from easyscience .Objects .new_variable .descriptor_base import DescriptorBase
2122from easyscience .Objects .ObjectClasses import BasedBase
2223from easyscience .Objects .ObjectClasses import Descriptor
2324
@@ -40,6 +41,7 @@ def __init__(
4041 name : str ,
4142 * args : Union [B , V ],
4243 interface : Optional [iF ] = None ,
44+ unique_name : Optional [str ] = None ,
4345 ** kwargs ,
4446 ):
4547 """
@@ -51,7 +53,7 @@ def __init__(
5153 :param _kwargs: Fields which this class should contain
5254 :type _kwargs: dict
5355 """
54- BasedBase .__init__ (self , name )
56+ BasedBase .__init__ (self , name , unique_name = unique_name )
5557 kwargs = {key : kwargs [key ] for key in kwargs .keys () if kwargs [key ] is not None }
5658 _args = []
5759 for item in args :
@@ -67,7 +69,7 @@ def __init__(
6769 _kwargs [key ] = item
6870 kwargs = _kwargs
6971 for item in list (kwargs .values ()) + _args :
70- if not issubclass (type (item ), (Descriptor , BasedBase )):
72+ if not issubclass (type (item ), (Descriptor , DescriptorBase , BasedBase )):
7173 raise AttributeError ('A collection can only be formed from easyscience objects.' )
7274 args = _args
7375 _kwargs = {}
@@ -83,10 +85,11 @@ def __init__(
8385 for key in kwargs .keys ():
8486 if key in self .__dict__ .keys () or key in self .__slots__ :
8587 raise AttributeError (f'Given kwarg: `{ key } `, is an internal attribute. Please rename.' )
86- self ._global_object .map .add_edge (self , kwargs [key ])
87- self ._global_object .map .reset_type (kwargs [key ], 'created_internal' )
88- if interface is not None :
89- kwargs [key ].interface = interface
88+ if kwargs [key ]: # Might be None (empty tuple or list)
89+ self ._global_object .map .add_edge (self , kwargs [key ])
90+ self ._global_object .map .reset_type (kwargs [key ], 'created_internal' )
91+ if interface is not None :
92+ kwargs [key ].interface = interface
9093 # TODO wrap getter and setter in Logger
9194 if interface is not None :
9295 self .interface = interface
@@ -104,7 +107,7 @@ def insert(self, index: int, value: Union[V, B]) -> None:
104107 :rtype: None
105108 """
106109 t_ = type (value )
107- if issubclass (t_ , (BasedBase , Descriptor )):
110+ if issubclass (t_ , (BasedBase , Descriptor , DescriptorBase )):
108111 update_key = list (self ._kwargs .keys ())
109112 values = list (self ._kwargs .values ())
110113 # Update the internal dict
@@ -165,7 +168,7 @@ def __setitem__(self, key: int, value: Union[B, V]) -> None:
165168 if isinstance (value , Number ): # noqa: S3827
166169 item = self .__getitem__ (key )
167170 item .value = value
168- elif issubclass (type (value ), BasedBase ) or issubclass ( type ( value ) , Descriptor ):
171+ elif issubclass (type (value ), ( BasedBase , Descriptor , DescriptorBase ) ):
169172 update_key = list (self ._kwargs .keys ())
170173 values = list (self ._kwargs .values ())
171174 old_item = values [key ]
0 commit comments