Skip to content

Commit bfd7cfa

Browse files
committed
net add
1 parent 18cd9c0 commit bfd7cfa

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

examples/client/net_add_components.py

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
#$!/usr/bin/env python3
2+
#
3+
4+
'''
5+
Created on Sep 23, 2024
6+
@author: kumykov
7+
8+
Net Add Components.
9+
10+
This script will extract components form a source project and add them as
11+
Manually Added components to the target project
12+
13+
'''
14+
from blackduck import Client
15+
16+
import argparse
17+
import logging
18+
import sys
19+
from pprint import pprint
20+
21+
logging.basicConfig(
22+
level=logging.DEBUG,
23+
format="[%(asctime)s] {%(module)s:%(lineno)d} %(levelname)s - %(message)s"
24+
)
25+
26+
def find_project_by_name(bd, project_name):
27+
params = {
28+
'q': [f"name:{project_name}"]
29+
}
30+
projects = [p for p in bd.get_resource('projects', params=params) if p['name'] == project_name]
31+
assert len(projects) == 1, f"Project {project_name} not found."
32+
return projects[0]
33+
34+
def find_project_version_by_name(bd, project, version_name):
35+
params = {
36+
'q': [f"versionName:{version_name}"]
37+
}
38+
versions = [v for v in bd.get_resource('versions', project, params=params) if v['versionName'] == version_name]
39+
assert len(versions) == 1, f"Project version {version_name} for project {project['name']} not found"
40+
return versions[0]
41+
42+
def parse_command_args():
43+
44+
parser = argparse.ArgumentParser("Extract components form a source project and add them to the target project as manual components.\n")
45+
parser.add_argument("-u", "--base-url", required=True, help="Hub server URL e.g. https://your.blackduck.url")
46+
parser.add_argument("-t", "--token-file", required=True, help="File containing access token")
47+
parser.add_argument("-nv", "--no-verify", action='store_false', help="Disable TLS certificate verification")
48+
parser.add_argument('-sp', '--source-project', help="Source Project")
49+
parser.add_argument('-sv', '--source-version', help="Source Project Version")
50+
parser.add_argument('-tp', '--target-project', help="Target Project")
51+
parser.add_argument('-tv', '--target-version', help="Target Project Version")
52+
53+
return parser.parse_args()
54+
55+
def add_component_to_a_project_version(bd, component, components_url):
56+
headers = {
57+
"Content-Type": "application/vnd.blackducksoftware.bill-of-materials-6+json"
58+
}
59+
data = dict()
60+
component_version = component.get('componentVersion', component.get('component'))
61+
component_origins = component['origins']
62+
if len(component_origins) > 0:
63+
for origin in component_origins:
64+
origin_url = origin['origin']
65+
payload = {"component": origin_url}
66+
result = bd.session.post(components_url, json=payload, headers=headers)
67+
pprint(result)
68+
else:
69+
data['component'] = component_version
70+
result = bd.session.post(components_url, json=data, headers=headers)
71+
pprint(result)
72+
73+
74+
def main():
75+
args = parse_command_args()
76+
with open(args.token_file, 'r') as tf:
77+
access_token = tf.readline().strip()
78+
global bd
79+
bd = Client(base_url=args.base_url, token=access_token, verify=args.no_verify, timeout=60.0, retries=4)
80+
81+
project = find_project_by_name(bd, args.source_project)
82+
version = find_project_version_by_name(bd, project, args.source_version)
83+
84+
target_project = find_project_by_name(bd, args.target_project)
85+
target_version = find_project_version_by_name(bd, target_project, args.target_version)
86+
87+
dict = bd.list_resources(target_version)
88+
components_url = dict['components']
89+
90+
components = bd.get_resource('components', version)
91+
for component in components:
92+
add_component_to_a_project_version(bd, component, components_url)
93+
94+
95+
if __name__ == "__main__":
96+
sys.exit(main())

0 commit comments

Comments
 (0)