2
2
# vi: set ft=python sts=4 ts=4 sw=4 et:
3
3
"""Version CLI helpers."""
4
4
5
- from datetime import datetime
5
+ from contextlib import suppress
6
+ from datetime import datetime , timezone
6
7
from pathlib import Path
7
8
8
9
import requests
9
10
10
11
from .. import __version__
11
12
12
13
RELEASE_EXPIRY_DAYS = 14
13
- DATE_FMT = " %Y%m%d"
14
+ DATE_FMT = ' %Y%m%d'
14
15
15
16
16
17
def check_latest ():
@@ -20,65 +21,62 @@ def check_latest():
20
21
latest = None
21
22
date = None
22
23
outdated = None
23
- cachefile = Path .home () / ".cache" / "nibabies" / "latest"
24
+ now = datetime .now (tz = timezone .utc )
25
+ cachefile = Path .home () / '.cache' / 'nibabies' / 'latest'
24
26
try :
25
27
cachefile .parent .mkdir (parents = True , exist_ok = True )
26
28
except OSError :
27
29
cachefile = None
28
30
29
31
if cachefile and cachefile .exists ():
30
32
try :
31
- latest , date = cachefile .read_text ().split ("|" )
32
- except Exception :
33
+ latest , date = cachefile .read_text ().split ('|' )
34
+ except Exception : # noqa: S110, BLE001
33
35
pass
34
36
else :
35
37
try :
36
38
latest = Version (latest )
37
- date = datetime .strptime (date , DATE_FMT )
39
+ date = datetime .strptime (date , DATE_FMT ). astimezone ( timezone . utc )
38
40
except (InvalidVersion , ValueError ):
39
41
latest = None
40
42
else :
41
- if abs ((datetime . now () - date ).days ) > RELEASE_EXPIRY_DAYS :
43
+ if abs ((now - date ).days ) > RELEASE_EXPIRY_DAYS :
42
44
outdated = True
43
45
44
46
if latest is None or outdated is True :
45
- try :
46
- response = requests .get (url = "https://pypi.org/pypi/nibabies/json" , timeout = 1.0 )
47
- except Exception :
48
- response = None
47
+ response = None
48
+ with suppress (Exception ):
49
+ response = requests .get (url = 'https://pypi.org/pypi/nibabies/json' , timeout = 1.0 )
49
50
50
51
if response and response .status_code == 200 :
51
- versions = [Version (rel ) for rel in response .json ()[" releases" ].keys ()]
52
+ versions = [Version (rel ) for rel in response .json ()[' releases' ].keys ()]
52
53
versions = [rel for rel in versions if not rel .is_prerelease ]
53
54
if versions :
54
55
latest = sorted (versions )[- 1 ]
55
56
else :
56
57
latest = None
57
58
58
59
if cachefile is not None and latest is not None :
59
- try :
60
- cachefile .write_text ("|" .join (("%s" % latest , datetime .now ().strftime (DATE_FMT ))))
61
- except Exception :
62
- pass
60
+ with suppress (OSError ):
61
+ cachefile .write_text (f'{ latest } |{ now .strftime (DATE_FMT )} ' )
63
62
64
63
return latest
65
64
66
65
67
66
def is_flagged ():
68
67
"""Check whether current version is flagged."""
69
68
# https://raw.githubusercontent.com/nipreps/fmriprep/master/.versions.json
70
- flagged = tuple ()
71
- try :
69
+ flagged = ()
70
+ response = None
71
+ with suppress (Exception ):
72
72
response = requests .get (
73
73
url = """\
74
74
https://raw.githubusercontent.com/nipreps/nibabies/master/.versions.json""" ,
75
75
timeout = 1.0 ,
76
76
)
77
- except Exception :
78
- response = None
79
77
80
78
if response and response .status_code == 200 :
81
- flagged = response .json ().get (" flagged" , {}) or {}
79
+ flagged = response .json ().get (' flagged' , {}) or {}
82
80
83
81
if __version__ in flagged :
84
82
return True , flagged [__version__ ]
0 commit comments