diff --git a/.gitignore b/.gitignore index 894a44cc..d7d910e7 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,5 @@ venv.bak/ # mypy .mypy_cache/ +/.idea/ +/examples/.restconfig.json diff --git a/blackduck/HubRestApi.py b/blackduck/HubRestApi.py index 4bac9e36..ecb8c121 100755 --- a/blackduck/HubRestApi.py +++ b/blackduck/HubRestApi.py @@ -697,6 +697,7 @@ def get_projects(self, limit=100, parameters={}): headers['Accept'] = 'application/vnd.blackducksoftware.project-detail-4+json' logger.debug(f"Retrieving projects using url {url}") response = requests.get(url, headers=headers, verify = not self.config['insecure']) + ## @SMELL need to gracfully handle not finding the project jsondata = response.json() return jsondata @@ -1255,6 +1256,32 @@ def get_project_info(self, project_name, link_name): else: return {} # nada + def get_project_violation_status(self, project_name, version): + + project = self.get_project_by_name(project_name) + if (project is None): + logging.debug("Project " + project_name + " not found") + return ("NO_PROJECT") + + link = self.get_link(project, "versions") + if link: + response = self.execute_get(link) + if response.status_code == 200: + versions_list = json.loads(response.text) + for version_item in versions_list['items']: + logging.debug("Got version in file "+version_item['versionName']) + if version == 'empty': + version = version_item['versionName'] + if version_item['versionName'] == version: + logging.debug("Found " + version) + return version_item['policyStatus'] + else: + return ("VERSION_NOT_SCANNED") + else: + return ("SERVER_NOT_RETURNED_200") + else: + return {} # nada + def get_project_roles(self): all_project_roles = self.get_roles(parameters={"filter":"scope:project"}) return all_project_roles['items'] diff --git a/examples/get_project.py b/examples/get_project.py index e81df058..6c712256 100644 --- a/examples/get_project.py +++ b/examples/get_project.py @@ -34,7 +34,7 @@ project = hub.get_project_by_name(args.project_name) -print(json.dumps(project)) +print(json.dumps(project, indent=4, sort_keys=True)) if args.link: - print(json.dumps(hub.get_project_info(args.project_name, args.link))) \ No newline at end of file + print(json.dumps(hub.get_project_info(args.project_name, args.link), indent=4)) \ No newline at end of file diff --git a/examples/get_project_violations.py b/examples/get_project_violations.py new file mode 100644 index 00000000..93845e84 --- /dev/null +++ b/examples/get_project_violations.py @@ -0,0 +1,32 @@ +''' +Created on Nov 14, 2018 + +@author: gsnyder + +Print a project given its name + +''' + +from blackduck.HubRestApi import HubInstance + +import argparse +import json + +parser = argparse.ArgumentParser(description='Use this to check the status of a given version for a given project. If no version is given then it will return the status of the highest version.') + +parser.add_argument("--limit") +parser.add_argument("project_name") +parser.add_argument("--version", default="empty", help="If provided, will result in if that version passed policy check") + +args = parser.parse_args() + +hub = HubInstance() + +status=hub.get_project_violation_status(args.project_name, args.version) +print(status) +if(status == "IN_VIOLATION"): + exit(0) +elif(status == "NOT_IN_VIOLATION"): + exit(0) +else: + exit(0) diff --git a/examples/purge.py b/examples/purge.py index 39300e1e..f5d01990 100644 --- a/examples/purge.py +++ b/examples/purge.py @@ -19,20 +19,20 @@ print ("total projects found: %s" % projects['totalCount']) for project in projects['items']: - print (project['name']) + print(project['name']) versions = hub.get_project_versions(project) - print ("\t versions found %s" % versions['totalCount']) + print("\t versions found %s" % versions['totalCount']) versionlist = versions['items'] if len(versionlist) == 1: continue for index in range(len(versionlist) - 1): - print ("index is ".format(index)) + print("index is ".format(index)) va = versionlist[index] components = hub.get_version_components(va) codelocations = hub.get_version_codelocations(va) # hub.execute_delete(va['_meta']['href']) - print ("version {} has {} codelocations".format(va['versionName'], codelocations['totalCount'])) - if codelocations > 0: + print("version {} has {} codelocations".format(va['versionName'], codelocations['totalCount'])) + if codelocations['totalCount'] > 0: for codelocation in codelocations['items']: print (codelocation['_meta']['href']) locationid = codelocation['_meta']['href'].split("/")[5]