@@ -47,7 +47,6 @@ def __init__(
4747
4848 self ._connection = serial_for_url (
4949 device , do_not_open = True , baudrate = baudrate )
50- self ._load = load
5150 self .device = {
5251 'endianness' : '<' ,
5352 'methods' : {},
@@ -56,7 +55,7 @@ def __init__(
5655 'version' : (0 , 0 , 0 )}
5756
5857 if autoconnect :
59- self .open ()
58+ self .open (load )
6059
6160 def __enter__ (self : object ) -> object :
6261 return self
@@ -105,11 +104,8 @@ def _read(self: object, obj_type: any) -> any:
105104 self ._connection , self .device ['endianness' ], self .device ['size_t' ],
106105 obj_type )
107106
108- def _get_methods (self : object ) -> dict :
109- """Get remote procedure call methods.
110-
111- :returns: Method objects indexed by name.
112- """
107+ def _get_methods (self : object ) -> None :
108+ """Get remote procedure call methods."""
113109 self ._select (_list_req )
114110
115111 _assert_protocol (self ._read_byte_string ().decode ())
@@ -122,26 +118,35 @@ def _get_methods(self: object) -> dict:
122118 self .device ['endianness' ], self .device ['size_t' ] = (
123119 chr (c ) for c in self ._read_byte_string ())
124120
125- methods = {}
126121 for index , line in enumerate (
127122 until (lambda x : x == b'' , self ._read_byte_string )):
128123 method = parse_line (index , line )
129- methods [method ['name' ]] = method
124+ self . device [ ' methods' ] [method ['name' ]] = method
130125
131- return methods
126+ def _load (self : object , handle : TextIO = None ) -> None :
127+ """Load the interface definition from a file.
128+
129+ :arg handle: Open file handle.
130+ """
131+ self .device = load (handle , Loader = FullLoader )
132+ _assert_protocol (self .device ['protocol' ])
133+ _assert_version (self .device ['version' ])
132134
133135 def is_open (self : object ) -> bool :
134136 """Query interface state."""
135137 pass
136138
137- def open (self : object ) -> None :
138- """Connect to device."""
139+ def open (self : object , handle : TextIO = None ) -> None :
140+ """Connect to device.
141+
142+ :arg handle: Open file handle.
143+ """
139144 sleep (self ._wait )
140145
141- if self . _load :
142- self .load ( )
146+ if handle :
147+ self ._load ( handle )
143148 else :
144- self .device [ 'methods' ] = self . _get_methods ()
149+ self ._get_methods ()
145150 for method in self .device ['methods' ].values ():
146151 setattr (
147152 self , method ['name' ], MethodType (make_function (method ), self ))
@@ -190,12 +195,6 @@ def save(self: object, handle: TextIO) -> None:
190195 """
191196 dump (self .device , handle , width = 76 , default_flow_style = False )
192197
193- def load (self : object ) -> None :
194- """Load the interface definition from a file."""
195- self .device = load (self ._load , Loader = FullLoader )
196- _assert_protocol (self .device ['protocol' ])
197- _assert_version (self .device ['version' ])
198-
199198
200199class SerialInterface (_Interface ):
201200 """Serial simpleRPC interface."""
@@ -204,9 +203,9 @@ def is_open(self: object) -> bool:
204203 return self ._connection .isOpen ()
205204
206205 @wraps (_Interface .open )
207- def open (self : object ) -> None :
206+ def open (self : object , handle : TextIO = None ) -> None :
208207 self ._open ()
209- super ().open ()
208+ super ().open (handle )
210209
211210 @wraps (_Interface .close )
212211 def close (self : object ) -> None :
0 commit comments