Skip to content

Commit 72f8bfe

Browse files
author
Glenn Snyder
committed
example showing how to retrieve matching source files
1 parent 3119bc4 commit 72f8bfe

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

examples/get_source_files.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#!/usr/bin/env python
2+
3+
import argparse
4+
import json
5+
import logging
6+
import math
7+
import sys
8+
import urllib
9+
from blackduck.HubRestApi import HubInstance
10+
11+
parser = argparse.ArgumentParser("Retrieve the source files - matched, unmatched, all - for a given project and version")
12+
parser.add_argument("project_name")
13+
parser.add_argument("version")
14+
parser.add_argument("-l", "--limit", type=int, default=100, help="Set the limit on the amount of matches to retrieve per call to the server")
15+
16+
args = parser.parse_args()
17+
18+
logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s', stream=sys.stderr, level=logging.DEBUG)
19+
logging.getLogger("requests").setLevel(logging.WARNING)
20+
logging.getLogger("urllib3").setLevel(logging.WARNING)
21+
22+
hub = HubInstance()
23+
24+
version = hub.get_project_version_by_name(args.project_name, args.version)
25+
26+
if not version:
27+
raise Exception(f"Did not find {args.version} in project {args.project_name}")
28+
29+
everything = {'all_files': []}
30+
base_url = version['_meta']['href'] + "/matched-files"
31+
32+
keys_and_parms = {
33+
'matched_files': {},
34+
'un_matched_files': {'filter':'bomMatchType:unmatched'}
35+
}
36+
37+
for key, parameters in keys_and_parms.items():
38+
num_results_found = math.inf
39+
first = True
40+
offset = 0
41+
42+
while offset < num_results_found:
43+
parameters.update({
44+
'limit': args.limit,
45+
'offset': offset
46+
})
47+
parameter_string = "&".join([f"{k}={urllib.parse.quote(str(v))}" for k,v in parameters.items()])
48+
url = base_url + f"?{parameter_string}"
49+
results = hub.execute_get(url).json()
50+
51+
if first:
52+
first = False
53+
num_results_found = results['totalCount']
54+
55+
if key in everything:
56+
everything[key].extend(results.get('items', []))
57+
else:
58+
everything[key] = results.get('items', [])
59+
60+
offset += args.limit
61+
62+
# Extend the list of all_files to include all the files in the set just created
63+
everything['all_files'].extend(everything[key].copy())
64+
65+
print(json.dumps(everything))

0 commit comments

Comments
 (0)