#! /usr/bin/env python import logging import json class TestApi: @staticmethod def __parse_arguments(): import argparse argParser = argparse.ArgumentParser("testApi") argParser.add_argument("method", choices=["GET", "POST"]) argParser.add_argument("--endpoint", default="shiai") argParser.add_argument("--host", default="cwsvjudo.de") argParser.add_argument("--path", default="participo/api") argParser.add_argument("--key", default=None) argParser.add_argument( "--configFile", type=argparse.FileType("r"), default="testApi.config.yaml" ) _LOG_LEVEL = ["CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG"] argParser.add_argument("--logLevel", choices=_LOG_LEVEL, default="WARNING") argParser.add_argument( "--input", "-i", type=argparse.FileType("r"), default=None ) argParser.add_argument( "--output", "-o", type=argparse.FileType("w"), default="-" ) return argParser.parse_args() def __init__(self): self.config = self.__parse_arguments() self.config.logLevel = getattr(logging, self.config.logLevel) logging.basicConfig(level=self.config.logLevel) with self.config.configFile as cf: from yaml import safe_load configData = safe_load(cf) # @todo: add the attributes from the config file to the config (if not # already set) if not self.config.key and "apiKey" in configData: self.config.key = configData["apiKey"] def apiCall(self): return apiCall.call( method=self.config.method, host=self.config.host, url="/".join([self.config.path, self.config.endpoint]), headers={"Authorization": f"Basic {self.config.key}"}, input=load_json(self.config.input) if self.config.input is not None else None, ) def load_json(jsonFile): import json with jsonFile as f: return json.load(f) class apiCall: @staticmethod def call( method: str, host: str, url: str, headers: dict = None, input: dict = None, ) -> dict: import requests if method == "GET": r = requests.get(url=f"http://{host}/{url}", timeout=10, headers=headers) elif method == "POST": r = requests.post( json=input, url=f"http://{host}/{url}", timeout=10, headers=headers ) else: logging.error("This line should never been reached!") try: return r.json() except Exception as e: logging.error(f"Exception {repr(e)} ({e}) while parsing json:") logging.error(r.text) if __name__ == "__main__": testApi = TestApi() response = testApi.apiCall() try: print(json.dumps(response, indent=2)) except Exception as e: logging.error(f"Exception {repr(e)} ({e}) while parsing json:")