@@ -121,6 +121,10 @@ def __init__(self, cfg):
121
121
self .cfg = cfg
122
122
self .path = os .path .join (self .cfg .subsets_path , 'data.db' )
123
123
self .results = None
124
+ self .h5 = None
125
+
126
+ def _open (self ):
127
+ assert self .h5 is None
124
128
if os .path .exists (self .path ):
125
129
try :
126
130
self .h5 = tables .open_file (self .path , 'a' )
@@ -143,26 +147,37 @@ def __init__(self, cfg):
143
147
f = tables .Filters (complib = 'blosc' , complevel = 5 )
144
148
self .h5 = tables .open_file (self .path , 'w' , filters = f )
145
149
self .results = self .h5 .create_table (
146
- '/' , 'results' , cfg .data_layout .data_type )
150
+ '/' , 'results' , self . cfg .data_layout .data_type )
147
151
self .results .cols .subset_id .create_csindex ()
148
152
149
153
assert isinstance (self .results , tables .Table )
150
154
assert self .results .indexed
151
155
152
156
def get_results_for_subset (self , subset ):
157
+ self ._open ()
153
158
conditions = {'current_id' : subset .subset_id }
154
159
matching = self .results .read_where (
155
160
'subset_id == current_id' , conditions )
161
+ self .close ()
156
162
return matching
157
163
158
164
def is_empty (self ):
159
- return self .results .nrows == 0
165
+ self ._open ()
166
+ res = self .results .nrows == 0
167
+ self .close ()
168
+ return res
160
169
161
170
def save_result (self , subset , n ):
171
+ log .debug ("begin saving result" )
172
+ self ._open ()
162
173
# We have to take a slice here, as pytables can't handle single
163
174
# elements
164
175
self .results .append (subset .result_array [n :n + 1 ])
165
176
self .cfg .database .results .flush ()
177
+ self .close ()
178
+ log .debug ("done saving result" )
166
179
167
180
def close (self ):
168
- self .h5 .close ()
181
+ if self .h5 is not None :
182
+ self .h5 .close ()
183
+ self .h5 = None
0 commit comments