|
7 | 7 | import sys |
8 | 8 | import logging |
9 | 9 | import shutil |
10 | | -import re |
11 | 10 | import pandas as pd |
12 | 11 | import yaml |
13 | 12 | import copy |
14 | | -import requests |
15 | | -from npm.bindings import npm_run |
16 | | -from lastversion import latest |
17 | 13 | import fosslight_util.constant as constant |
18 | 14 | from fosslight_util.parsing_yaml import parsing_yml |
19 | 15 | from fosslight_util.write_yaml import create_yaml_with_ossitem |
@@ -93,94 +89,6 @@ def call_analysis_api(path_to_run, str_run_start, return_idx, func, *args): |
93 | 89 | return success, result |
94 | 90 |
|
95 | 91 |
|
96 | | -def extract_name_version_from_link(link): |
97 | | - # Github : https://github.com/(owner)/(repo) |
98 | | - # npm : https://www.npmjs.com/package/(package)/v/(version) |
99 | | - # npm2 : https://www.npmjs.com/package/@(group)/(package)/v/(version) |
100 | | - # pypi : https://pypi.org/project/(oss_name)/(version) |
101 | | - # pypi2 : https://files.pythonhosted.org/packages/source/(alphabet)/(oss_name)/(oss_name)-(version).tar.gz |
102 | | - # Maven: https://mvnrepository.com/artifact/(group)/(artifact)/(version) |
103 | | - # pub: https://pub.dev/packages/(package)/versions/(version) |
104 | | - # Cocoapods: https://cocoapods.org/(package) |
105 | | - pkg_pattern = { |
106 | | - "github": r'https?:\/\/github.com\/([^\/]+)\/([^\/\.]+)(\.git)?', |
107 | | - "pypi": r'https?:\/\/pypi\.org\/project\/([^\/]+)[\/]?([^\/]*)', |
108 | | - "pypi2": r'https?:\/\/files\.pythonhosted\.org\/packages\/source\/[\w]\/([^\/]+)\/[\S]+-([^\-]+)\.tar\.gz', |
109 | | - "maven": r'https?:\/\/mvnrepository\.com\/artifact\/([^\/]+)\/([^\/]+)\/?([^\/]*)', |
110 | | - "npm": r'https?:\/\/www\.npmjs\.com\/package\/([^\/\@]+)(?:\/v\/)?([^\/]*)', |
111 | | - "npm2": r'https?:\/\/www\.npmjs\.com\/package\/(\@[^\/]+\/[^\/]+)(?:\/v\/)?([^\/]*)', |
112 | | - "pub": r'https?:\/\/pub\.dev\/packages\/([^\/]+)(?:\/versions\/)?([^\/]*)', |
113 | | - "pods": r'https?:\/\/cocoapods\.org\/pods\/([^\/]+)' |
114 | | - } |
115 | | - oss_name = "" |
116 | | - oss_version = "" |
117 | | - if link.startswith("www."): |
118 | | - link = link.replace("www.", "https://www.", 1) |
119 | | - for key, value in pkg_pattern.items(): |
120 | | - p = re.compile(value) |
121 | | - match = p.match(link) |
122 | | - if match: |
123 | | - try: |
124 | | - origin_name = match.group(1) |
125 | | - if key == "github": |
126 | | - repo = match.group(2) |
127 | | - oss_name = f"{origin_name}-{repo}" |
128 | | - elif (key == "pypi") or (key == "pypi2"): |
129 | | - oss_name = f"pypi:{origin_name}" |
130 | | - oss_name = re.sub(r"[-_.]+", "-", oss_name).lower() |
131 | | - oss_version = match.group(2) |
132 | | - elif key == "maven": |
133 | | - artifact = match.group(2) |
134 | | - oss_name = f"{origin_name}:{artifact}" |
135 | | - origin_name = oss_name |
136 | | - oss_version = match.group(3) |
137 | | - elif key == "npm" or key == "npm2": |
138 | | - oss_name = f"npm:{origin_name}" |
139 | | - oss_version = match.group(2) |
140 | | - elif key == "pub": |
141 | | - oss_name = f"pub:{origin_name}" |
142 | | - oss_version = match.group(2) |
143 | | - elif key == "pods": |
144 | | - oss_name = f"cocoapods:{origin_name}" |
145 | | - except Exception as ex: |
146 | | - logger.info(f"extract_name_version_from_link {key}:{ex}") |
147 | | - if oss_name and (not oss_version): |
148 | | - if key in ["pypi", "maven", "npm", "npm2", "pub"]: |
149 | | - oss_version, link = get_latest_package_version(link, key, origin_name) |
150 | | - logger.debug(f'Try to download with the latest version:{link}') |
151 | | - break |
152 | | - return oss_name, oss_version, link |
153 | | - |
154 | | - |
155 | | -def get_latest_package_version(link, pkg_type, oss_name): |
156 | | - find_version = '' |
157 | | - link_with_version = link |
158 | | - |
159 | | - try: |
160 | | - if pkg_type in ['npm', 'npm2']: |
161 | | - stderr, stdout = npm_run('view', oss_name, 'version') |
162 | | - if stdout: |
163 | | - find_version = stdout.strip() |
164 | | - link_with_version = f'https://www.npmjs.com/package/{oss_name}/v/{find_version}' |
165 | | - elif pkg_type == 'pypi': |
166 | | - find_version = str(latest(oss_name, at='pip', output_format='version', pre_ok=True)) |
167 | | - link_with_version = f'https://pypi.org/project/{oss_name}/{find_version}' |
168 | | - elif pkg_type == 'maven': |
169 | | - maven_response = requests.get(f'https://api.deps.dev/v3alpha/systems/maven/packages/{oss_name}') |
170 | | - if maven_response.status_code == 200: |
171 | | - find_version = maven_response.json().get('versions')[-1].get('versionKey').get('version') |
172 | | - oss_name = oss_name.replace(':', '/') |
173 | | - link_with_version = f'https://mvnrepository.com/artifact/{oss_name}/{find_version}' |
174 | | - elif pkg_type == 'pub': |
175 | | - pub_response = requests.get(f'https://pub.dev/api/packages/{oss_name}') |
176 | | - if pub_response.status_code == 200: |
177 | | - find_version = pub_response.json().get('latest').get('version') |
178 | | - link_with_version = f'https://pub.dev/packages/{oss_name}/versions/{find_version}' |
179 | | - except Exception as e: |
180 | | - logger.debug(f'Fail to get latest package version({link}:{e})') |
181 | | - return find_version, link_with_version |
182 | | - |
183 | | - |
184 | 92 | def overwrite_excel(excel_file_path, oss_name, column_name='OSS Name'): |
185 | 93 | if oss_name != "": |
186 | 94 | try: |
|
0 commit comments