Skip to content

Commit c1d6af9

Browse files
committed
list projects added
1 parent dabd48f commit c1d6af9

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed

examples/client/list_projects.py

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
#!/usr/bin/env python
2+
3+
'''
4+
Copyright (C) 2023 Synopsys, Inc.
5+
http://www.blackducksoftware.com/
6+
7+
Licensed to the Apache Software Foundation (ASF) under one
8+
or more contributor license agreements. See the NOTICE file
9+
distributed with this work for additional information
10+
regarding copyright ownership. The ASF licenses this file
11+
to you under the Apache License, Version 2.0 (the
12+
"License"); you may not use this file except in compliance
13+
with the License. You may obtain a copy of the License at
14+
15+
http://www.apache.org/licenses/LICENSE-2.0
16+
17+
Unless required by applicable law or agreed to in writing,
18+
software distributed under the License is distributed on an
19+
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
20+
KIND, either express or implied. See the License for the
21+
specific language governing permissions and limitations
22+
under the License.
23+
24+
List projects and project owners
25+
26+
usage: list_projects.py [-h] -u BASE_URL -t TOKEN_FILE [-nv]
27+
28+
options:
29+
-h, --help show this help message and exit
30+
-u BASE_URL, --base-url BASE_URL
31+
Hub server URL e.g. https://your.blackduck.url
32+
-t TOKEN_FILE, --token-file TOKEN_FILE
33+
containing access token
34+
-nv, --no-verify disable TLS certificate verification
35+
36+
'''
37+
import argparse
38+
import json
39+
import logging
40+
import sys
41+
import arrow
42+
import csv
43+
44+
from blackduck import Client
45+
from pprint import pprint
46+
47+
parser = argparse.ArgumentParser("List projects and project owners")
48+
parser.add_argument("-u", "--base-url", required=True, help="Hub server URL e.g. https://your.blackduck.url")
49+
parser.add_argument("-t", "--token-file", dest='token_file', required=True, help="containing access token")
50+
parser.add_argument("-nv", "--no-verify", dest='verify', action='store_false', help="disable TLS certificate verification")
51+
args = parser.parse_args()
52+
53+
logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s', stream=sys.stderr, level=logging.DEBUG)
54+
logging.getLogger("requests").setLevel(logging.WARNING)
55+
logging.getLogger("urllib3").setLevel(logging.WARNING)
56+
logging.getLogger("blackduck").setLevel(logging.WARNING)
57+
58+
with open(args.token_file, 'r') as tf:
59+
access_token = tf.readline().strip()
60+
61+
bd = Client(
62+
base_url=args.base_url,
63+
token=access_token,
64+
verify=args.verify
65+
)
66+
67+
headers = {}
68+
projects = bd.get_resource('projects')
69+
70+
def get_user_name(url):
71+
if url:
72+
data = bd.get_json(url)
73+
return (data['userName'])
74+
else:
75+
return None
76+
77+
fieldnames = ['Project Name',
78+
'Project Owner',
79+
'Project Created By',
80+
'Project Updated By']
81+
82+
file_name = 'projects_by_owners.csv'
83+
84+
with open(file_name, 'w') as output:
85+
writer = csv.DictWriter(output, fieldnames=fieldnames)
86+
writer.writeheader()
87+
88+
for project in projects:
89+
project_name = project['name']
90+
project_owner = project.get('projectOwner', None)
91+
project_owner_name = get_user_name(project_owner)
92+
project_created_by = project.get('createdByUser', None)
93+
project_created_by_name = get_user_name(project_created_by)
94+
project_updated_by = project.get('updatedByUser', None)
95+
project_updated_by_name = get_user_name(project_updated_by)
96+
project_users = bd.get_resource('users', project)
97+
row = dict()
98+
row['Project Name'] = project_name
99+
row['Project Owner'] = project_owner_name
100+
row['Project Created By'] = project_created_by_name
101+
row['Project Updated By'] = project_updated_by_name
102+
writer.writerow(row)
103+
104+
logging.info(f"Output file {file_name} written")

0 commit comments

Comments
 (0)