# along with this program. If not, see <https://www.gnu.org/licenses/>.
import json
-import requests
import sys
import time
+
+import requests
import validators
from fba import blacklist
from fba import cache
from fba import fba
+from fba import federation
# Found info from node, such as nodeinfo URL, detection mode that needs to be
# written to database. Both arrays must be filled at the same time or else
"last_error_details" : {},
}
-def set(key: str, domain: str, value: any):
+def set_data(key: str, domain: str, value: any):
# DEBUG: print(f"DEBUG: key='{key}',domain='{domain}',value[]='{type(value)}' - CALLED!")
if not isinstance(key, str):
raise ValueError("Parameter key[]='{type(key)}' is not 'str'")
raise ValueError("Parameter 'domain' is empty")
# DEBUG: print("DEBUG: Updating last_instance_fetch for domain:", domain)
- set("last_instance_fetch", domain, time.time())
+ set_data("last_instance_fetch", domain, time.time())
# Running pending updated
# DEBUG: print(f"DEBUG: Invoking update_data({domain}) ...")
raise ValueError("Parameter 'domain' is empty")
# DEBUG: print("DEBUG: Updating last_blocked for domain", domain)
- set("last_blocked", domain, time.time())
+ set_data("last_blocked", domain, time.time())
# Running pending updated
# DEBUG: print(f"DEBUG: Invoking update_data({domain}) ...")
raise Exception(f"domain='{domain}' is a single user")
# DEBUG: print("DEBUG: domain,origin,command,path:", domain, origin, command, path)
- software = fba.determine_software(domain, path)
+ software = federation.determine_software(domain, path)
+
# DEBUG: print("DEBUG: Determined software:", software)
- if domain.find("/c/") > 0 and software == "lemmy":
+ if software == "lemmy" and domain.find("/c/") > 0:
domain = domain.split("/c/")[0]
if is_registered(domain):
print(f"WARNING: domain='{domain}' already registered after cutting off user part. - EXIT!")
if has_pending_instance_data(domain):
# DEBUG: print(f"DEBUG: domain='{domain}' has pending nodeinfo being updated ...")
- set("last_status_code" , domain, None)
- set("last_error_details", domain, None)
+ set_data("last_status_code" , domain, None)
+ set_data("last_error_details", domain, None)
update_data(domain)
- fba.remove_pending_error(domain)
-
- if domain in fba.pending_errors:
- # DEBUG: print("DEBUG: domain has pending error being updated:", domain)
- update_last_error(domain, fba.pending_errors[domain])
- fba.remove_pending_error(domain)
except BaseException as exception:
- print(f"ERROR: failed SQL query: domain='{domain}',exception[{type(exception)}]:'{str(exception)}'")
- sys.exit(255)
+ update_last_error(domain, exception)
+ raise Exception(f"ERROR: failed SQL query: domain='{domain}',exception[{type(exception)}]:'{str(exception)}'") from exception
else:
# DEBUG: print("DEBUG: Updating nodeinfo for domain:", domain)
update_last_nodeinfo(domain)
raise ValueError("Parameter 'domain' is empty")
# DEBUG: print("DEBUG: Updating last_nodeinfo for domain:", domain)
- set("last_nodeinfo", domain, time.time())
- set("last_updated" , domain, time.time())
+ set_data("last_nodeinfo", domain, time.time())
+ set_data("last_updated" , domain, time.time())
# Running pending updated
# DEBUG: print(f"DEBUG: Invoking update_data({domain}) ...")
# DEBUG: print("DEBUG: EXIT!")
-def update_last_error(domain: str, response: requests.models.Response):
- # DEBUG: print("DEBUG: domain,response[]:", domain, type(response))
+def update_last_error(domain: str, error: dict):
+ # DEBUG: print("DEBUG: domain,error[]:", domain, type(error))
if not isinstance(domain, str):
raise ValueError(f"Parameter domain[]={type(domain)} is not 'str'")
elif domain == "":
raise ValueError("Parameter 'domain' is empty")
- # DEBUG: print("DEBUG: BEFORE response[]:", type(response))
- if isinstance(response, BaseException) or isinstance(response, json.decoder.JSONDecodeError):
- response = f"{type}:str(response)"
-
- # DEBUG: print("DEBUG: AFTER response[]:", type(response))
- if isinstance(response, str):
- # DEBUG: print(f"DEBUG: Setting last_error_details='{response}'");
- set("last_status_code" , domain, 999)
- set("last_error_details", domain, response)
+ # DEBUG: print("DEBUG: BEFORE error[]:", type(error))
+ if isinstance(error, BaseException) or isinstance(error, json.decoder.JSONDecodeError):
+ error = f"error[{type(error)}]='{str(error)}'"
+ # DEBUG: print("DEBUG: AFTER error[]:", type(error))
+
+ if isinstance(error, str):
+ # DEBUG: print(f"DEBUG: Setting last_error_details='{error}'")
+ set_data("last_status_code" , domain, 999)
+ set_data("last_error_details", domain, error)
+ elif isinstance(error, requests.models.Response):
+ # DEBUG: print(f"DEBUG: Setting last_error_details='{error.reason}'")
+ set_data("last_status_code" , domain, error.status_code)
+ set_data("last_error_details", domain, error.reason)
else:
- # DEBUG: print(f"DEBUG: Setting last_error_details='{response.reason}'");
- set("last_status_code" , domain, response.status_code)
- set("last_error_details", domain, response.reason)
+ # DEBUG: print(f"DEBUG: Setting last_error_details='{error['error_message']}'")
+ set_data("last_status_code" , domain, error["status_code"])
+ set_data("last_error_details", domain, error["error_message"])
# Running pending updated
# DEBUG: print(f"DEBUG: Invoking update_data({domain}) ...")
update_data(domain)
- fba.log_error(domain, response)
+ fba.log_error(domain, error)
# DEBUG: print("DEBUG: EXIT!")
# DEBUG: print(f"DEBUG: domain='{domain}' - CALLED!")
if not cache.key_exists("is_registered"):
- # DEBUG: print(f"DEBUG: Cache for 'is_registered' not initialized, fetching all rows ...")
+ # DEBUG: print("DEBUG: Cache for 'is_registered' not initialized, fetching all rows ...")
try:
fba.cursor.execute("SELECT domain FROM instances")
# Check Set all
cache.set_all("is_registered", fba.cursor.fetchall(), True)
except BaseException as exception:
- print(f"ERROR: failed SQL query: domain='{domain}',exception[{type(exception)}]:'{str(exception)}'")
- sys.exit(255)
+ update_last_error(domain, exception)
+ raise Exception(f"ERROR: failed SQL query: domain='{domain}',exception[{type(exception)}]:'{str(exception)}'") from exception
# Is cache found?
registered = cache.sub_key_exists("is_registered", domain)