|
| 1 | +#!/usr/bin/env python |
| 2 | + |
| 3 | +import argparse |
| 4 | +import json |
| 5 | +import csv |
| 6 | +import logging |
| 7 | +import sys |
| 8 | + |
| 9 | +from blackduck.HubRestApi import HubInstance |
| 10 | + |
| 11 | + |
| 12 | +parser = argparse.ArgumentParser("Retreive BOM component license information for the given project and version") |
| 13 | +parser.add_argument("project_name") |
| 14 | +parser.add_argument("version") |
| 15 | + |
| 16 | +args = parser.parse_args() |
| 17 | + |
| 18 | + |
| 19 | +hub = HubInstance() |
| 20 | + |
| 21 | +project = hub.get_project_by_name(args.project_name) |
| 22 | +version = hub.get_version_by_name(project, args.version) |
| 23 | + |
| 24 | +bom_components = hub.get_version_components(version) |
| 25 | + |
| 26 | +all_origins = dict() |
| 27 | + |
| 28 | +logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s', stream=sys.stderr, level=logging.DEBUG) |
| 29 | +logging.getLogger("requests").setLevel(logging.WARNING) |
| 30 | +logging.getLogger("urllib3").setLevel(logging.WARNING) |
| 31 | + |
| 32 | +all_origin_info = {} |
| 33 | +components_info = [["Component Name", "Component Version" ,"Homepage", "Approval Status", "Component ID", "Component Version ID", "License"]] |
| 34 | + |
| 35 | +for bom_component in bom_components['items']: |
| 36 | + component_url = bom_component['component'] |
| 37 | + response = hub.execute_get(component_url) |
| 38 | + |
| 39 | + # Component details include the home page url and additional home pages |
| 40 | + logging.debug("Retrieving component home page info for {}:{}".format( |
| 41 | + bom_component.get("componentName"), bom_component.get("componentVersionName"))) |
| 42 | + component_details = None |
| 43 | + if response.status_code == 200: |
| 44 | + component_details = response.json() |
| 45 | + |
| 46 | + for origin in bom_component.get('origins', []): |
| 47 | + logging.debug("Retrieving origin details for origin {}".format(origin['name'])) |
| 48 | + origin_url = hub.get_link(origin, 'origin') |
| 49 | + response = hub.execute_get(origin_url) |
| 50 | + origin_details = None |
| 51 | + if response.status_code == 200: |
| 52 | + origin_details = response.json() |
| 53 | + |
| 54 | + all_origin_info.update({ |
| 55 | + "{}:{}".format(bom_component['componentName'], bom_component['componentVersionName']): { |
| 56 | + "component_details": component_details, |
| 57 | + "component_home_page": component_details.get("url"), |
| 58 | + "additional_home_pages": component_details.get("additionalHomepages"), |
| 59 | + "origin_details": origin_details, |
| 60 | + } |
| 61 | + }) |
| 62 | + #component_info = [bom_component['componentName'], bom_component['componentVersionName'], component_details.get("url"), component_details['approvalStatus'], bom_component['component'], bom_component['componentVersion'], origin_details['license']['licenseDisplay']] |
| 63 | + component_info = [bom_component.get("componentName"), bom_component.get("componentVersionName"), component_details.get("url"), bom_component.get("approvalStatus"), bom_component.get("component"), bom_component.get("componentVersion"), origin_details.get('license').get("licenseDisplay")] |
| 64 | + components_info.append(component_info) |
| 65 | + |
| 66 | +mycsv = csv.writer(open(r'Report.csv', 'w'), lineterminator='\n') |
| 67 | +for row in components_info: |
| 68 | + if any(row): |
| 69 | + mycsv.writerow(row) |
| 70 | +print("Report.csv is successfully generated") |
| 71 | +#print(json.dumps(all_origin_info)) |
| 72 | + |
0 commit comments