]> git.mxchange.org Git - fba.git/commitdiff
Continued:
authorRoland Häder <roland@mxchange.org>
Sat, 1 Jul 2023 01:06:57 +0000 (03:06 +0200)
committerRoland Häder <roland@mxchange.org>
Sat, 1 Jul 2023 01:06:57 +0000 (03:06 +0200)
- need to set detection_mode and nodeinfo_url to None to avoid false instance
  data
- setters may accept None now

fba/http/federation.py
fba/http/network.py
fba/models/instances.py
fba/utils.py

index b50328d8b6d9140b76f87b2ce3b68468d27048fd..732dec2ff5cdd561d6dd729f29a19f173552bb3a 100644 (file)
@@ -450,22 +450,38 @@ def determine_software(domain: str, path: str = None) -> str:
         raise data["exception"]
     elif "error_message" in data:
         logger.debug("Returned error_message during fetching nodeinfo: '%s',status_code=%d", data['error_message'], data['status_code'])
-        return fetch_generator_from_path(domain)
-    elif "status" in data and data["status"] == "error" and "message" in data:
-        logger.warning("JSON response is an error: '%s'", data["message"])
-        instances.set_last_error(domain, data["message"])
-        return fetch_generator_from_path(domain)
-    elif "message" in data:
-        logger.warning("JSON response contains only a message: '%s'", data["message"])
-        instances.set_last_error(domain, data["message"])
-        return fetch_generator_from_path(domain)
-    elif "json" not in data or "software" not in data["json"] or "name" not in data["json"]["software"]:
+        software = fetch_generator_from_path(domain)
+        logger.debug("Generator for domain='%s' is: '%s'", domain, software)
+    elif "json" in data:
+        logger.debug("domain='%s',path='%s',data[json] found ...", domain, path)
+        if "status" in data["json"] and data["json"]["status"] == "error" and "message" in data["json"]:
+            logger.warning("JSON response is an error: '%s'", data["json"]["message"])
+            instances.set_last_error(domain, data["json"]["message"])
+            instances.set_detection_mode(domain, None)
+            instances.set_nodeinfo_url(domain, None)
+            software = fetch_generator_from_path(domain)
+            logger.debug("Generator for domain='%s' is: '%s'", domain, software)
+        elif "software" in data["json"] and "name" in data["json"]["software"]:
+            logger.debug("Found data[json][software][name] in JSON response")
+            software = data["json"]["software"]["name"]
+            logger.debug("software[%s]='%s' - FOUND!", type(software), software)
+        elif "message" in data["json"]:
+            logger.warning("JSON response contains only a message: '%s'", data["json"]["message"])
+            instances.set_last_error(domain, data["json"]["message"])
+            instances.set_detection_mode(domain, None)
+            instances.set_nodeinfo_url(domain, None)
+            software = fetch_generator_from_path(domain)
+            logger.debug("Generator for domain='%s' is: '%s'", domain, software)
+        elif "software" not in data["json"] or "name" not in data["json"]["software"]:
+            logger.debug("JSON response from domain='%s' does not include [software][name], fetching / ...", domain)
+            instances.set_detection_mode(domain, None)
+            instances.set_nodeinfo_url(domain, None)
+            software = fetch_generator_from_path(domain)
+            logger.debug("Generator for domain='%s' is: '%s'", domain, software)
+    elif "json" not in data:
         logger.debug("JSON response from domain='%s' does not include [software][name], fetching / ...", domain)
         software = fetch_generator_from_path(domain)
         logger.debug("Generator for domain='%s' is: '%s'", domain, software)
-    elif "json" in data and "software" in data["json"] and "name" in data["json"]["software"]:
-        logger.debug("Found data[json][software][name] in JSON response")
-        software = data["json"]["software"]["name"]
 
     logger.debug("software[%s]='%s'", type(software), software)
     if software is None:
index 7081ba8f3dd4a03ab62fa2c7b89545d9f698f381..229c474469bab71273959f8d457c4b830f0591b4 100644 (file)
@@ -63,7 +63,7 @@ def post_json_api(domain: str, path: str, data: str = "", headers: dict = dict()
     if not isinstance(path, str):
         raise ValueError(f"path[]='{type(path)}' is not 'str'")
     elif path == "":
-        raise ValueError("Parameter 'path' cannot be empty")
+        raise ValueError("Parameter 'path' is empty")
     elif not isinstance(data, str):
         raise ValueError(f"data[]='{type(data)}' is not 'str'")
     elif not isinstance(headers, dict):
@@ -150,7 +150,7 @@ def get_json_api(domain: str, path: str, headers: dict, timeout: tuple) -> dict:
     if not isinstance(path, str):
         raise ValueError(f"path[]='{type(path)}' is not 'str'")
     elif path == "":
-        raise ValueError("Parameter 'path' cannot be empty")
+        raise ValueError("Parameter 'path' is empty")
     elif not isinstance(headers, dict):
         raise ValueError(f"headers[]='{type(headers)}' is not 'list'")
     elif not isinstance(timeout, tuple):
index 25ea215a229ca47c266261c2514a0893b97bfa99..4ff0c188a80de48b628d38c309b5508403e55323 100644 (file)
@@ -69,7 +69,7 @@ def _set_data(key: str, domain: str, value: any):
     logger.debug("key='%s',domain='%s',value[]='%s' - CALLED!", key, domain, type(value))
     domain_helper.raise_on(domain)
     if not isinstance(key, str):
-        raise ValueError("Parameter key[]='{type(key)}' is not 'str'")
+        raise ValueError(f"Parameter key[]='{type(key)}' is not 'str'")
     elif key == "":
         raise ValueError("Parameter 'key' is empty")
     elif not key in _pending:
@@ -400,8 +400,8 @@ def set_nodeinfo_url(domain: str, url: str):
     logger.debug("domain='%s',url='%s' - CALLED!", domain, url)
     domain_helper.raise_on(domain)
 
-    if not isinstance(url, str):
-        raise ValueError("Parameter url[]='{type(url)}' is not 'list'")
+    if not isinstance(url, str) and url is not None:
+        raise ValueError(f"Parameter url[]='{type(url)}' is not 'str'")
     elif url == "":
         raise ValueError("Parameter 'url' is empty")
 
@@ -413,8 +413,8 @@ def set_detection_mode(domain: str, mode: str):
     logger.debug("domain='%s',mode='%s' - CALLED!", domain, mode)
     domain_helper.raise_on(domain)
 
-    if not isinstance(mode, str):
-        raise ValueError("Parameter mode[]='{type(mode)}' is not 'list'")
+    if not isinstance(mode, str) and mode is not None:
+        raise ValueError(f"Parameter mode[]='{type(mode)}' is not 'str'")
     elif mode == "":
         raise ValueError("Parameter 'mode' is empty")
 
index f2ff076cfee671c72656f9ffd9e9d1fab788eeaa..cd2db4d44776c4b30d1d0b42a284009566ad9322 100644 (file)
@@ -39,7 +39,7 @@ logger = logging.getLogger(__name__)
 
 def is_primitive(var: any) -> bool:
     logger.debug("var[]='%s' - CALLED!", type(var))
-    return type(var) in {int, str, float, bool} or var is None
+    return type(var) in {int, str, float, bool, None} or var is None
 
 def get_hash(domain: str) -> str:
     logger.debug("domain='%s' - CALLED!", domain)