From 65fe4b707ce3b96cbccce77b24f40b59675858fc Mon Sep 17 00:00:00 2001 From: hygienic-books Date: Tue, 15 Mar 2022 04:27:28 +0100 Subject: [PATCH] Use Pydantic JSON model files --- main.py => mvw-dl.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) rename main.py => mvw-dl.py (91%) diff --git a/main.py b/mvw-dl.py similarity index 91% rename from main.py rename to mvw-dl.py index d7b44b0..ea0d65a 100644 --- a/main.py +++ b/mvw-dl.py @@ -10,6 +10,9 @@ from rich.traceback import install from rich import print import typing as t from rich.console import Console +from type_def.mvw_json_request import MVWJSONRequest +from type_def.mvw_json_response import MVWJSONResponse + # Without width console = Console(width=180) p = inflect.engine() @@ -158,16 +161,22 @@ def query_string_from_file(filename: str) -> str: return query_string -def get_query_payload(section_name: str, config_obj: configparser.ConfigParser()) -> JSONType: +def get_query_payload( + section_name: str, + config_obj: configparser.ConfigParser()) -> MVWJSONRequest: log.debug(f"Generating HTTP POST JSON payload ...") query = config_obj.get(section_name, "query") if query[0] == "@": query = query.split("@", 1)[1] query = query_string_from_file(query) - return json.loads(query) + got_query_payload = MVWJSONRequest(**json.loads(query)) + return got_query_payload -def get_json_response(section_name: str, config_obj: configparser.ConfigParser(), payload: JSONType) -> JSONType: +def get_json_response( + section_name: str, + config_obj: configparser.ConfigParser(), + payload: MVWJSONRequest) -> MVWJSONResponse: log.debug(f"Downloading JSON list of Mediathek files that match search criteria") serialized_payload = json.dumps(payload) url = config_obj.get(section_name, "mvw_endpoint") @@ -181,10 +190,15 @@ def get_json_response(section_name: str, config_obj: configparser.ConfigParser() f"""{newline.join(f"Header '{header}': '{value}'" for header, value in list(req.headers.items()))}\n""" f"Payload: {payload}") with s.send(prepped) as s: - return json.loads(s.content) + # return json.loads(s.content) + got_json_response = MVWJSONResponse(**json.loads(s.content)) + return got_json_response -def filter_json_by_duration(section_name: str, config_obj: configparser.ConfigParser(), json_obj: JSONType) -> JSONType: +def filter_json_by_duration( + section_name: str, + config_obj: configparser.ConfigParser(), + json_obj: MVWJSONResponse) -> MVWJSONResponse: min_length = config_obj.getint(section_name, "min_duration") if min_length >= 0: log.debug(f"""Filtering JSON for minimum length of {min_length} {p.plural("second", min_length)}""")