Advertisement
Guest User

Untitled

a guest
Apr 7th, 2020
442
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 12.06 KB | None | 0 0
  1.         elif manifest["job_type"] == 'write':
  2.             # Four record types (Users, Courses, Sections, Enrolments) and each will have different job types
  3.             if manifest['recordtype'] == 'Users':
  4.                 job_status = "success"
  5.                 updated_records = []
  6.                 resp = requests.request("GET", manifest["core_config"]["core_api_url"], headers={
  7.                     "Content-Type": "application/json",
  8.                     "X-Secret": manifest["token"],
  9.                     "job_id": str(manifest["job_id"]),
  10.                     "tenant_id": manifest["tenant_id"]
  11.                 })
  12.  
  13.                 if resp.status_code < 300:
  14.                     job = resp.content.decode()
  15.                     job = json.loads(job)
  16.                     logger.info("records to write: " + json.dumps(job, indent=4, sort_keys=True))
  17.  
  18.                     api_key = manifest["connector_config"]["api_key"]["value"]
  19.  
  20.                     if "records" in job.keys():
  21.                         for record in job["records"]:
  22.                             user_id = str(record["data"]["user_id"])
  23.                             if record["action"] == "delete":
  24.                                 # check delete_enabled parameter and keep the data as is if parameter is set as false
  25.                                 if manifest["job_parameters"]["delete_enabled"] == "false":
  26.                                     continue
  27.                                 api_url = manifest["connector_config"]["api_url"]["value"] + \
  28.                                           "/api/v1/accounts/self/users/sis_user_id:" + user_id
  29.                                 response = perform_api_call("DELETE", api_url, api_key)
  30.                                 error = None
  31.  
  32.                                 if response.status_code < 400:
  33.                                     logger.info("delete user API call: "
  34.                                                 + str(response.request.method) + " " + str(response.request.url))
  35.                                     logger.info("delete user response status code: " + str(response.status_code))
  36.                                     logger.info("delete user response content: " +
  37.                                                 json.dumps(response.content.decode(), indent=4, sort_keys=True))
  38.                                 else:
  39.                                     logger.error("delete user API call: "
  40.                                                  + str(response.request.method) + " " + str(response.request.url))
  41.                                     logger.error("delete user response status code: " + str(response.status_code))
  42.                                     logger.error("delete user response content: " + str(response.content.decode()))
  43.                                     error = str(response.status_code)
  44.  
  45.                                 record["error"] = error  # None or actual error
  46.                                 updated_records.append(record)
  47.  
  48.                             elif record["action"] == "create":
  49.                                 api_url = manifest["connector_config"]["api_url"]["value"] + \
  50.                                           "/api/v1/accounts/self/users"
  51.  
  52.                                 first_name = record["data"]["first_name"]
  53.                                 last_name = record["data"]["last_name"]
  54.  
  55.                                 payload = {
  56.                                     "user": {
  57.                                         "name": first_name + " " + last_name,
  58.                                         "sortable_name": last_name + ", " + first_name,
  59.                                         "short_name": first_name + " " + last_name,
  60.                                         "skip_registration": "True"
  61.                                     },
  62.                                     "pseudonym": {
  63.                                         "send_confirmation": "False",
  64.                                         "path": record["data"]["email"],
  65.                                         "unique_id": record["data"]["login_id"],
  66.                                         "sis_user_id": record["data"]["user_id"]
  67.                                     }
  68.                                 }
  69.  
  70.                                 response = requests.request("POST", api_url,
  71.                                     headers={
  72.                                         "Authorization": "Bearer %s" % api_key,
  73.                                         "Content-Type": "application/json"
  74.                                     },
  75.                                     params=payload
  76.                                 )
  77.  
  78.                                 error = None
  79.                                 if response.status_code < 400:
  80.                                     logger.info("create user API call: "
  81.                                                 + str(response.request.method) + " " + str(response.request.url))
  82.                                     logger.info("create user response status code: " + str(response.status_code))
  83.                                     logger.info("create user response content: " +
  84.                                                 json.dumps(response.content.decode(), indent=4, sort_keys=True))
  85.                                 else:
  86.                                     logger.error("create user API call: "
  87.                                                  + str(response.request.method) + " " + str(response.request.url))
  88.                                     logger.error("create user response status code: " + str(response.status_code))
  89.                                     logger.error("create user response content: " + str(response.content.decode()))
  90.                                     error = str(response.status_code)
  91.  
  92.                                 record["error"] = error  # None or actual error
  93.                                 updated_records.append(record)
  94.  
  95.                             elif record["action"] == "update":
  96.                                 # update user and also the login
  97.                                 api_url = manifest["connector_config"]["api_url"]["value"] + \
  98.                                           "/api/v1/users/sis_user_id:" + user_id
  99.  
  100.                                 first_name = record["data"]["first_name"]
  101.                                 last_name = record["data"]["last_name"]
  102.  
  103.                                 payload = {
  104.                                     "user": {
  105.                                         "name": first_name + " " + last_name,
  106.                                         "sortable_name": last_name + ", " + first_name,
  107.                                         "short_name": first_name + " " + last_name,
  108.                                         "email": record["data"]["email"]
  109.                                     }
  110.                                 }
  111.  
  112.                                 response = requests.request("PUT", api_url,
  113.                                     headers={
  114.                                         "Authorization": "Bearer %s" % api_key,
  115.                                         "Content-Type": "application/json"
  116.                                     },
  117.                                     params=payload
  118.                                 )
  119.  
  120.                                 error = None
  121.                                 if response.status_code < 400:
  122.                                     logger.info("update user API call: " + str(response.request.method) + " "
  123.                                                 + str(response.request.url))
  124.                                     logger.info("update user response status code: " + str(response.status_code))
  125.                                     logger.info("update user response content: " +
  126.                                                 json.dumps(response.content.decode(), indent=4, sort_keys=True))
  127.                                 else:
  128.                                     logger.error("update user API call: "
  129.                                                  + str(response.request.method) + " " + str(response.request.url))
  130.                                     logger.error("update user response status code: " + str(response.status_code))
  131.                                     logger.error("update user response content: " + str(response.content.decode()))
  132.                                     error = str(response.status_code)
  133.  
  134.                                 record["error"] = error
  135.                                 updated_records.append(record)
  136.  
  137.                                 # update the login / unique_id (first get the login id)
  138.                                 get_login_id_url = manifest["connector_config"]["api_url"]["value"] + \
  139.                                                   "/api/v1/users/sis_user_id:" + user_id + "/logins"
  140.                                 get_login = perform_api_call("GET", get_login_id_url, api_key)
  141.                                 if get_login.status_code < 400:
  142.                                     content = json.loads(get_login.content.decode())  # returns list
  143.                                     login_id = str(content[0]["id"])
  144.                                 else:
  145.                                     logger.error("get login ID API call: "
  146.                                                  + str(get_login.request.method) + " " + str(get_login.request.url))
  147.                                     logger.error("get login ID response status code: " + str(get_login.status_code))
  148.                                     logger.error("get login ID response content: "
  149.                                                  + str(get_login.content.decode()))
  150.                                     return {"error": {"canvas api status_code": str(get_login.status_code)}}
  151.  
  152.                                 api_url = manifest["connector_config"]["api_url"]["value"] + \
  153.                                           "/api/v1/accounts/self/logins/" + login_id
  154.  
  155.                                 payload = {
  156.                                     "login": {
  157.                                         "unique_id": record["data"]["login_id"],
  158.                                         "sis_user_id": record["data"]["user_id"]
  159.                                     }
  160.                                 }
  161.  
  162.                                 response = requests.request("PUT", api_url,
  163.                                     headers={
  164.                                         "Authorization": "Bearer %s" % api_key,
  165.                                         "Content-Type": "application/json"
  166.                                     },
  167.                                     params=payload
  168.                                 )
  169.  
  170.                                 error = None
  171.                                 if response.status_code < 400:
  172.                                     logger.info("update user login API call: " + str(response.request.method) + " "
  173.                                                 + str(response.request.url))
  174.                                     logger.info("update user login response status code: " + str(response.status_code))
  175.                                     logger.info("update user login response content: " +
  176.                                                 json.dumps(response.content.decode(), indent=4, sort_keys=True))
  177.                                 else:
  178.                                     logger.error("update user login API call: "
  179.                                                  + str(response.request.method) + " " + str(response.request.url))
  180.                                     logger.error("update user login response status code: " + str(response.status_code))
  181.                                     logger.error("update user login response content: "
  182.                                                  + str(response.content.decode()))
  183.                                     error = str(response.status_code)
  184.                                
  185.                                 record["error"] = error  # None or actual error
  186.                                 updated_records.append(record)
  187.  
  188.                 else:
  189.                     return {"error": {"core_api_status_code": str(resp.status_code)}}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement