1313logger = logging .getLogger (constant .LOGGER_NAME )
1414
1515
16- def extract_name_version_from_link (link ):
16+ def extract_name_version_from_link (link , checkout_version ):
1717 oss_name = ""
1818 oss_version = ""
1919 matched = False
@@ -53,8 +53,12 @@ def extract_name_version_from_link(link):
5353 except Exception as ex :
5454 logger .info (f"extract_name_version_from_link { key } :{ ex } " )
5555 if oss_name and (not oss_version ):
56- if key in ["pypi" , "maven" , "npm" , "npm2" , "pub" , "go" ]:
57- oss_version , link = get_latest_package_version (link , key , origin_name )
56+ if checkout_version :
57+ oss_version = checkout_version
58+ elif key in ["pypi" , "maven" , "npm" , "npm2" , "pub" , "go" ]:
59+ oss_version = get_latest_package_version (link , key , origin_name )
60+ if oss_version :
61+ link = get_new_link_with_version (link , key , origin_name , oss_version )
5862 logger .info (f'Try to download with the latest version:{ link } ' )
5963 matched = True
6064 break
@@ -63,50 +67,56 @@ def extract_name_version_from_link(link):
6367 return oss_name , oss_version , link , key
6468
6569
70+ def get_new_link_with_version (link , pkg_type , oss_name , oss_version ):
71+ if pkg_type == "pypi" :
72+ link = f'https://pypi.org/project/{ oss_name } /{ oss_version } '
73+ elif pkg_type == "maven" :
74+ oss_name = oss_name .replace (':' , '/' )
75+ link = f'https://mvnrepository.com/artifact/{ oss_name } /{ oss_version } '
76+ elif pkg_type == "npm" or pkg_type == "npm2" :
77+ link = f'https://www.npmjs.com/package/{ oss_name } /v/{ oss_version } '
78+ elif pkg_type == "pub" :
79+ link = f'https://pub.dev/packages/{ oss_name } /versions/{ oss_version } '
80+ elif pkg_type == "go" :
81+ link = f'https://pkg.go.dev/{ oss_name } @{ oss_version } '
82+ elif pkg_type == "cargo" :
83+ link = f'https://crates.io/crates/{ oss_name } /{ oss_version } '
84+ return link
85+
86+
6687def get_latest_package_version (link , pkg_type , oss_name ):
6788 find_version = ''
68- link_with_version = link
6989
7090 try :
7191 if pkg_type in ['npm' , 'npm2' ]:
7292 npm_response = requests .get (f"https://registry.npmjs.org/{ oss_name } " )
7393 if npm_response .status_code == 200 :
7494 find_version = npm_response .json ().get ("dist-tags" , {}).get ("latest" )
75- if find_version :
76- link_with_version = f'https://www.npmjs.com/package/{ oss_name } /v/{ find_version } '
7795 elif pkg_type == 'pypi' :
7896 find_version = str (latest (oss_name , at = 'pip' , output_format = 'version' , pre_ok = True ))
79- link_with_version = f'https://pypi.org/project/{ oss_name } /{ find_version } '
8097 elif pkg_type == 'maven' :
8198 maven_response = requests .get (f'https://api.deps.dev/v3alpha/systems/maven/packages/{ oss_name } ' )
8299 if maven_response .status_code == 200 :
83100 find_version = maven_response .json ().get ('versions' )[- 1 ].get ('versionKey' ).get ('version' )
84- oss_name = oss_name .replace (':' , '/' )
85- if find_version :
86- link_with_version = f'https://mvnrepository.com/artifact/{ oss_name } /{ find_version } '
87101 elif pkg_type == 'pub' :
88102 pub_response = requests .get (f'https://pub.dev/api/packages/{ oss_name } ' )
89103 if pub_response .status_code == 200 :
90104 find_version = pub_response .json ().get ('latest' ).get ('version' )
91- if find_version :
92- link_with_version = f'https://pub.dev/packages/{ oss_name } /versions/{ find_version } '
93105 elif pkg_type == 'go' :
94106 go_response = requests .get (f'https://proxy.golang.org/{ oss_name } /@latest' )
95107 if go_response .status_code == 200 :
96108 find_version = go_response .json ().get ('Version' )
97- if find_version :
98- link_with_version = f'https://pkg.go.dev/{ oss_name } @{ find_version } '
99109 except Exception as e :
100110 logger .info (f'Fail to get latest package version({ link } :{ e } )' )
101- return find_version , link_with_version
111+ return find_version
102112
103113
104- def get_downloadable_url (link ):
114+ def get_downloadable_url (link , checkout_version ):
105115
106116 ret = False
107117 result_link = link
108118
109- oss_name , oss_version , new_link , pkg_type = extract_name_version_from_link (link )
119+ oss_name , oss_version , new_link , pkg_type = extract_name_version_from_link (link , checkout_version )
110120 new_link = new_link .replace ('http://' , '' )
111121 new_link = new_link .replace ('https://' , '' )
112122
0 commit comments