1+ '''
2+ Created on Jan 18, 2024
3+
4+ @author: kumykov
5+
6+ Unmap codelocations from a project version
7+
8+ '''
9+
10+ from blackduck import Client
11+
12+ import argparse
13+ import json
14+ import logging
15+ import sys
16+ import time
17+ from pprint import pprint
18+
19+ logging .basicConfig (
20+ level = logging .DEBUG ,
21+ format = "[%(asctime)s] {%(module)s:%(lineno)d} %(levelname)s - %(message)s"
22+ )
23+
24+ parser = argparse .ArgumentParser (sys .argv [0 ])
25+ parser .add_argument ("-u" , "--bd-url" , help = "Hub server URL e.g. https://your.blackduck.url" )
26+ parser .add_argument ("-t" , "--token-file" , help = "File name of a file containing access token" )
27+ parser .add_argument ("-nv" , '--no-verify' , dest = 'verify' , action = 'store_false' , help = "disable TLS certificate verification" )
28+ parser .add_argument ("project_name" )
29+ parser .add_argument ("version_name" )
30+
31+ args = parser .parse_args ()
32+
33+ logging .basicConfig (format = '%(asctime)s:%(levelname)s:%(message)s' , stream = sys .stderr , level = logging .DEBUG )
34+ logging .getLogger ("requests" ).setLevel (logging .WARNING )
35+ logging .getLogger ("urllib3" ).setLevel (logging .WARNING )
36+ logging .getLogger ("blackduck" ).setLevel (logging .WARNING )
37+
38+ with open (args .token_file , 'r' ) as tf :
39+ access_token = tf .readline ().strip ()
40+
41+ bd = Client (base_url = args .bd_url , token = access_token , verify = args .verify )
42+
43+ params = {
44+ 'q' : [f"name:{ args .project_name } " ]
45+ }
46+ projects = [p for p in bd .get_resource ('projects' , params = params ) if p ['name' ] == args .project_name ]
47+ assert len (projects ) == 1 , f"There should be one, and only one project named { args .project_name } . We found { len (projects )} "
48+ project = projects [0 ]
49+
50+ params = {
51+ 'q' : [f"versionName:{ args .version_name } " ]
52+ }
53+ versions = [v for v in bd .get_resource ('versions' , project , params = params ) if v ['versionName' ] == args .version_name ]
54+ assert len (versions ) == 1 , f"There should be one, and only one version named { args .version_name } . We found { len (versions )} "
55+ version = versions [0 ]
56+
57+ logging .debug (f"Found { project ['name' ]} :{ version ['versionName' ]} " )
58+
59+ codelocations = bd .get_resource ('codelocations' , version )
60+
61+ for codelocation in codelocations :
62+ logging .debug (f"Un-mapping code location { codelocation ['name' ]} " )
63+ url = codelocation ['_meta' ]['href' ]
64+ codelocation ['mappedProjectVersion' ] = None
65+ result = bd .session .put (url , json = codelocation )
66+ logging .info (f"Code location '{ codelocation ['name' ]} ' unmap status { result } " )
0 commit comments