Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- elif manifest["job_type"] == 'write':
- # Four record types (Users, Courses, Sections, Enrolments) and each will have different job types
- if manifest['recordtype'] == 'Users':
- job_status = "success"
- updated_records = []
- resp = requests.request("GET", manifest["core_config"]["core_api_url"], headers={
- "Content-Type": "application/json",
- "X-Secret": manifest["token"],
- "job_id": str(manifest["job_id"]),
- "tenant_id": manifest["tenant_id"]
- })
- if resp.status_code < 300:
- job = resp.content.decode()
- job = json.loads(job)
- logger.info("records to write: " + json.dumps(job, indent=4, sort_keys=True))
- api_key = manifest["connector_config"]["api_key"]["value"]
- if "records" in job.keys():
- for record in job["records"]:
- user_id = str(record["data"]["user_id"])
- if record["action"] == "delete":
- # check delete_enabled parameter and keep the data as is if parameter is set as false
- if manifest["job_parameters"]["delete_enabled"] == "false":
- continue
- api_url = manifest["connector_config"]["api_url"]["value"] + \
- "/api/v1/accounts/self/users/sis_user_id:" + user_id
- response = perform_api_call("DELETE", api_url, api_key)
- error = None
- if response.status_code < 400:
- logger.info("delete user API call: "
- + str(response.request.method) + " " + str(response.request.url))
- logger.info("delete user response status code: " + str(response.status_code))
- logger.info("delete user response content: " +
- json.dumps(response.content.decode(), indent=4, sort_keys=True))
- else:
- logger.error("delete user API call: "
- + str(response.request.method) + " " + str(response.request.url))
- logger.error("delete user response status code: " + str(response.status_code))
- logger.error("delete user response content: " + str(response.content.decode()))
- error = str(response.status_code)
- record["error"] = error # None or actual error
- updated_records.append(record)
- elif record["action"] == "create":
- api_url = manifest["connector_config"]["api_url"]["value"] + \
- "/api/v1/accounts/self/users"
- first_name = record["data"]["first_name"]
- last_name = record["data"]["last_name"]
- payload = {
- "user": {
- "name": first_name + " " + last_name,
- "sortable_name": last_name + ", " + first_name,
- "short_name": first_name + " " + last_name,
- "skip_registration": "True"
- },
- "pseudonym": {
- "send_confirmation": "False",
- "path": record["data"]["email"],
- "unique_id": record["data"]["login_id"],
- "sis_user_id": record["data"]["user_id"]
- }
- }
- response = requests.request("POST", api_url,
- headers={
- "Authorization": "Bearer %s" % api_key,
- "Content-Type": "application/json"
- },
- params=payload
- )
- error = None
- if response.status_code < 400:
- logger.info("create user API call: "
- + str(response.request.method) + " " + str(response.request.url))
- logger.info("create user response status code: " + str(response.status_code))
- logger.info("create user response content: " +
- json.dumps(response.content.decode(), indent=4, sort_keys=True))
- else:
- logger.error("create user API call: "
- + str(response.request.method) + " " + str(response.request.url))
- logger.error("create user response status code: " + str(response.status_code))
- logger.error("create user response content: " + str(response.content.decode()))
- error = str(response.status_code)
- record["error"] = error # None or actual error
- updated_records.append(record)
- elif record["action"] == "update":
- # update user and also the login
- api_url = manifest["connector_config"]["api_url"]["value"] + \
- "/api/v1/users/sis_user_id:" + user_id
- first_name = record["data"]["first_name"]
- last_name = record["data"]["last_name"]
- payload = {
- "user": {
- "name": first_name + " " + last_name,
- "sortable_name": last_name + ", " + first_name,
- "short_name": first_name + " " + last_name,
- "email": record["data"]["email"]
- }
- }
- response = requests.request("PUT", api_url,
- headers={
- "Authorization": "Bearer %s" % api_key,
- "Content-Type": "application/json"
- },
- params=payload
- )
- error = None
- if response.status_code < 400:
- logger.info("update user API call: " + str(response.request.method) + " "
- + str(response.request.url))
- logger.info("update user response status code: " + str(response.status_code))
- logger.info("update user response content: " +
- json.dumps(response.content.decode(), indent=4, sort_keys=True))
- else:
- logger.error("update user API call: "
- + str(response.request.method) + " " + str(response.request.url))
- logger.error("update user response status code: " + str(response.status_code))
- logger.error("update user response content: " + str(response.content.decode()))
- error = str(response.status_code)
- record["error"] = error
- updated_records.append(record)
- # update the login / unique_id (first get the login id)
- get_login_id_url = manifest["connector_config"]["api_url"]["value"] + \
- "/api/v1/users/sis_user_id:" + user_id + "/logins"
- get_login = perform_api_call("GET", get_login_id_url, api_key)
- if get_login.status_code < 400:
- content = json.loads(get_login.content.decode()) # returns list
- login_id = str(content[0]["id"])
- else:
- logger.error("get login ID API call: "
- + str(get_login.request.method) + " " + str(get_login.request.url))
- logger.error("get login ID response status code: " + str(get_login.status_code))
- logger.error("get login ID response content: "
- + str(get_login.content.decode()))
- return {"error": {"canvas api status_code": str(get_login.status_code)}}
- api_url = manifest["connector_config"]["api_url"]["value"] + \
- "/api/v1/accounts/self/logins/" + login_id
- payload = {
- "login": {
- "unique_id": record["data"]["login_id"],
- "sis_user_id": record["data"]["user_id"]
- }
- }
- response = requests.request("PUT", api_url,
- headers={
- "Authorization": "Bearer %s" % api_key,
- "Content-Type": "application/json"
- },
- params=payload
- )
- error = None
- if response.status_code < 400:
- logger.info("update user login API call: " + str(response.request.method) + " "
- + str(response.request.url))
- logger.info("update user login response status code: " + str(response.status_code))
- logger.info("update user login response content: " +
- json.dumps(response.content.decode(), indent=4, sort_keys=True))
- else:
- logger.error("update user login API call: "
- + str(response.request.method) + " " + str(response.request.url))
- logger.error("update user login response status code: " + str(response.status_code))
- logger.error("update user login response content: "
- + str(response.content.decode()))
- error = str(response.status_code)
- record["error"] = error # None or actual error
- updated_records.append(record)
- else:
- return {"error": {"core_api_status_code": str(resp.status_code)}}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement