diff --git a/app/graphql/graphql.py b/app/graphql/graphql.py index 7397de6..fcc7272 100644 --- a/app/graphql/graphql.py +++ b/app/graphql/graphql.py @@ -66,6 +66,8 @@ def make_request( low_cost_flag no_cost_flag oer_flag + cc_id + item_id ClassBookRequirement { code } @@ -88,8 +90,9 @@ def make_request( if r.status_code == 200: if r.json().get("data"): - return r.status_code, flatten_book_records( - r.json()["data"]["books_v0_2_Book"] + return ( + r.status_code, + flatten_book_records(r.json()["data"]["books_v0_2_Book"]), ) else: return 422, {"Unable to parse results."} diff --git a/app/main.py b/app/main.py index 6dbee9c..7f8bc8b 100644 --- a/app/main.py +++ b/app/main.py @@ -4,7 +4,6 @@ import datetime import logging import logging.config -import random import secrets import string import time @@ -38,14 +37,27 @@ async def log_requests(request: Request, call_next): Tidy bit of logging assist to show how long each call takes. Found here: https://philstories.medium.com/fastapi-logging-f6237b84ea64 """ - idem = "".join(random.choices(string.ascii_uppercase + string.digits, k=6)) + + # Create idem with secrets module instead of random module + # which is unsuitable for security/cryptographic purposes + string_source = string.ascii_uppercase + string.digits + idem = secrets.choice(string.ascii_uppercase) + idem += secrets.choice(string.digits) + + for _ in range(4): + idem += secrets.choice(string_source) + + char_list = list(idem) + secrets.SystemRandom().shuffle(char_list) + idem = "".join(char_list) + logger.info("rid=%s start request path=%s", idem, request.url.path) start_time = time.time() response = await call_next(request) process_time = (time.time() - start_time) * 1000 - formatted_process_time = "{0:.2f}".format(process_time) + formatted_process_time = f"{process_time:.2f}" logger.info( "rid=%s completed_in=%sms status_code=%s", idem, diff --git a/app/utility/utility.py b/app/utility/utility.py index 1e808a6..8c63066 100644 --- a/app/utility/utility.py +++ b/app/utility/utility.py @@ -34,6 +34,8 @@ def flatten_book_record(book): result.session = book.Session.code result.term = book.Session.Term.code result.requirement = book.ClassBookRequirement.code + result.cc_id = book.cc_id + result.item_id = book.item_id return result.to_dict() diff --git a/test/flattened_output1.json b/test/flattened_output1.json index 59e3455..aad3e43 100644 --- a/test/flattened_output1.json +++ b/test/flattened_output1.json @@ -17,7 +17,9 @@ "low_cost_flag": "N", "no_cost_flag": "N", "oer_flag": "N", - "requirement": "R" + "requirement": "R", + "cc_id": "null", + "item_id": "null" } ] } \ No newline at end of file diff --git a/test/graphql_output1.json b/test/graphql_output1.json index 70b6fd6..2c4f7e2 100644 --- a/test/graphql_output1.json +++ b/test/graphql_output1.json @@ -33,6 +33,8 @@ "low_cost_flag": "N", "no_cost_flag": "N", "oer_flag": "N", + "cc_id": "null", + "item_id": "null", "ClassBookRequirement": { "code": "R" }