-
Notifications
You must be signed in to change notification settings - Fork 114
Expand file tree
/
Copy pathcrud_project.py
More file actions
112 lines (92 loc) · 2.8 KB
/
crud_project.py
File metadata and controls
112 lines (92 loc) · 2.8 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
from blackduck import Client
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", required=True, help="Project 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_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
params = {
'q': [f"name:{project_name}"]
}
project_url = None
for project in bd.get_items("/api/projects", params=params):
if project['name'] == project_name:
project_url = bd.list_resources(project)['href']
print(f"project url: {project_url}")
# GET or CREATE
project = bd.get_or_create_resource(name='projects', field='name', value=project_name)
if project:
print(f"project found with name {args.project}")
else:
print(f"no project with name {args.project}")
# PUT
project_data = {
'name': project_name,
'description': "a different description"
}
try:
r = bd.session.put(project_url, json=project_data)
r.raise_for_status()
print("updated project")
except requests.HTTPError as err:
bd.http_error_handler(err)
# DELETE
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)
# GET OR CREATE
project = bd.get_or_create_resource(
name='projects',
field='name',
value=project_name,
params={
'description': 'My project description',
'projectLevelAdjustments': True
}
)
project_url = project['_meta']['href']
# DELETE
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)