-
Notifications
You must be signed in to change notification settings - Fork 114
Expand file tree
/
Copy pathcrud_version.py
More file actions
111 lines (93 loc) · 3.24 KB
/
crud_version.py
File metadata and controls
111 lines (93 loc) · 3.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
from blackduck import Client
from blackduck.constants import PROJECT_VERSION_SETTINGS, VERSION_DISTRIBUTION, VERSION_PHASES
import argparse
import logging
import requests
logging.basicConfig(
level=logging.DEBUG,
format="[%(asctime)s] {%(module)s:%(lineno)d} %(levelname)s - %(message)s"
)
parser = argparse.ArgumentParser("Create, read, update, and delete a project")
parser.add_argument("--base-url", required=True, help="Hub server URL e.g. https://your.blackduck.url")
parser.add_argument("--token-file", dest='token_file', required=True, help="containing access token")
parser.add_argument("--no-verify", dest='verify', action='store_false', help="disable TLS certificate verification")
parser.add_argument("project", help="Project name")
parser.add_argument("version", help="Version name")
args = parser.parse_args()
with open(args.token_file, 'r') as tf:
access_token = tf.readline().strip()
bd = Client(
base_url=args.base_url,
token=access_token,
verify=args.verify
)
project_name = args.project
# POST project
project_data = {
'name': project_name,
'description': "some description",
'projectLevelAdjustments': True,
}
try:
r = bd.session.post("/api/projects", json=project_data)
r.raise_for_status()
print(f"created project {r.links['project']['url']}")
except requests.HTTPError as err:
# more fine grained error handling here; otherwise:
bd.http_error_handler(err)
# GET project
params = {
'q': [f"name:{project_name}"]
}
project_obj = None
project_url = None
for project in bd.get_items("/api/projects", params=params):
if project['name'] == project_name:
project_obj = project
project_url = bd.list_resources(project)['href']
print(f"project url: {project_url}")
# POST version
version_data = {
'versionName': args.version,
'distribution': 'EXTERNAL',
'phase': 'PLANNING'
}
versions_url = project_url + "/versions"
try:
r = bd.session.post(versions_url, json=version_data)
r.raise_for_status()
version_url = r.headers['Location']
print(f"created version {version_url}")
except requests.HTTPError as err:
# more fine grained error handling here; otherwise:
bd.http_error_handler(err)
# GET or CREATE version
version = bd.get_or_create_resource(field='versionName', value=args.version, name="versions", parent=project_obj)
print(f"Version {version['versionName']} was either found or created after initial POST")
# DELETE version
try:
r = bd.session.delete(version_url)
r.raise_for_status()
print(f"deleted version {args.version}")
except requests.HTTPError as err:
if err.response.status_code == 404:
print("not found")
else:
bd.http_error_handler(err)
# GET or CREATE version
params = {
'phase': 'PLANNING',
'distribution': 'SAAS'
}
version = bd.get_or_create_resource(field='versionName', value=args.version, name="versions", parent=project_obj, params=params)
print(f"Version {version['versionName']} was either found or created after deleting the version")
# DELETE project
try:
r = bd.session.delete(project_url)
r.raise_for_status()
print("deleted project")
except requests.HTTPError as err:
if err.response.status_code == 404:
print("not found")
else:
bd.http_error_handler(err)