diff --git a/.env.template b/.env.template index 50eee12f..6b4d6694 100644 --- a/.env.template +++ b/.env.template @@ -6,3 +6,5 @@ NACHET_SUBSCRIPTION_ID= NACHET_RESOURCE_GROUP= NACHET_WORKSPACE= NACHET_MODEL= +MICROSCOPE_URL= +METHODS= diff --git a/custom_exceptions.py b/custom_exceptions.py index 7de693e7..beb575af 100644 --- a/custom_exceptions.py +++ b/custom_exceptions.py @@ -64,3 +64,7 @@ class ValidateEnvVariablesError(Exception): class ServerError(Exception): pass + + +class MicroscopeQueryError(Exception): + pass diff --git a/microscope/__init__.py b/microscope/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/microscope/microscope_info.py b/microscope/microscope_info.py new file mode 100644 index 00000000..946a3e31 --- /dev/null +++ b/microscope/microscope_info.py @@ -0,0 +1,67 @@ +import os +import json +import uuid +import logging +import requests +from dotenv import load_dotenv +from custom_exceptions import MicroscopeQueryError + +load_dotenv() + +methods_str = os.getenv("METHODS", "[]") +METHODS = json.loads(methods_str) +MICROSCOPE_URL = os.getenv("MICROSCOPE_URL") +params = {"id": int(uuid.uuid4())} +HEADERS = {'Content-Type': 'application/json'} + +def post_request(MICROSCOPE_URL, method, params, headers=HEADERS): + url = f"{MICROSCOPE_URL}?jsonrpc=2.0&method={method}&id={params['id']}" + + data = json.dumps({ + "jsonrpc": "2.0", + "method": method, + "id": params['id'], + }) + + try: + resp = requests.post(url, data=data, headers=headers) + resp.raise_for_status() + return resp.json() + except requests.RequestException as e: + logging.error(f"Request Error: {e}") + raise MicroscopeQueryError(f"MicroscopeQueryError: {e}") from e + +def is_hex(s): + try: + int(s, 16) + return True + except ValueError: + return False + +def get_microscope_configuration(METHODS): + config = {} + for method in METHODS: + try: + resp = post_request(MICROSCOPE_URL, method, params, HEADERS) + result = resp["result"] + + # Check if the response is in hexadecimal and convert it + if isinstance(result, str) and is_hex(result): + result = int(result, 16) + + config[method] = result + + except MicroscopeQueryError as mqe: + config[method] = None + logging.error(f"MicroscopeQueryError: {mqe}") + + return config + + +if __name__ == "__main__": + try: + config = get_microscope_configuration(METHODS) + if config: + print(config) + except requests.RequestException as e: + raise MicroscopeQueryError(f"OpenApiError: {e}") from e diff --git a/requirements.txt b/requirements.txt index 5ef34973..aaf28f79 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ quart quart-cors python-dotenv hypercorn +requests diff --git a/tests/test_microscope_info.py b/tests/test_microscope_info.py new file mode 100644 index 00000000..e69de29b