File tree Expand file tree Collapse file tree 2 files changed +31
-13
lines changed Expand file tree Collapse file tree 2 files changed +31
-13
lines changed Original file line number Diff line number Diff line change @@ -161,3 +161,17 @@ def mock_get(*args, **kwargs):
161
161
assert reason == test_reason
162
162
else :
163
163
assert reason is None
164
+
165
+
166
+ def test_readonly (tmp_path , monkeypatch ):
167
+ """Test behavior when $HOME/.cache/fmriprep/latest can't be written out."""
168
+ monkeypatch .setenv ('HOME' , str (tmp_path ))
169
+ cachedir = tmp_path / '.cache'
170
+ cachedir .mkdir (mode = 0o555 , exist_ok = True )
171
+
172
+ # Make sure creating the folder will raise the exception.
173
+ with pytest .raises (OSError ):
174
+ (cachedir / 'fmriprep' ).mkdir ()
175
+
176
+ # Should not raise
177
+ check_latest ()
Original file line number Diff line number Diff line change @@ -19,21 +19,25 @@ def check_latest():
19
19
date = None
20
20
outdated = None
21
21
cachefile = Path .home () / '.cache' / 'fmriprep' / 'latest'
22
- cachefile .parent .mkdir (parents = True , exist_ok = True )
23
-
24
22
try :
25
- latest , date = cachefile .read_text ().split ('|' )
26
- except Exception :
27
- pass
28
- else :
23
+ cachefile .parent .mkdir (parents = True , exist_ok = True )
24
+ except OSError :
25
+ cachefile = None
26
+
27
+ if cachefile and cachefile .exists ():
29
28
try :
30
- latest = Version (latest )
31
- date = datetime .strptime (date , DATE_FMT )
32
- except (InvalidVersion , ValueError ):
33
- latest = None
29
+ latest , date = cachefile .read_text ().split ('|' )
30
+ except Exception :
31
+ pass
34
32
else :
35
- if abs ((datetime .now () - date ).days ) > RELEASE_EXPIRY_DAYS :
36
- outdated = True
33
+ try :
34
+ latest = Version (latest )
35
+ date = datetime .strptime (date , DATE_FMT )
36
+ except (InvalidVersion , ValueError ):
37
+ latest = None
38
+ else :
39
+ if abs ((datetime .now () - date ).days ) > RELEASE_EXPIRY_DAYS :
40
+ outdated = True
37
41
38
42
if latest is None or outdated is True :
39
43
try :
@@ -49,7 +53,7 @@ def check_latest():
49
53
else :
50
54
latest = None
51
55
52
- if latest is not None :
56
+ if cachefile is not None and latest is not None :
53
57
try :
54
58
cachefile .write_text ('|' .join (('%s' % latest , datetime .now ().strftime (DATE_FMT ))))
55
59
except Exception :
You can’t perform that action at this time.
0 commit comments