File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ """Shared application resource helpers."""
2+
3+
4+ def _close_trace_reader (traces ):
5+ """Close a phylib trace reader, including readers without a public close method."""
6+ if traces is None :
7+ return
8+
9+ close = getattr (traces , 'close' , None )
10+ if callable (close ):
11+ close ()
12+ return
13+
14+ arrays = list (getattr (traces , '_mmaps' , ()))
15+ arr = getattr (traces , 'arr' , None )
16+ if arr is not None :
17+ arrays .append (arr )
18+ for arr in arrays :
19+ mmap = getattr (arr , '_mmap' , None )
20+ if mmap is not None and not mmap .closed :
21+ mmap .close ()
22+
23+ reader = getattr (traces , 'reader' , None )
24+ close = getattr (reader , 'close' , None )
25+ if callable (close ):
26+ close ()
Original file line number Diff line number Diff line change 4848from phy .utils .context import Context , _cache_methods
4949from phy .utils .plugin import attach_plugins
5050
51+ from ._utils import _close_trace_reader
52+
5153logger = logging .getLogger (__name__ )
5254
5355
@@ -976,6 +978,7 @@ def close(self, close_model=True):
976978 recreate a GUI around the same model. Resource cleanup is therefore explicit.
977979 """
978980 if close_model and not self ._model_closed :
981+ _close_trace_reader (getattr (self .model , 'traces' , None ))
979982 close = getattr (self .model , 'close' , None )
980983 if callable (close ):
981984 close ()
Original file line number Diff line number Diff line change @@ -48,6 +48,16 @@ def test_template_describe(qtbot, tempdir):
4848 assert '314' in stdout .getvalue ()
4949
5050
51+ def test_template_controller_close (tempdir ):
52+ dataset = _make_dataset (tempdir , param = 'dense' , has_spike_attributes = False )
53+ controller = _template_controller (tempdir , dataset .parent )
54+ mmaps = list (controller .model .traces ._mmaps )
55+
56+ controller .close ()
57+
58+ assert all (arr ._mmap .closed for arr in mmaps )
59+
60+
5161class TemplateControllerTests (GlobalViewsTests , BaseControllerTests ):
5262 """Base template controller tests."""
5363
@@ -114,9 +124,9 @@ def test_z1_close_reopen(self):
114124
115125 # Close the GUI.
116126 self .__class__ ._close_gui ()
117- self .__class__ ._controller .close (close_model = False )
127+ self .__class__ ._controller .close ()
118128
119- # Recreate the controller on the model .
129+ # Recreate the controller from the saved dataset .
120130 self .__class__ ._controller = _template_controller (
121131 self .__class__ ._tempdir , self .__class__ ._dataset .parent , clear_cache = False
122132 )
Original file line number Diff line number Diff line change @@ -319,6 +319,8 @@ class BaseControllerTests(MinimalControllerTests):
319319
320320 def test_common_01 (self ):
321321 """Select one cluster."""
322+ self .supervisor .select_actions .reset_wizard ()
323+ self .supervisor .block ()
322324 self .next_best ()
323325 self .assertEqual (len (self .selected ), 1 )
324326
Original file line number Diff line number Diff line change 1414from phy .cluster .views .trace import TraceView , select_traces
1515from phy .gui import GUI , create_app , run_app
1616
17- logger = logging .getLogger (__name__ )
18-
19-
20- def _close_trace_reader (traces ):
21- """Close a phylib trace reader, including readers without a public close method."""
22- close = getattr (traces , 'close' , None )
23- if callable (close ):
24- close ()
25- return
17+ from .._utils import _close_trace_reader
2618
27- for arr in getattr (traces , '_mmaps' , ()):
28- mmap = getattr (arr , '_mmap' , None )
29- if mmap is not None and not mmap .closed :
30- mmap .close ()
31-
32- reader = getattr (traces , 'reader' , None )
33- close = getattr (reader , 'close' , None )
34- if callable (close ):
35- close ()
19+ logger = logging .getLogger (__name__ )
3620
3721
3822# ------------------------------------------------------------------------------
You can’t perform that action at this time.
0 commit comments