Skip to content

Commit 729f046

Browse files
authored
Support download without ver in url using param (#227)
Signed-off-by: 석지영/책임연구원/SW공학(연)Open Source TP <[email protected]>
1 parent d3076cd commit 729f046

File tree

3 files changed

+37
-21
lines changed

3 files changed

+37
-21
lines changed

src/fosslight_util/_get_downloadable_url.py

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
logger = 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+
6687
def 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

src/fosslight_util/download.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,8 @@ def cli_download_and_extract(link: str, target_dir: str, log_dir: str, checkout_
137137
if os.path.isfile(target_dir):
138138
shutil.rmtree(target_dir)
139139

140-
success, downloaded_file, msg_wget, oss_name, oss_version = download_wget(link, target_dir, compressed_only)
140+
success, downloaded_file, msg_wget, oss_name, oss_version = download_wget(link, target_dir,
141+
compressed_only, checkout_to)
141142
if success:
142143
success = extract_compressed_file(downloaded_file, target_dir, True, compressed_only)
143144
# Download from rubygems.org
@@ -310,7 +311,7 @@ def download_git_clone(git_url, target_dir, checkout_to="", tag="", branch="",
310311
return success, msg, oss_name, refs_to_checkout
311312

312313

313-
def download_wget(link, target_dir, compressed_only):
314+
def download_wget(link, target_dir, compressed_only, checkout_to):
314315
success = False
315316
msg = ""
316317
oss_name = ""
@@ -327,7 +328,7 @@ def download_wget(link, target_dir, compressed_only):
327328

328329
Path(target_dir).mkdir(parents=True, exist_ok=True)
329330

330-
ret, new_link, oss_name, oss_version, pkg_type = get_downloadable_url(link)
331+
ret, new_link, oss_name, oss_version, pkg_type = get_downloadable_url(link, checkout_to)
331332
if ret and new_link:
332333
link = new_link
333334

src/fosslight_util/help.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,12 @@
3434
Optional:
3535
-h\t\t Print help message
3636
-t\t\t Output path name
37-
-d\t\t Directory name to save the log file"""
37+
-d\t\t Directory name to save the log file
38+
-s\t\t Source link to download
39+
-t\t\t Directory to download source code
40+
-c\t\t Checkout to branch or tag/ or version
41+
-z\t\t Unzip only compressed file
42+
-o\t\t Generate summary output file with this option"""
3843

3944

4045
class PrintHelpMsg():

0 commit comments

Comments
 (0)