Skip to content

Commit 806a466

Browse files
authored
Merge pull request #63 from fosslight/develop
Add setup.py installation for pypi
2 parents c909660 + af5a8da commit 806a466

File tree

6 files changed

+60
-19
lines changed

6 files changed

+60
-19
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Because we utilizes the different open source software to analyze the dependenci
3939
## 📖 User Guide
4040

4141
We describe the user guide in the FOSSLight guide page.
42-
Please see the [**User Guide**](https://fosslight.org/fosslight-guide-en/scanner/2_dependency.html) for more information on how to install and run it.
42+
Please see the [**User Guide**](https://fosslight.org/fosslight-guide-en/scanner/3_dependency.html) for more information on how to install and run it.
4343

4444
## 👏 Contributing Guide
4545

src/fosslight_dependency/_analyze_dependency.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222

2323
def analyze_dependency(package_manager_name, input_dir, output_dir, pip_activate_cmd='', pip_deactivate_cmd='',
24-
output_custom_dir='', app_name=const.default_app_name, github_token=''):
24+
output_custom_dir='', app_name=const.default_app_name, github_token='', manifest_file_name=[]):
2525
ret = True
2626
package_sheet_list = []
2727

@@ -48,6 +48,8 @@ def analyze_dependency(package_manager_name, input_dir, output_dir, pip_activate
4848
ret = False
4949
return ret, package_sheet_list
5050

51+
if manifest_file_name:
52+
package_manager.set_manifest_file(manifest_file_name)
5153
ret = package_manager.run_plugin()
5254
if ret:
5355
for f_name in package_manager.input_package_list_file:

src/fosslight_dependency/_package_manager.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ def __init__(self, package_manager_name, dn_url, input_dir, output_dir):
3434
self.input_dir = input_dir
3535
self.output_dir = output_dir
3636
self.dn_url = dn_url
37+
self.manifest_file_name = []
3738

3839
self.platform = platform.system()
3940
self.license_scanner_bin = check_license_scanner(self.platform)
@@ -45,6 +46,9 @@ def run_plugin(self):
4546
def append_input_package_list_file(self, input_package_file):
4647
self.input_package_list_file.append(input_package_file)
4748

49+
def set_manifest_file(self, manifest_file_name):
50+
self.manifest_file_name = manifest_file_name
51+
4852

4953
def version_refine(oss_version):
5054
version_cmp = oss_version.upper()

src/fosslight_dependency/constant.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
# Supported package name and manifest file
2323
SUPPORT_PACKAE = {
24-
PYPI: 'requirements.txt',
24+
PYPI: ['requirements.txt', 'setup.py'],
2525
NPM: 'package.json',
2626
MAVEN: 'pom.xml',
2727
GRADLE: 'build.gradle',

src/fosslight_dependency/package_manager/Pypi.py

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import subprocess
99
import json
1010
import shutil
11+
import copy
1112
import fosslight_util.constant as constant
1213
import fosslight_dependency.constant as const
1314
from fosslight_dependency._package_manager import PackageManager
@@ -62,11 +63,21 @@ def run_plugin(self):
6263
def create_virtualenv(self):
6364
ret = True
6465

65-
manifest_file = const.SUPPORT_PACKAE.get(self.package_manager_name)
66-
if not os.path.isfile(manifest_file):
67-
logger.error('Cannot create virtualenv becuase it cannot find the ' + manifest_file)
68-
logger.error("Please run with '-a' and '-d' option.")
69-
return False
66+
manifest_files = self.manifest_file_name
67+
if not manifest_files:
68+
manifest_files = copy.deepcopy(const.SUPPORT_PACKAE[self.package_manager_name])
69+
self.set_manifest_file(manifest_files)
70+
71+
install_cmd_list = []
72+
for manifest_file in manifest_files:
73+
if os.path.exists(manifest_file):
74+
if manifest_file == 'setup.py':
75+
install_cmd_list.append("pip install .")
76+
elif manifest_file == 'requirements.txt':
77+
install_cmd_list.append("pip install -r requirements.txt")
78+
else:
79+
manifest_files.remove(manifest_file)
80+
self.set_manifest_file(manifest_files)
7081

7182
venv_path = os.path.join(self.input_dir, self.venv_tmp_dir)
7283

@@ -79,7 +90,15 @@ def create_virtualenv(self):
7990
activate_cmd = ". " + os.path.join(venv_path, "bin", "activate")
8091
cmd_separator = ";"
8192

82-
install_cmd = "pip install -r requirements.txt"
93+
if install_cmd_list:
94+
install_cmd = cmd_separator.join(install_cmd_list)
95+
else:
96+
logger.error(const.SUPPORT_PACKAE[self.package_manager_name])
97+
logger.error('Cannot create virtualenv becuase it cannot find: '
98+
+ ', '.join(const.SUPPORT_PACKAE[self.package_manager_name]))
99+
logger.error("Please run with '-a' and '-d' option.")
100+
return False
101+
83102
deactivate_cmd = "deactivate"
84103

85104
self.set_pip_activate_cmd(activate_cmd)
@@ -234,7 +253,7 @@ def parse_oss_information(self, f_name):
234253
if license_name_with_license_scanner != "":
235254
license_name = license_name_with_license_scanner
236255

237-
sheet_list.append([const.SUPPORT_PACKAE.get(self.package_manager_name),
256+
sheet_list.append([', '.join(self.manifest_file_name),
238257
oss_name, oss_version,
239258
license_name, dn_loc, homepage, '', '', ''])
240259

src/fosslight_dependency/run_dependency_scanner.py

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
from datetime import datetime
1212
import logging
1313
import fosslight_dependency.constant as const
14+
import traceback
15+
from collections import defaultdict
1416
from fosslight_util.set_log import init_log
1517
import fosslight_util.constant as constant
1618
from fosslight_dependency._help import print_help_msg
@@ -26,22 +28,35 @@
2628

2729
def find_package_manager():
2830
ret = True
29-
manifest_file_name = list(set(list(const.SUPPORT_PACKAE.values())))
31+
manifest_file_name = []
32+
for value in const.SUPPORT_PACKAE.values():
33+
if isinstance(value, list):
34+
manifest_file_name.extend(value)
35+
else:
36+
manifest_file_name.append(value)
3037

3138
found_manifest_file = []
3239
for f in manifest_file_name:
3340
if os.path.isfile(f):
3441
found_manifest_file.append(f)
3542

36-
found_package_manager = []
43+
found_package_manager = defaultdict(list)
3744
for f_idx in found_manifest_file:
3845
for key, value in const.SUPPORT_PACKAE.items():
39-
if value == f_idx:
40-
found_package_manager.append(key)
46+
if isinstance(value, list):
47+
for v in value:
48+
if f_idx == v:
49+
if key in found_package_manager.keys():
50+
found_package_manager[key].append(f_idx)
51+
else:
52+
found_package_manager[key] = [f_idx]
53+
else:
54+
if value == f_idx:
55+
found_package_manager[key] = [f_idx]
4156

4257
if len(found_package_manager) >= 1:
4358
logger.info("Found the manifest file(" + ','.join(found_manifest_file) + ")automatically.")
44-
logger.warning("### Set Package Manager = " + ', '.join(found_package_manager))
59+
logger.warning("### Set Package Manager = " + ', '.join(found_package_manager.keys()))
4560
else:
4661
ret = False
4762
logger.error("Cannot find the manifest file.")
@@ -105,23 +120,24 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
105120
input_dir = os.getcwd()
106121
os.chdir(input_dir)
107122

108-
found_package_manager = []
123+
found_package_manager = {}
109124
if autodetect:
110125
try:
111126
ret, found_package_manager = find_package_manager()
112127
except Exception as e:
113128
logger.error(str(e))
129+
logger.error(traceback.format_exc())
114130
ret = False
115131
finally:
116132
if not ret:
117133
logger.error("Failed to detect package manager automatically.")
118134
return False, sheet_list
119135
else:
120-
found_package_manager.append(package_manager)
136+
found_package_manager[package_manager] = ''
121137

122-
for pm in found_package_manager:
138+
for pm, manifest_file_name in found_package_manager.items():
123139
ret, package_sheet_list = analyze_dependency(pm, input_dir, output_path, pip_activate_cmd, pip_deactivate_cmd,
124-
output_custom_dir, app_name, github_token)
140+
output_custom_dir, app_name, github_token, manifest_file_name)
125141
if ret:
126142
sheet_list[_sheet_name].extend(package_sheet_list)
127143

0 commit comments

Comments
 (0)