@@ -43,17 +43,33 @@ class MockSource:
4343mock_rapida .clients .protos = types .ModuleType ('rapida.clients.protos' )
4444mock_rapida .clients .protos .common_pb2 = mock_common_pb2
4545
46- # Install the mocks before loading rapida_source
47- sys .modules ['rapida' ] = mock_rapida
48- sys .modules ['rapida.clients' ] = mock_rapida .clients
49- sys .modules ['rapida.clients.protos' ] = mock_rapida .clients .protos
50- sys .modules ['rapida.clients.protos.common_pb2' ] = mock_common_pb2
46+ _mocked_module_names = (
47+ 'rapida' ,
48+ 'rapida.clients' ,
49+ 'rapida.clients.protos' ,
50+ 'rapida.clients.protos.common_pb2' ,
51+ )
52+ _original_modules = {
53+ name : sys .modules .get (name ) for name in _mocked_module_names
54+ }
5155
5256# Now import rapida_source which depends on common_pb2
5357module_path = os .path .join (os .path .dirname (__file__ ), '..' , '..' , 'rapida' , 'utils' , 'rapida_source.py' )
5458spec = importlib .util .spec_from_file_location ('rapida_source' , module_path )
5559module = importlib .util .module_from_spec (spec )
56- spec .loader .exec_module (module )
60+ try :
61+ # Install the mocks only while loading rapida_source.
62+ sys .modules ['rapida' ] = mock_rapida
63+ sys .modules ['rapida.clients' ] = mock_rapida .clients
64+ sys .modules ['rapida.clients.protos' ] = mock_rapida .clients .protos
65+ sys .modules ['rapida.clients.protos.common_pb2' ] = mock_common_pb2
66+ spec .loader .exec_module (module )
67+ finally :
68+ for name , original_module in _original_modules .items ():
69+ if original_module is None :
70+ sys .modules .pop (name , None )
71+ else :
72+ sys .modules [name ] = original_module
5773
5874RapidaSource = module .RapidaSource
5975common_pb2 = mock_common_pb2
0 commit comments