From 45f1f32b3b4606c1f9228a8bf8eaf0be5e38645f Mon Sep 17 00:00:00 2001 From: Norm Rasmussen Date: Thu, 3 Nov 2022 21:06:46 -0400 Subject: [PATCH] DV,Walmart, API Tests --- CustomerNotes/DoubleVerify.md | 74 ++++++--------- Scripts/API_Tests/api_test.py | 44 +++++++++ Scripts/API_Tests/console_medialib.html | 38 ++++++++ Scripts/AddGroupsUsers/addgroup_users.py | 84 ++++++++---------- Timetagger/_timetagger/users/norm~bm9ybQ==.db | Bin 155648 -> 159744 bytes Todos.md | 5 -- 6 files changed, 145 insertions(+), 100 deletions(-) create mode 100644 Scripts/API_Tests/api_test.py create mode 100644 Scripts/API_Tests/console_medialib.html diff --git a/CustomerNotes/DoubleVerify.md b/CustomerNotes/DoubleVerify.md index 609c92b6..ce15d0f4 100644 --- a/CustomerNotes/DoubleVerify.md +++ b/CustomerNotes/DoubleVerify.md @@ -1,7 +1,6 @@ # DoubleVerify - google sheets formula to add True/False to a cell if previous cell has a DV email or not - =IF(REGEXMATCH(B4, "@doubleverify"), True, False) - * Request from Rachel for Custom Report via Looker · Date Range: Last 30 Days · Learner Name @@ -9,7 +8,8 @@ · Course Progress · Course Name -## Demo with Mark Protus +## 7/14/2022 +### Demo with Mark Protus Integration with LI Learning Wants to stay within LMS and consume LinkedIn Learning content Build learning paths using linked in cirricula and them make them availble within Northpass @@ -17,7 +17,8 @@ Utilize BBHR integration COmpliance training would be via LinkedIn Learning and Traliant Know4 bet -## Meeting with Mark Protus, New SVP of L&D +## 7/18/2022 +### Meeting with Mark Protus, New SVP of L&D Questions about usability Do we have a common database or individual databases per customer? - common @@ -53,7 +54,8 @@ How to check in analytics He wants to add timeframe for when they have to complete next training? Quizzes - how can we take out SCORM data -## Siying Mark SCORM Asks +## 7/21/2022 +### Siying Mark SCORM Asks Embedding Questions regarding SCORM files - They want to see what quick solutions there are to adding a RISE course in Northpass - Want to start creating those courses in RISE @@ -74,46 +76,26 @@ Embedding Questions regarding SCORM files * Question from Mark - .corp and .com issues with Okta - - - -## Siying regarding Mark & Temperature Check -- Big Focus is scalability -- Moving tom Storyline to Rise - * Not all courses will be going to Rise - * Need customizability on course-based full screen settings SCORM - * This would be very impactful -- Mark could be concerned about the Rise courses being a better experience for learners -- Siying raised ticket regarding full screen with SCORM files -- Second thing, how to enable people managers? - * The ppl manager will have more responsibility for their employees journey - * No organizational structure in NP - * HR Ops should be joining the learning team - * If BBHR was connected to Okta, the learner account would be messed up - * Those people should have a dashboard to see how the team is doing - * A learner's dashboard - like what they need to complete, etc - * Eric previously told them it would be extra money, this was before they were enterprise - * They have some courses with credentials, but it isn't visualized - * How to visualize their certs and completions etc - * Checklist for the learners too -- Third thing, Data Collection and Specificty - * Collecting data from SCORM package, they want more details - * How can they collaborate the SCORM functionality into Northpass Data - * Currently, they can create Northpass quizzes, but it needs to be shared with external stakeholders - * They don't like scheduled reporting? - * The team that recieves the reports prefers survey monkey - * How to quickly generate data and more robust data points - * Faster insights - more vizualisations - * This is to share with others that don't have backend access - * The admin dash for a manager is too confusing, it needs to be simpler - * Maybe not going into the backend, but an easier way to share this information - * Example: Survey Monkey has a link where you can share a link that has analytics easily available - * The link is dynamic and you don't have to update the content everytime to send it along - * Graphics are automated in the background of SurveyMonkey - * Siying is getting pressure from others to use SurveyMonkey as the standard approach for learning and assesments - * Data Privacy for SurveyMonkey, is it safe to share? - -Mark wants to use Rise more. With all the above and the full-screen settings with Rise is making it harder to use the table of contents, then with all the layout, and then the assesment outside of the SCORM package feels jarring - -## Okta Errors -Who should be on the call - Sowmya, Yoav, Lukasz +## 11/3/2022 +### Temp Check with Siying +* The entire company is really just focused on data +* Getting more Data to stakeholders and to the right people +* How can Siying's team empower managers to collect their own data? +* Content is also building very quickly and the content is very tailored to specific people. +* Not easy to create new groups and add people. No cloning of courses. +* More people are involved with Rise Development and Creating Courses. +* Rise & Northpass are not really compatible, nor is SCORM in general. +* To allow the hiding of TOC, DV has to raise a ticket to Northpass to request it. This is done on a case by case basis. +* They want more control over everything. Everything is a workaround. They want to be able to quickly change things. +* Siying doesn't always get prep time for things, so it doesn't behoove her to submit a ticket etc. +* A lot of courses assigned to a lot of different people, multiple pages of courses. +* Cannot filter courses well, especially when resetting course progress. They have to change the course name temporarily to something that starts with A so that it shows up higher in the list. +* All the dropdowns are not user friendly because with long lists, it is glitchy and doesn't show all the courses. +* SCORM Pacages hurdles: + * They can't easily add SCORM packages to the course because it doesn't show up in alphabetical order + * The names are not easily readable, you have to scroll very carefully to find the right course. +* Siying is literally preventing her boss from using Northpass so he doesn't throw it out of the window before the contract is over. +* They have a new VP of Talent Management with them onsite and they will know by next week if they are keeping Northpass or not. +* They are currently in budgeting season. +* Next sync in 2 weeks. diff --git a/Scripts/API_Tests/api_test.py b/Scripts/API_Tests/api_test.py new file mode 100644 index 00000000..92beeaf8 --- /dev/null +++ b/Scripts/API_Tests/api_test.py @@ -0,0 +1,44 @@ +import requests + +apiKey = "SlpQlju219WnWogn94dQUT6Yt" +url = "https://api.northpass.com/v1/media" +#function = sys.argv[1] + +def putTest(apiKey, url): + + payload = { + "data": + { + "type":"media", + "file_name":"/Users/normrasmussen/Downloads/Shopping&Delivery 9 XP.mp4", + } + } + headers = { + "accept": "application/json", + "content-type": "application/json", + "X-Api-Key": apiKey, + } + response = requests.put(url, json=payload, headers=headers) + print(response.text) + +def getTest(apiKey,url): + headers = { + "accept": "application/json", + "X-Api-Key": apiKey + } + response = requests.get(url, headers=headers) + print(response.text) + +def postTest(apiKey, url): + headers = { + "accept": "application/json", + "content-type": "application/json", + "X-Api-Key": apiKey + } + response = requests.post(url, headers=headers) + print(response.text) + +if __name__ == "__main__": + getTest(apiKey, url) + #putTest(apiKey, url) + #postTest(apiKey, url) diff --git a/Scripts/API_Tests/console_medialib.html b/Scripts/API_Tests/console_medialib.html new file mode 100644 index 00000000..4a1171ad --- /dev/null +++ b/Scripts/API_Tests/console_medialib.html @@ -0,0 +1,38 @@ +
+ diff --git a/Scripts/AddGroupsUsers/addgroup_users.py b/Scripts/AddGroupsUsers/addgroup_users.py index 8813006b..432f157e 100644 --- a/Scripts/AddGroupsUsers/addgroup_users.py +++ b/Scripts/AddGroupsUsers/addgroup_users.py @@ -3,11 +3,13 @@ import sys import http import pandas as pd -apiKey = "SlpQlju219WnWogn94dQUT6Yt" -#groupName = sys.argv[1] -peopleCsv = "/Users/normrasmussen/Downloads/peopletogroups.csv" +# Enter your API Key between the quotation marks. +apiKey = "" +groupName = sys.argv[1] +peopleCsv = "/path/to/file/peopletogroups.csv" def createGroup(groupName, apiKey): + #apiKey = input("What is your API Key? ") # Create a Group endpoint - params: group_uuid url = "https://api.northpass.com/v2/groups" payload = {"data": {"attributes": {"name": f"{groupName}"}}} @@ -40,58 +42,42 @@ def getgroupId(people, groupresponse, apiKey): ppltoGroup(people, groupID, apiKey) def ppltoGroup(people, groupID, apiKey): - print(groupID) - - # Add People to a Group. Params needed: group_uuid - url = f"https://api.northpass.com/v2/groups/{groupID}/relationships/people" - # Loop through this payload and/or add everyone as new { "type":"people", "id":"uuid"} - #for uuid in people: - # itempayload = [] - # jsonpayload = { "type":"people", "id":uuid }, - # itempayload.append(jsonpayload) - payload = {"data": [ + for uuid in people: + payload = {"data": [ { "type":"people", - "id":people + "id":uuid }, - # { "type":"people", "id":people[1]}, - # { "type":"people", "id":people[2]}, - ]} + # Add People to a Group. Params needed: group_uuid + url = f"https://api.northpass.com/v2/groups/{groupID}/relationships/people" + headers = { + "accept": "*/*", + "content-type": "application/json", + "X-Api-Key": apiKey + } + response = requests.post(url, json=payload, headers=headers) + if "404" in response.text: + print("Error returned for this user. Collecting names.") + errorNames(apiKey, uuid) + else: + pass + +def errorNames(apiKey, uuid): + url = f"https://api.northpass.com/v2/people/{uuid}" headers = { - "accept": "*/*", - "content-type": "application/json", + "accept": "application/json", "X-Api-Key": apiKey } - print(url) - print(payload) - print(headers) - response = requests.post(url, json=payload, headers=headers) - print(response.text) + response = requests.get(url, headers=headers) + response = response.json() + errorList = [] + names = response["data"]["attributes"]["full_name"] + errorList.append(names) + fullNames(errorList) + +def fullNames(errorList): + print(errorList) if __name__ == "__main__": - ppltoGroup(people="0b31c435-c18b-4573-984e-32cda57045b4", groupID="4f83841f-939f-469f-b98f-29ce7f980c6e",apiKey="SlpQlju219WnWogn94dQUT6Yt") - #createGroup(groupName, apiKey) - - - url = "https://api.northpass.com/v2/groups/4c2e807c-2b65-4ce7-a359-2e470fe4f322/relationships/people" - -payload = {"data": [ - { - "type": "people", - "id": "0b31c435-c18b-4573-984e-32cda57045b4" - }, - { - "type": "people", - "id": "0b31c435-c18b-4573-984e-32cda57045b4" - } - ]} -headers = { - "accept": "*/*", - "content-type": "application/json", - "X-Api-Key": "SlpQlju219WnWogn94dQUT6Yt" -} - -response = requests.post(url, json=payload, headers=headers) - -print(response.text) + createGroup(groupName, apiKey) diff --git a/Timetagger/_timetagger/users/norm~bm9ybQ==.db b/Timetagger/_timetagger/users/norm~bm9ybQ==.db index daf6b100c691525255444f470a0440d3aa6c7095..bd87612d0b60121183962cf3f615948e5e9373df 100644 GIT binary patch delta 5291 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