#!/usr/bin/python3 """ Find out whether a UNI exists and is valid on dev or prod Grouper. Example: grouper_get_subject.py -m dev -u abc1234 """ import argparse import requests from requests.auth import HTTPBasicAuth import json import sys,string def grouperGetSubject(grouper_credentials, grouper_ws_uri, subject_name): result = grouperWSRequest(grouper_credentials, grouper_ws_uri+"/subjects/"+subject_name, "GET", None) return result def grouperWSRequest(grouper_credentials, url, method, body=None): """Send a request to the Grouper Web Service.""" try: response = requests.request(method, url, json=body, auth=grouper_credentials) response.raise_for_status() except requests.RequestException as e: raise SystemExit(e) from None return response.json() def get_subject(mode, uni): """Find out whether a UNI exists and is valid on dev or prod Grouper. Args: mode (str): The environment mode ('dev', 'prod'). uni (str): The UNI. """ # set the Grouper Web Service username and password grouper_username = 'abc1234' grouper_password = 'xxxxxxxxxxxxxxxxxxxx' grouper_credentials = HTTPBasicAuth(grouper_username,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' if mode == 'prod': grouper_ws_uri = prodGrouperURI else: grouper_ws_uri = devGrouperURI # Get subject info result = grouperGetSubject(grouper_credentials,grouper_ws_uri,uni) if not result: print(f"Unable to get information about {uni}") return result_block = result['WsGetSubjectsResults']['wsSubjects'][0] result_code = result_block['resultCode'] if result_code == 'SUCCESS': print(f"{uni} is a valid UNI on {mode} Grouper, name = {result_block['name']}") elif result_code == 'SUBJECT_NOT_FOUND': print(f"{uni} is not a valid UNI on {mode} Grouper") else: print(result_code) def main(): """Parses command-line arguments and calls get_subject.""" parser = argparse.ArgumentParser( description="Find out whether a UNI exists and is valid on dev or prod Grouper.", ) parser.add_argument( "-m", action="store", dest="mode", required=True, choices=["dev", "prod"], type=str.lower, help="the Grouper environment mode", ) parser.add_argument( "-u", action="store", dest="uni", required=True, help="the UNI", ) args = parser.parse_args() get_subject(args.mode, args.uni) if __name__ == "__main__": main()