#!/usr/bin/python2.7 # grouper_create_folder # create a folder import httplib2 import json import sys,string def usage(): print('usage: grouper_create_folder -f -g -n -d ') print('-f folder will be created in this parent folder') print('-g folder ID') print('-n folder name') print('-d folder description') exit(1) def main(): if len(sys.argv) != 9: usage() if sys.argv[1] != '-f': usage() parentFolder = sys.argv[2] if sys.argv[3] != '-g': usage() thisFolderId = sys.argv[4] if sys.argv[5] != '-n': usage() thisFolderName = sys.argv[6] if sys.argv[7] != '-d': usage() thisFolderDesc = sys.argv[8] thisFolder = parentFolder+':'+thisFolderId # initialize httplib2 http = httplib2.Http() # set the grouper URI (dev or prod), username, password grouper_ws_uri = grouperWSParameters(http) # give an error if the parent folder does not exist if grouperGetStemUuid(http,grouper_ws_uri,parentFolder) == 0: print(parentFolder + " folder does not exist") exit(1) # create a folder createFolder = grouperCreateFolder(http,grouper_ws_uri,parentFolder,thisFolderId,thisFolderName,thisFolderDesc) if createFolder and createFolder['WsStemSaveResults']['resultMetadata']['resultCode'] == 'SUCCESS': resultString = createFolder['WsStemSaveResults']['results'][0]['resultMetadata']['resultCode'] if resultString == 'SUCCESS_NO_CHANGES_NEEDED': print(thisFolder + " folder already exists, no changes needed") elif resultString == 'SUCCESS_INSERTED': print(thisFolder + " folder created") else: print(thisFolder + " folder created, " + resultString) else: print("unable to create " + thisFolder) def grouperCreateFolder(http, grouper_ws_uri, parentIdPath, folderId, folderName, folderDescription): # create folder folderIdPath = parentIdPath+':'+folderId body = { "WsRestStemSaveRequest":{ "wsStemToSaves":[ { "wsStemLookup":{ "stemName": folderIdPath }, "wsStem":{ "extension": folderId, "displayExtension": folderName, "name": folderIdPath, "description": folderDescription } } ] } } result = grouperWSRequest(http, grouper_ws_uri+"/stems", "POST", body) return result def grouperGetStemUuid(http, grouper_ws_uri, folderName): # get UUID for the specified stem thisuuid = 0 body = { "WsRestFindStemsRequest": { "wsStemQueryFilter": { "stemName": folderName, "stemQueryFilterType": "FIND_BY_STEM_NAME" } } } findStems = grouperWSRequest(http, grouper_ws_uri + "/stems", "POST", body) if findStems and findStems['WsFindStemsResults']['resultMetadata']['success']: stemList = findStems['WsFindStemsResults']['stemResults'] if len(stemList) == 1: thisuuid = findStems['WsFindStemsResults']['stemResults'][0]['uuid'] return thisuuid def grouperWSRequest(http, url, method, body): # send a request to the Grouper Web Service # method can be GET, POST, or PUT content_type = 'application/x-www-form-urlencoded' if method == "POST" or method == "PUT": content_type = 'text/x-json; charset=UTF-8' try: resp, content = http.request(uri=url, method=method, body=json.dumps(body), headers={'Content-Type': content_type}) if resp.status == 200 or resp.status == 201: result = json.loads(content.decode('utf-8')) return result except httplib2.ServerNotFoundError as err: print("Unable to connect to Grouper Web Service") print(err) return None # http request failed, print the response status and content print("http response status "+str(resp.status)) print("http response content "+content) return None def grouperWSParameters(http): # set the Grouper Web Service username and password grouper_username = 'abc1234' grouper_password = 'xxxxxxxxxxxxxxxxxxxx' http.add_credentials(name=grouper_username, password=grouper_password) # the Grouper Web Service URI should point to dev or prod Grouper devGrouperURI = 'https://grouper-dev.cc.columbia.edu/grouper-ws/servicesRest/v2_4_000' prodGrouperURI = 'https://grouper.cc.columbia.edu/grouper-ws/servicesRest/v2_4_000' return devGrouperURI if __name__ == '__main__': main()