11import types
2- from typing import Callable
2+ from typing import Callable , Any
33from .option_builder import build_option
44
55
@@ -18,12 +18,13 @@ def __init__(self, name: str = 'Block') -> None:
1818 self ._inputs = {}
1919 self ._outputs = {}
2020 self ._options = {}
21+ self ._state = {'info' : None }
2122 self ._interface_names = []
2223
2324 def __repr__ (self ) -> str :
2425 return f'<barfi.Block of type `{ self ._type } ` at { hex (id (self ))} >'
2526
26- def __str__ (self ) -> str :
27+ def __str__ (self ) -> str :
2728 inputs_name = [input ['name' ] for input in self ._inputs ]
2829 outputs_name = [output ['name' ] for output in self ._outputs ]
2930 options_name = [option ['name' ] for option in self ._options ]
@@ -33,7 +34,7 @@ def __str__(self) -> str:
3334 line_4 = f'Options: { options_name !r} '
3435 return line_1 + line_2 + line_3 + line_4
3536
36- def add_input (self , name : str = None , value = None ) -> None :
37+ def add_input (self , name : str = None , value = None ) -> None :
3738 """
3839 A function defined to add an Input interface to the Block
3940
@@ -43,18 +44,20 @@ def add_input(self, name: str = None, value = None) -> None:
4344 Interface options:
4445 name (str) : The name of the Input interface.
4546 value (any) : The default value for this input interface.
46- """
47+ """
4748 if name :
48- if name in self ._interface_names : raise ValueError (f'name: { name } already exists as an interface to the Block.' )
49+ if name in self ._interface_names :
50+ raise ValueError (
51+ f'name: { name } already exists as an interface to the Block.' )
4952 self ._inputs [name ] = {'value' : value , 'id' : None }
5053 self ._interface_names .append (name )
5154 else :
5255 in_nos = len (self ._inputs )
5356 name = 'Input ' + str (in_nos + 1 )
54- self ._inputs [name ] = {'value' : value , 'id' : None }
55- self ._interface_names .append (name )
57+ self ._inputs [name ] = {'value' : value , 'id' : None }
58+ self ._interface_names .append (name )
5659
57- def add_output (self , name : str = None , value = None ) -> None :
60+ def add_output (self , name : str = None , value = None ) -> None :
5861 """
5962 A function defined to add an Output interface to the Block
6063
@@ -66,40 +69,55 @@ def add_output(self, name: str = None, value = None) -> None:
6669 value (any) : The default value for this output interface.
6770 """
6871 if name :
69- if name in self ._interface_names : raise ValueError (f'name: { name } already exists as an interface to the Block.' )
72+ if name in self ._interface_names :
73+ raise ValueError (
74+ f'name: { name } already exists as an interface to the Block.' )
7075 self ._outputs [name ] = {'value' : value , 'id' : None }
71- self ._interface_names .append (name )
76+ self ._interface_names .append (name )
7277 else :
7378 out_nos = len (self ._outputs )
7479 name = 'Output ' + str (out_nos + 1 )
7580 self ._outputs [name ] = {'value' : value , 'id' : None }
7681 self ._interface_names .append (name )
7782
7883 def get_interface (self , name : str ):
79-
84+
8085 if name in self ._inputs :
81- return self ._inputs [name ]['value' ]
86+ return self ._inputs [name ]['value' ]
8287 elif name in self ._outputs :
83- return self ._outputs [name ]['value' ]
88+ return self ._outputs [name ]['value' ]
8489 else :
85- raise ValueError (f'No interface with name: { name } found for Block' )
86- return None
90+ raise ValueError (f'No interface with name: { name } found for Block' )
8791
8892 def set_interface (self , name : str , value ) -> None :
8993 if name in self ._inputs :
90- self ._inputs [name ]['value' ] = value
94+ self ._inputs [name ]['value' ] = value
9195 elif name in self ._outputs :
9296 self ._outputs [name ]['value' ] = value
9397 else :
94- raise ValueError (f'No interface with name: { name } found for Block' )
98+ raise ValueError (f'No interface with name: { name } found for Block' )
9599
96100 def _set_interface_id (self , name : str , id : str ) -> None :
97101 if name in self ._inputs :
98102 self ._inputs [name ]['id' ] = id
99- elif name in self ._outputs :
103+ elif name in self ._outputs :
100104 self ._outputs [name ]['id' ] = id
101105 else :
102- raise ValueError (f'No interface with name: { name } found for Block' )
106+ raise ValueError (f'No interface with name: { name } found for Block' )
107+
108+ def set_state (self , key : str , value : Any ) -> None :
109+ reserved_state_keys = ['info' ]
110+ if key in reserved_state_keys :
111+ raise ValueError (
112+ f'Key: { key } used for setting state of block is reserved. Use another key.' )
113+ else :
114+ self ._state [key ] = value
115+
116+ def get_state (self , key : str ) -> Any :
117+ if key in self ._state :
118+ return self ._state [key ]
119+ else :
120+ raise ValueError (f'Key: { key } does not exist in state.' )
103121
104122 def add_option (self , name : str , type : str , ** kwargs ) -> None :
105123 """
@@ -125,30 +143,33 @@ def add_option(self, name: str, type: str, **kwargs) -> None:
125143 'display' ], 'Error: Option "type" is not of standard Option interface parameter.'
126144
127145 if name in self ._options :
128- raise ValueError (f'Option with name: { name } aready exists in Block.' )
146+ raise ValueError (
147+ f'Option with name: { name } aready exists in Block.' )
129148
130149 _option = build_option (name , type , kwargs )
131150
132151 self ._options [_option ['name' ]] = _option
133152
134- def set_option (self , name : str , ** kwargs ):
135- # Can only set the 'value' property for now.
153+ def set_option (self , name : str , ** kwargs ):
154+ # Can only set the 'value' property for now.
136155 if name in self ._options :
137156 for arg , value in kwargs .items ():
138157 if arg in self ._options [name ]:
139158 if arg in ['value' ]:
140159 self ._options [name ][arg ] = value
141160 else :
142- raise ValueError (f'Cannot set or invalid property: { arg } for Block option.' )
161+ raise ValueError (
162+ f'Cannot set or invalid property: { arg } for Block option.' )
143163 else :
144- raise ValueError (f'Property: { arg } is not a valid option property for { name } .' )
145- else :
164+ raise ValueError (
165+ f'Property: { arg } is not a valid option property for { name } .' )
166+ else :
146167 raise ValueError (f'Option name: { name } does not exist in Block.' )
147168
148- def get_option (self , name : str ):
169+ def get_option (self , name : str ):
149170 if name in self ._options :
150171 return self ._options [name ]['value' ]
151- else :
172+ else :
152173 raise ValueError (f'Option name: { name } does not exist in Block.' )
153174
154175 def _export (self ):
0 commit comments