Skip to content

Commit 9efc34e

Browse files
authored
Merge pull request #61 from fosslight/develop
Add '-f(format)' option and modify '-o' option.
2 parents fb1857c + 331c4dd commit 9efc34e

File tree

5 files changed

+42
-55
lines changed

5 files changed

+42
-55
lines changed

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ lxml
44
virtualenv
55
pyyaml
66
lastversion
7-
fosslight_util>=1.3.3
7+
fosslight_util>=1.3.4
88
PyGithub

src/fosslight_dependency/_help.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@
2828
-m <package_manager>\t Enter the package manager.
2929
\t(npm, maven, gradle, pip, pub, cocoapods, android, swift, carthage)
3030
-p <input_path>\t\t Enter the path where the script will be run.
31-
-o <output_path>\t\t Enter the path where the result file will be generated.
31+
-o <output_path>\t\t Output path
32+
\t\t\t\t\t(If you want to generate the specific file name, add the output path with file name.)
33+
-f <format>\t\t\t Output file format (excel, csv, opossum)
3234
3335
Required only for pypi
3436
-a <activate_cmd>\t\t Virtual environment activate command(ex, 'conda activate (venv name)')

src/fosslight_dependency/package_manager/Pypi.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ def start_pip_licenses(self):
118118
pip_activate_cmd = ". " + tmp_activate
119119
elif self.pip_activate_cmd.startswith("conda "):
120120
if self.platform == const.LINUX:
121-
tmp_activate = "eval \"$(conda shell.bash hook)\""
121+
tmp_activate = "eval \"$(conda shell.bash hook)\";"
122122
pip_activate_cmd = tmp_activate + self.pip_activate_cmd
123123
else:
124124
pip_activate_cmd = self.pip_activate_cmd
@@ -142,7 +142,7 @@ def start_pip_licenses(self):
142142
err_msg = 'cmd ret code(' + str(cmd_ret) + ')'
143143
except Exception as e:
144144
ret = False
145-
err_msg = e
145+
err_msg = str(e)
146146
finally:
147147
if not ret:
148148
logger.error("Failed to freeze dependencies (" + command + "):" + err_msg)

src/fosslight_dependency/run_dependency_scanner.py

Lines changed: 31 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import os
77
import sys
8-
import platform
98
import argparse
109
import pkg_resources
1110
import warnings
@@ -16,16 +15,13 @@
1615
import fosslight_util.constant as constant
1716
from fosslight_dependency._help import print_help_msg
1817
from fosslight_dependency._analyze_dependency import analyze_dependency
19-
from fosslight_util.write_excel import write_excel_and_csv
18+
from fosslight_util.output_format import check_output_format, write_output_file
2019

2120
# Package Name
2221
_PKG_NAME = "fosslight_dependency"
2322
logger = logging.getLogger(constant.LOGGER_NAME)
2423
warnings.filterwarnings("ignore", category=FutureWarning)
2524
_sheet_name = "SRC_FL_Dependency"
26-
_fosslight_report = "FOSSLight-Report"
27-
_xlsx_extension = '.xlsx'
28-
_csv_extension = '.csv'
2925

3026

3127
def find_package_manager():
@@ -54,49 +50,36 @@ def find_package_manager():
5450
return ret, found_package_manager
5551

5652

57-
def run_dependency_scanner(package_manager='', input_dir='', output_dir='', pip_activate_cmd='', pip_deactivate_cmd='',
58-
output_custom_dir='', app_name=const.default_app_name, github_token=''):
53+
def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='', pip_activate_cmd='', pip_deactivate_cmd='',
54+
output_custom_dir='', app_name=const.default_app_name, github_token='', format=''):
5955
global logger
6056

6157
ret = True
62-
output_filename = ''
6358
sheet_list = {}
6459
sheet_list[_sheet_name] = []
60+
_json_ext = ".json"
61+
_start_time = datetime.now().strftime('%y%m%d_%H%M%S')
6562

66-
if output_dir:
67-
dirname = os.path.dirname(output_dir)
68-
basename = os.path.basename(output_dir)
63+
success, msg, output_path, output_file, output_extension = check_output_format(output_dir_file, format)
64+
if success:
65+
if output_path == "":
66+
output_path = os.getcwd()
67+
else:
68+
output_path = os.path.abspath(output_path)
6969

70-
if basename.endswith(_xlsx_extension) or basename.endswith(_csv_extension):
71-
output_filename = os.path.splitext(basename)[0]
72-
if dirname:
73-
output_dir = dirname
70+
if output_file == "":
71+
if output_extension == _json_ext:
72+
output_file = "Opossum_input_" + _start_time
7473
else:
75-
output_dir = os.getcwd()
76-
77-
if os.path.isdir(output_dir):
78-
output_dir = os.path.abspath(output_dir)
79-
else:
80-
try:
81-
os.makedirs(output_dir)
82-
output_dir = os.path.abspath(output_dir)
83-
except Exception as e:
84-
err_msg = str(e)
85-
ret = False
86-
output_dir = os.getcwd()
87-
else:
88-
output_dir = os.getcwd()
74+
output_file = "FOSSLight-Report_" + _start_time
8975

90-
start_time = datetime.now().strftime('%y%m%d_%H%M%S')
91-
logger, _result_log = init_log(os.path.join(output_dir, "fosslight_dependency_log_" + start_time + ".txt"),
76+
logger, _result_log = init_log(os.path.join(output_path, "fosslight_dependency_log_" + _start_time + ".txt"),
9277
True, logging.INFO, logging.DEBUG, _PKG_NAME)
9378

9479
logger.info("Tool Info : " + _result_log["Tool Info"])
9580

96-
if not ret:
97-
logger.error("You entered the wrong output path(" + output_dir + ") to generate output file.")
98-
logger.error("Please enter the output path that already exists or can be created with the '-o' option.")
99-
logger.error(" > err msg : " + err_msg)
81+
if not success:
82+
logger.error(msg)
10083
return False, sheet_list
10184

10285
autodetect = True
@@ -137,27 +120,21 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir='', pip_
137120
found_package_manager.append(package_manager)
138121

139122
for pm in found_package_manager:
140-
ret, package_sheet_list = analyze_dependency(pm, input_dir, output_dir, pip_activate_cmd, pip_deactivate_cmd,
123+
ret, package_sheet_list = analyze_dependency(pm, input_dir, output_path, pip_activate_cmd, pip_deactivate_cmd,
141124
output_custom_dir, app_name, github_token)
142125
if ret:
143126
sheet_list[_sheet_name].extend(package_sheet_list)
144127

145-
if not output_filename:
146-
output_filename = _fosslight_report + '_' + start_time
147-
148128
if sheet_list is not None:
149-
success, msg = write_excel_and_csv(os.path.join(output_dir, output_filename), sheet_list)
150-
if success:
151-
output_xlsx_name = output_filename + _xlsx_extension
152-
if platform.system() == const.WINDOWS:
153-
logger.info("Generated {0} into {1}!".format(output_xlsx_name, output_dir))
154-
else:
155-
output_csv_name = output_filename + '_' + _sheet_name + _csv_extension
156-
logger.info("Generated {0} and {1} into {2}!"
157-
.format(output_xlsx_name, output_csv_name, output_dir))
129+
output_file_without_ext = os.path.join(output_path, output_file)
130+
success_to_write, writing_msg = write_output_file(output_file_without_ext, output_extension,
131+
sheet_list)
132+
if success_to_write:
133+
logger.info("Writing Output file(" + output_file + output_extension + "):" + str(success_to_write) + " "
134+
+ writing_msg)
158135
else:
159136
ret = False
160-
logger.error("Fail to generate result file. msg:()" + msg)
137+
logger.error("Fail to generate result file. msg:()" + writing_msg)
161138
else:
162139
logger.error("Analyzing result is empty.")
163140

@@ -174,6 +151,7 @@ def main():
174151
output_custom_dir = ''
175152
app_name = const.default_app_name
176153
github_token = ''
154+
format = ''
177155

178156
parser = argparse.ArgumentParser(add_help=False)
179157
parser.add_argument('-h', '--help', action='store_true', required=False)
@@ -186,6 +164,7 @@ def main():
186164
parser.add_argument('-c', '--customized', nargs=1, type=str, required=False)
187165
parser.add_argument('-n', '--appname', nargs=1, type=str, required=False)
188166
parser.add_argument('-t', '--token', nargs=1, type=str, required=False)
167+
parser.add_argument('-f', '--format', nargs=1, type=str, required=False)
189168

190169
args = parser.parse_args()
191170

@@ -213,9 +192,11 @@ def main():
213192
app_name = ''.join(args.appname)
214193
if args.token: # -t option
215194
github_token = ''.join(args.token)
195+
if args.format: # -f option
196+
format = ''.join(args.format)
216197

217198
run_dependency_scanner(package_manager, input_dir, output_dir, pip_activate_cmd, pip_deactivate_cmd,
218-
output_custom_dir, app_name, github_token)
199+
output_custom_dir, app_name, github_token, format)
219200

220201

221202
if __name__ == '__main__':

tox.ini

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ filterwarnings = ignore::DeprecationWarning
1818
[flake8]
1919
max-line-length = 130
2020
exclude = .tox/*
21-
ignore = E722
21+
ignore = E722, W503
2222

2323
[testenv:test_run]
2424
deps =
@@ -53,6 +53,8 @@ commands =
5353
fosslight_dependency -p tests/test_pub -o tests/result/pub
5454
# Test for multi package manager (npm, pypi)
5555
fosslight_dependency -p tests/test_multi_pypi_npm -o tests/result/multi_pypi_npm
56+
# Test for opossum result
57+
fosslight_dependency -p tests/test_multi_pypi_npm -o tests/result/multi_pypi_npm -f opossum
5658

5759
[testenv:run_windows]
5860
deps =
@@ -70,3 +72,5 @@ commands =
7072
{toxinidir}\dist\cli.exe -p tests\test_pub -o tests\result\pub
7173
# Test for Android
7274
{toxinidir}\dist\cli.exe -p tests\test_android\sunflower -o tests\result\android
75+
# Test for opossum result
76+
{toxinidir}\dist\cli.exe -p tests\test_pub -o tests\result\pub -f opossum

0 commit comments

Comments
 (0)