Skip to content

Commit cf8779c

Browse files
authored
Merge pull request #126 from valeriupredoi/dev_fixing_shelve_opens
Fix shelve opens to "with"style opening
2 parents 6980a80 + b0d715a commit cf8779c

13 files changed

+167
-341
lines changed

bgcval2/bgcvaltools/linkTwoJobs.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
import os
3636
import shutil
3737
from glob import glob
38-
from shelve import open as shopen
38+
from shelve import open as shOpen
3939
from datetime import datetime
4040

4141
from bgcval2.bgcvaltools.bv2tools import folder
@@ -169,7 +169,7 @@ def linkTwoJobs(jobID1, jobID2, copyShelves=False):
169169

170170
if os.path.exists(fn2) and fn2.find('insitu') == -1:
171171
try:
172-
s = shopen(fn2)
172+
s = shOpen(fn2)
173173
if 'readFiles' not in list(s.keys()):
174174
s.close()
175175
print("Shelve has no readFiles:", fn2)

bgcval2/bgcvaltools/makeMask.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
from calendar import month_name
3232
from shelve import open as shOpen
3333
import os
34+
from glob import glob
3435
from bgcval2.Paths.paths import paths
3536
from netCDF4 import Dataset
3637
import bgcval2.bgcvaltools.bv2tools as bvt
@@ -483,11 +484,11 @@ def makeMask(name, newSlice, xt, xz, xy, xx, xd, debug=False):
483484

484485
shelveFn = bvt.folder(os.path.join(paths.shelvedir, "MatchingMasks/"))+ newSlice+"_diag_maskMask.shelve"
485486

486-
try:
487-
s = shOpen(shelveFn)
488-
lldict = s['lldict']
489-
s.close()
490-
except:
487+
if len(glob(shelveFn+'*')):
488+
# Shelve already exists:
489+
with shOpen(shelveFn) as sh:
490+
lldict = sh['lldict']
491+
else:
491492
lldict = {}
492493

493494
print("Bathy mask: before mask:", newSlice, nmask.sum(), 'of',
@@ -517,9 +518,8 @@ def makeMask(name, newSlice, xt, xz, xy, xx, xd, debug=False):
517518
nmask[i] = 1
518519
if i > 0:
519520
try:
520-
s = shOpen(shelveFn)
521-
s['lldict'] = lldict
522-
s.close()
521+
with shOpen(shelveFn) as sh:
522+
sh['lldict'] = lldict
523523
except:
524524
print(
525525
"makeMask:\tWARNING:\tUnable to save lldict at this time")

bgcval2/bgcvaltools/removeMaskFromshelve.py

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,27 +31,26 @@
3131
3232
"""
3333

34-
from shelve import open as shopen
34+
from shelve import open as shOpen
3535
from glob import glob
3636

3737

3838
def removeFromShelves(fn, removeRegions):
3939
print('removing:', removeRegions, 'from', fn)
40-
sh = shopen(fn)
41-
42-
modeldata = sh['modeldata']
43-
44-
for key in list(modeldata.keys()):
45-
try:
46-
(r, l, m) = key
47-
except:
48-
continue
49-
if r in removeRegions:
50-
print('modeldata[', (r, l, m), '] will be deleted')
51-
del modeldata[(r, l, m)]
52-
53-
sh['modeldata'] = modeldata
54-
sh.close()
40+
with shOpen(fn) as sh:
41+
modeldata = sh['modeldata']
42+
for key in list(modeldata.keys()):
43+
try:
44+
(r, l, m) = key
45+
except ValueError:
46+
continue
47+
if r in removeRegions:
48+
print('modeldata[', (r, l, m), '] will be deleted')
49+
if (r, l, m) in modeldata:
50+
del modeldata[(r, l, m)]
51+
52+
sh['modeldata'] = modeldata
53+
# sh.close()
5554

5655

5756
removeRegions = [

bgcval2/custom_plots/PIControl_sst.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import os
44
import numpy as np
55
from matplotlib import pyplot
6-
from shelve import open as shopen
6+
from shelve import open as shOpen
77
from mpl_toolkits.axes_grid.inset_locator import (inset_axes, InsetPosition,
88
mark_inset,
99
zoomed_inset_axes)
@@ -174,7 +174,7 @@ def get_data(j, field='AMOC'):
174174

175175
if not os.path.exists(fn):
176176
print('Does not exist:', fn)
177-
shelve = shopen(fn)
177+
shelve = shOpen(fn)
178178
data = shelve['modeldata'][index]
179179
shelve.close()
180180
return data

bgcval2/custom_plots/ensemble_plots.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import os
1111
import numpy as np
1212
from matplotlib import pyplot
13-
from shelve import open as shopen
13+
from shelve import open as shOpen
1414

1515

1616
def movingaverage_DT(data, times, window_len=10., window_units='years'):
@@ -106,7 +106,7 @@ def getAMOCdata(j, field='AMOC'):
106106

107107
if not os.path.exists(fn):
108108
print('Does not exist:', fn)
109-
shelve = shopen(fn)
109+
shelve = shOpen(fn)
110110
data = shelve['modeldata'][index]
111111
shelve.close()
112112
# times = sorted(data.keys())

bgcval2/custom_plots/u-aw310_timeseries.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import numpy as np
77
from matplotlib import pyplot
8-
from shelve import open as shopen
8+
from shelve import open as shOpen
99

1010

1111
def movingaverage_DT(data, times, window_len=10., window_units='years'):
@@ -162,7 +162,7 @@ def getAMOCdata(j, field='AMOC'):
162162
fn = prefix + j + '_MLD.shelve'
163163
index = ('Wilkes', 'layerless', 'mean')
164164

165-
shelve = shopen(fn)
165+
shelve = shOpen(fn)
166166
data = shelve['modeldata'][index]
167167
shelve.close()
168168
return data

bgcval2/timeseries/analysis_level0.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
3030
"""
3131

32-
from shelve import open as shopen
32+
from shelve import open as shOpen
3333
from sys import argv, exit
3434
import os
3535
import numpy as np
@@ -80,7 +80,7 @@ def analysis_level0(
8080
print("This shelve fn doesn't exists", shelvefn)
8181
return name, False, False
8282
try:
83-
s = shopen(shelvefn)
83+
s = shOpen(shelvefn)
8484
modeldata = s['modeldata']
8585
readFiles = s['readFiles']
8686
s.close()
@@ -150,13 +150,13 @@ def analysis_level0_insitu(
150150
print("This shelve fn doesn't exists", shelvefn)
151151
return False
152152
try:
153-
s = shopen(shelvefn)
153+
s = shOpen(shelvefn)
154154
dataD = s['dataD']
155155
s.close()
156156
except:
157157
print("This shelve fn doesn't work properly", shelvefn)
158158
try:
159-
s = shopen(shelvefn)
159+
s = shOpen(shelvefn)
160160
print("s.keys:", list(s.keys()))
161161
s.close()
162162
except:

bgcval2/timeseries/profileAnalysis.py

Lines changed: 29 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
from netCDF4 import num2date
3434
import os
3535
import shutil
36+
from glob import glob
3637

3738
#Specific local code:
3839
from bgcval2.bgcvaltools import bv2tools as bvt
@@ -181,27 +182,19 @@ def loadModel(self):
181182
# load and calculate the model info
182183
self.setmlayers()
183184

184-
try:
185-
if self.clean:
186-
print("profileAnalysis:\tloadModel:\tUser requested clean run. Wiping old data.")
187-
assert 0
188-
sh = shOpen(self.shelvefn)
189-
readFiles = sh['readFiles']
190-
modeldataD = sh['modeldata']
191-
sh.close()
192-
193-
print("OprofileAnalysis:\tloadModel:\tpened shelve:", self.shelvefn, '\tread', len(
194-
readFiles))
195-
except:
185+
if self.clean or not len(glob(self.shelvefn+'*')):
186+
#print("profileAnalysis:\tloadModel:\tUser requested clean run. Wiping old data.")
196187
readFiles = []
197188
modeldataD = {}
198-
# self.setmlayers()
199189
for r in self.regions:
200190
for l in self.mlayers:
201191
for m in self.metrics:
202192
modeldataD[(r, l, m)] = {}
203-
204-
print("profileAnalysis:\tloadModel:\tCould not open shelve:", self.shelvefn, '\tread', len(
193+
else:
194+
with shOpen(self.shelvefn) as sh:
195+
readFiles = sh['readFiles']
196+
modeldataD = sh['modeldata']
197+
print("ProfileAnalysis:\tloadModel:\tOpened shelve:", self.shelvefn, '\tread', len(
205198
readFiles))
206199

207200
###############
@@ -300,18 +293,16 @@ def loadModel(self):
300293
if openedFiles:
301294
print("Saving shelve:", self.dataType, self.shelvefn, '\tread', len(
302295
readFiles))
303-
sh = shOpen(self.shelvefn)
304-
sh['readFiles'] = readFiles
305-
sh['modeldata'] = modeldataD
306-
sh.close()
296+
with shOpen(self.shelvefn) as sh:
297+
sh['readFiles'] = readFiles
298+
sh['modeldata'] = modeldataD
307299
openedFiles = 0
308300
if openedFiles:
309301
print("Saving shelve:", self.dataType, self.shelvefn, '\tread', len(
310302
readFiles))
311-
sh = shOpen(self.shelvefn)
312-
sh['readFiles'] = readFiles
313-
sh['modeldata'] = modeldataD
314-
sh.close()
303+
with shOpen(self.shelvefn) as sh:
304+
sh['readFiles'] = readFiles
305+
sh['modeldata'] = modeldataD
315306

316307
self.modeldataD = modeldataD
317308
if self.debug:
@@ -371,18 +362,14 @@ def loadData(self):
371362

372363
###############
373364
# load and calculate the real data info
374-
try:
375-
if self.clean:
376-
print("profileAnalysis:\t loadData\tUser requested clean run. Wiping old data.")
377-
assert 0
378-
sh = shOpen(self.shelvefn_insitu)
379-
dataD = sh['dataD']
380-
sh.close()
365+
if self.clean or not len(glob(self.shelvefn_insitu+'*')):
366+
print("profileAnalysis:\t loadData\tClean run.")
367+
dataD = {}
368+
else:
369+
with shOpen(self.shelvefn_insitu) as sh:
370+
dataD = sh['dataD']
381371
print("profileAnalysis:\t loadData\tOpened shelve:", self.shelvefn_insitu)
382372
self.dataD = dataD
383-
except:
384-
dataD = {}
385-
print("profileAnalysis:\t loadData\tCould not open shelve:", self.shelvefn_insitu)
386373

387374
###############
388375
# Test to find out if we need to load the netcdf, or if we can just return the dict as a self.object.
@@ -488,38 +475,22 @@ def loadData(self):
488475
r, l), 'mean:\t', meandatad)
489476

490477
print("profileAnalysis:\t loadData.\tSaving shelve: (layer", l, ")", self.shelvefn_insitu)
491-
sh = shOpen(self.shelvefn_insitu)
492-
sh['dataD'] = dataD
493-
sh.close()
494-
478+
with shOpen(self.shelvefn_insitu) as sh:
479+
sh['dataD'] = dataD
495480
###############
496481
# Savng shelve
497482
print("profileAnalysis:\t loadData.\tSaving shelve:", self.shelvefn_insitu)
498-
try:
499-
sh = shOpen(self.shelvefn_insitu)
500-
sh['dataD'] = dataD
501-
sh.close()
502-
503-
print("profileAnalysis:\t loadData.\tSaved shelve:", self.shelvefn_insitu)
504-
505-
except:
506-
print("profileAnalysis:\t WARNING.\tSaving shelve failed, trying again.:", self.shelvefn_insitu)
507-
print("Data is", list(dataD.keys()))
483+
with shOpen(self.shelvefn_insitu) as sh:
484+
sh['dataD'] = dataD
508485

509-
for key in sorted(dataD.keys()):
510486

511-
print(key, ':\t', dataD[key])
512-
sh = shOpen(bvt.folder('./tmpshelves') + 'tmshelve.shelve')
513-
sh['dataD'] = dataD[key]
514-
sh.close()
515-
print("saved fine:\t./tmpshelves/tmshelve.shelve")
516487

517-
shutil.move(self.shelvefn_insitu, self.shelvefn_insitu + '.broken')
488+
# for key in sorted(dataD.keys()):
518489

519-
# try:
520-
sh = shOpen(self.shelvefn_insitu)
521-
sh['dataD'] = dataD
522-
sh.close()
490+
# print(key, ':\t', dataD[key])
491+
# with shOpen(bvt.folder('./tmpshelves') + 'tmshelve.shelve') as sh:
492+
# sh['dataD'] = dataD[key]
493+
# print("saved fine:\t./tmpshelves/tmshelve.shelve")
523494

524495

525496
# except:

0 commit comments

Comments
 (0)