1
1
import requests
2
- import logging
3
- import traceback
2
+ import logging
3
+ import traceback
4
4
5
5
logger = logging .getLogger (__name__ )
6
6
@@ -9,87 +9,81 @@ def get_NPM_data(package):
9
9
r = requests .get (url )
10
10
if r .status_code < 400 :
11
11
return r .json ()
12
+ logger .warning (f"Failed to fetch data for package { package } . HTTP Status: { r .status_code } " )
12
13
return {}
13
14
14
-
15
15
def clean_version (version ):
16
16
version = [v for v in version if v .isdigit () or v == '.' ]
17
17
return '' .join (version )
18
18
19
19
def split_version (version ):
20
- #Split version string into list seperated by .
21
- #assign elements of list to respective variables.
22
20
version_list = list (version .split ('.' ))
23
21
patch = version_list .pop (- 1 )
24
22
minor = version_list .pop (- 1 )
25
23
major = version_list [0 ]
26
-
27
- return major ,minor ,patch
28
-
29
-
24
+ return major , minor , patch
30
25
31
26
def get_latest_patch (version , data ):
27
+ if 'versions' not in data :
28
+ logger .error (f"'versions' key not found in the NPM data for version { version } . Data: { data } " )
29
+ raise KeyError ("'versions' key not found" )
30
+
32
31
versions = data ['versions' ]
33
32
try :
34
33
index = list (versions .keys ()).index (version )
35
34
except ValueError as e :
35
+ logger .error (f"Version { version } not found in the 'versions' list. Error: { e } " )
36
36
raise e
37
37
38
- major ,minor ,patch = split_version (version )
38
+ major , minor , patch = split_version (version )
39
39
consider_version = version
40
40
for v in list (versions .keys ())[index :]:
41
- if v .split ('.' )[0 ]== major :
42
- if v .split ('.' )[1 ]== minor :
43
- if v .split ('.' )[2 ]> patch :
41
+ if v .split ('.' )[0 ] == major :
42
+ if v .split ('.' )[1 ] == minor :
43
+ if v .split ('.' )[2 ] > patch :
44
44
consider_version = v
45
45
return consider_version
46
46
47
-
48
47
def get_lastest_minor (version , data ):
49
- try :
50
- versions = data ['versions' ]
51
- except Exception as e :
52
- logger .info (
53
- '' .join (traceback .format_exception (None , e , e .__traceback__ )))
54
- # raise e
55
-
48
+ if 'versions' not in data :
49
+ logger .error (f"'versions' key not found in the NPM data. Data: { data } " )
50
+ raise KeyError ("'versions' key not found" )
51
+
52
+ versions = data ['versions' ]
56
53
try :
57
54
index = list (versions .keys ()).index (version )
58
55
except ValueError as e :
59
- logger .info (f'error is { e } on the NPM. Some kind of value error. Probably a VALUES error for Node, #AmIRight?' )
56
+ logger .info (f"Version { version } not found in the 'versions' list. Error: { e } " )
60
57
raise e
61
58
62
- major ,minor ,patch = split_version (version )
63
-
59
+ major , minor , patch = split_version (version )
64
60
consider_version = get_latest_patch (version , data )
65
61
for v in list (versions .keys ())[index :]:
66
- if v .split ('.' )[0 ]== major :
67
- if v .split ('.' )[1 ]> minor :
68
- consider_version = v
69
- return consider_version
70
-
62
+ if v .split ('.' )[0 ] == major :
63
+ if v .split ('.' )[1 ] > minor :
64
+ consider_version = v
65
+ return consider_version
71
66
72
67
def get_npm_release_date (data , version ):
73
- release_time = data ['time' ][ version ]
68
+ release_time = data ['time' ]. get ( version )
74
69
if release_time :
75
70
return release_time
71
+ logger .warning (f"Release time not found for version { version } " )
76
72
return None
77
73
78
-
79
74
def get_npm_latest_version (data ):
80
- return data ['dist-tags' ][ 'latest' ]
75
+ return data ['dist-tags' ]. get ( 'latest' , 'unknown' )
81
76
82
- #add code here
83
77
def get_npm_current_version (data , requirement ):
84
- if requirement [0 ]== '~' :
78
+ if requirement [0 ] == '~' :
85
79
try :
86
80
return get_latest_patch (clean_version (requirement ), data )
87
81
except ValueError :
88
82
return None
89
- elif requirement [0 ]== '^' :
83
+ elif requirement [0 ] == '^' :
90
84
try :
91
85
return get_lastest_minor (clean_version (requirement ), data )
92
86
except ValueError :
93
87
return None
94
88
else :
95
- return requirement
89
+ return requirement
0 commit comments