X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=fba%2Fmodels%2Finstances.py;h=320a24f69d90d639dc7fb29c5a99b85329aad928;hb=323bc106bb37febb52eeb87c2eaca720d3dc1d53;hp=c0eb7ab5b83c128072d203047465eed9da0c4572;hpb=e693264e79dc730b6d4a7c2e86a90bc2d670a69d;p=fba.git diff --git a/fba/models/instances.py b/fba/models/instances.py index c0eb7ab..320a24f 100644 --- a/fba/models/instances.py +++ b/fba/models/instances.py @@ -41,7 +41,7 @@ logger = logging.getLogger(__name__) # written to database. Both arrays must be filled at the same time or else # update_data() will fail _pending = { - # Detection mode: 'AUTO_DISCOVERY', 'STATIC_CHECKS' or 'GENERATOR' + # Detection mode # NULL means all detection methods have failed (maybe still reachable instance) "detection_mode" : {}, # Found nodeinfo URL @@ -148,6 +148,7 @@ def update_data(domain: str): def add(domain: str, origin: str, command: str, path: str = None, software: str = None): logger.debug("domain='%s',origin='%s',command='%s',path='%s',software='%s' - CALLED!", domain, origin, command, path, software) domain_helper.raise_on(domain) + if not isinstance(origin, str) and origin is not None: raise ValueError(f"origin[]='{type(origin)}' is not 'str'") elif origin == "": @@ -168,8 +169,10 @@ def add(domain: str, origin: str, command: str, path: str = None, software: str raise ValueError(f"Bad origin name='{origin}'") elif blacklist.is_blacklisted(domain): raise Exception(f"domain='{domain}' is blacklisted, but method invoked") - elif domain.find("/profile/") > 0 or domain.find("/users/") > 0 or (software == "lemmy" and domain.find("/c/") > 0): + elif domain.find("/profile/") > 0 or domain.find("/users/") > 0 or (is_registered(domain.split("/")[0]) and domain.find("/c/") > 0): raise Exception(f"domain='{domain}' is a single user") + elif domain.find("/tag/") > 0: + raise Exception(f"domain='{domain}' is a tag") if software is None: try: @@ -202,8 +205,9 @@ def add(domain: str, origin: str, command: str, path: str = None, software: str logger.debug("Marking domain='%s' as registered.", domain) cache.set_sub_key("is_registered", domain, True) + logger.debug("Checking if domain='%s' has pending updates ...", domain) if has_pending(domain): - logger.debug("domain='%s' has pending nodeinfo being updated ...", domain) + logger.debug("Flushing updates for domain='%s' ...", domain) update_data(domain) logger.debug("EXIT!") @@ -250,6 +254,16 @@ def set_last_error(domain: str, error: dict): logger.debug("EXIT!") +def set_success(domain: str): + logger.debug("domain='%s' - CALLED!", domain) + domain_helper.raise_on(domain) + + # Set both to success + _set_data("last_status_code" , domain, 200) + _set_data("last_error_details", domain, None) + + logger.debug("EXIT!") + def is_registered(domain: str) -> bool: logger.debug("domain='%s' - CALLED!", domain) domain_helper.raise_on(domain) @@ -268,15 +282,20 @@ def is_registered(domain: str) -> bool: logger.debug("registered='%s' - EXIT!", registered) return registered -def is_recent(domain: str) -> bool: - logger.debug("domain='%s' - CALLED!", domain) +def is_recent(domain: str, column: str = "last_instance_fetch") -> bool: + logger.debug("domain='%s',column='%s' - CALLED!", domain) domain_helper.raise_on(domain) - if not is_registered(domain): + + if not isinstance(column, str): + raise ValueError(f"Parameter column[]='{type(column)}' is not 'str'") + elif column not in ["last_instance_fetch", "last_blocked"]: + raise ValueError(f"Parameter column='{column}' is not expected") + elif not is_registered(domain): logger.debug("domain='%s' is not registered, returning False - EXIT!", domain) return False # Query database - database.cursor.execute("SELECT last_instance_fetch FROM instances WHERE domain = ? LIMIT 1", [domain]) + database.cursor.execute(f"SELECT {column} FROM instances WHERE domain = ? LIMIT 1", [domain]) # Fetch row fetched = database.cursor.fetchone()[0] @@ -355,7 +374,7 @@ def set_total_peers(domain: str, peers: list): domain_helper.raise_on(domain) if not isinstance(peers, list): - raise ValueError(f"Parameter peers[]='{type(peers)}' is not 'list'") + raise ValueError(f"Parameter peers[]='{type(peers)}' is not 'list': '%s'") # Set timestamp _set_data("total_peers", domain, len(peers))