Path: blob/main/L4assets/DSandMLOpsAssets/CLIandSDK/packages/cpdalllibs/commonlib/projectmgmt.py
1928 views
import requests1from cpdalllibs.commonlib.constants import *2import base643import subprocess45def getProject(headersAPI, guid, url=None, cpdaas=False) :6"""Get a project using a project id"""7if url is None :8url = WATSON_DATA_ENDPOINT9headersAPI['cpdaas-include-permissions'] = "true"10if url[-1] != "/" :11url = url + "/"12endpoint = url + 'v2/projects/{}'.format(guid)13resp = requests.get(endpoint, headers=headersAPI)14return(resp)1516def getProjects(headersAPI, url=None, account_id=None) :17"""Get a list of projects18The account_id is used in CPDaaS only19"""20if url == None :21url = WATSON_DATA_ENDPOINT + "/"22if 'cpdaas-include-permissions' not in headersAPI :23headersAPI['cpdaas-include-permissions'] = "true"24limit = 100 # maximum number of return values. Default 1025projects_json = []26projects = "v2/projects?include=everything&limit=100"27if account_id is not None :28projects = projects + "&bss_account_id={}".format(account_id)29headersAPI['cpdaas-include-permissions'] = "true"30loop=True31first = True32while loop :33if first is True :34resp = requests.get(url + projects, headers=headersAPI)35first = False36else :37resp = requests.get("{}{}&bookmark={}".format(url, projects, resp_json['bookmark']), headers=headersAPI)38if resp.status_code > 202 : # if error39print("Status code: {}, reason: {}".format(resp.status_code,resp.reason))40resp_json = resp.json()41if (resp_json['total_results'] == 0) :42loop = False43else :44projects_json.extend(resp_json['resources'])45return(projects_json)4647def getProjectMembers(headersAPI, url, id):48if 'cpdaas-include-permissions' not in headersAPI :49headersAPI['cpdaas-include-permissions'] = "true"50resp = requests.get(url + 'v2/projects/{}/members'.format(id),51headers=headersAPI)52return resp5354def addUserToProject(headersAPI, user_email, iam_id, project_id, role="editor"):55data = {56"members": [{57"role": role,58"state": "ACTIVE", # default "ACTIVE"59"id": iam_id,60"user_name": user_email61}]62}63if 'cpdaas-include-permissions' not in headersAPI :64headersAPI['cpdaas-include-permissions'] = "true"65resp = requests.post(WATSON_DATA_ENDPOINT + '/v2/projects/{}/members'.format(project_id),66json=data, headers=headersAPI)67return(resp)6869def addWMLToProject(headersAPI,project_id, ml) :70compute = [{71'type': "machine_learning", # From doc72'guid': ml['guid'],73'name': ml['name'],74'credentials': {},75'crn': ml['crn'] # optional76}]77payload = {78'compute': compute79}80if 'cpdaas-include-permissions' not in headersAPI :81headersAPI['cpdaas-include-permissions'] = "true"82resp = requests.patch(WATSON_DATA_ENDPOINT + '/v2/projects/{}'.format(project_id),83json=payload, headers=headersAPI)84return(resp)8586def deleteProjectMember(headersAPI, prj_id, email) :87if 'cpdaas-include-permissions' not in headersAPI :88headersAPI['cpdaas-include-permissions'] = "true"89resp = requests.delete(WATSON_DATA_ENDPOINT + '/v2/projects/{}/members/{}'.format(prj_id, email),90headers=headersAPI)91if resp.status_code > 204 : # if error92print("Status code: {}, reason: {}".format(resp.status_code,resp.reason))93return resp9495def cre8Project(headersAPI, project_desc, url=None):96payload = {97"name": project_desc["name"],98"generator": project_desc["generator"],99"storage": {100"type": project_desc['storage']['type'],101"guid": project_desc['storage']['guid'],102"delegated": False # default103},104"description": project_desc["description"],105"public": False, # default106"tags": ["project"],107"enforce_members": True,108"tools": ["jupyter_notebooks", "spss_modeler",109"experiments", "data_refinery"]110}111if project_desc['storage']['resource_key_crn'] is not None :112payload['storage']['resource_crn'] = project_desc['storage']['resource_key_crn']113if url is None :114url = WATSON_DATA_ENDPOINT115if url[-1] != "/" :116url = url + "/"117endpoint = url + 'transactional/v2/projects'118resp = requests.post(endpoint, json=payload, headers=headersAPI)119if resp.status_code > 204:120print("create_project: Status code: {}, reason: {}".format(121resp.status_code, resp.reason))122print(payload)123print(resp.text)124if resp.status_code > 220:125project_id = None126else:127resp_json = resp.json()128project_id = resp_json['location'].split('/')[-1]129# print(json.dumps(resp_json, indent=2, sort_keys=False))130return(project_id)131132def deleteProject(headersAPI, url=None, id=None) :133if url == None :134url = WATSON_DATA_ENDPOINT + "/"135if 'cpdaas-include-permissions' not in headersAPI :136headersAPI['cpdaas-include-permissions'] = "true"137resp = requests.delete(url + 'transactional/v2/projects/{}'.format(id),138headers=headersAPI)139return resp140141142143