Mike Jay
questions data
f53079e
raw
history blame
2.2 kB
"""Module for questions data processing"""
import os
import json
import requests
QUESTIONS_DATA_FILE = "data/questions_data.json"
def _is_exists_questions_data_file() -> bool:
if os.path.exists(QUESTIONS_DATA_FILE):
print(f"The file '{QUESTIONS_DATA_FILE}' exists.")
return True
print(f"The file '{QUESTIONS_DATA_FILE}' does not exist.")
return False
def _write_question_data_to_file(questions_data: dict):
with open(QUESTIONS_DATA_FILE, "w", encoding="utf-8") as json_file:
json.dump(
questions_data, json_file, indent=4
) # The 'indent=4' parameter pretty-prints the JSON with 4 spaces for indentation.
print(f"Pretty-printed JSON data written to {QUESTIONS_DATA_FILE}")
def _read_question_data_from_file() -> dict:
with open(QUESTIONS_DATA_FILE, "r", encoding="utf-8") as json_file:
questions_data = json.load(json_file)
return questions_data
def _request_question_data_res(questions_url: str) -> requests.Response:
try:
res = requests.get(questions_url, timeout=60)
res.raise_for_status()
return res
except requests.exceptions.HTTPError as e:
print("HTTP error occurred:", e)
except requests.exceptions.RequestException as e:
print("A request error occurred:", e)
return None
def _json_question_data_from_res(res: requests.Response) -> dict:
try:
questions_data = res.json()
return questions_data
except requests.exceptions.JSONDecodeError as e:
questions_data = None
print(f"Error decoding JSON response from questions endpoint: {e}")
print(f"Response text: {res.text[:500]}")
return None
def get_questions_data(questions_url: str) -> dict:
"""Get Questions Data"""
if _is_exists_questions_data_file():
questions_data = _read_question_data_from_file()
return questions_data
res = _request_question_data_res(questions_url=questions_url)
if res:
questions_data = _json_question_data_from_res(res)
if questions_data:
_write_question_data_to_file(questions_data=questions_data)
return questions_data
return None