X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=fba%2Fhelpers%2Fsoftware.py;h=4a78ab3d61eab7142a1e97afe0ea578c50fed2cc;hb=67309da78fd077b3c19a5fa608beeccf3fcd0b69;hp=fafa81d483d251d640bf3b08617b8a4c0a45692a;hpb=b6b4d22d6282aeaf875a179c2ad4432b448210b0;p=fba.git diff --git a/fba/helpers/software.py b/fba/helpers/software.py index fafa81d..4a78ab3 100644 --- a/fba/helpers/software.py +++ b/fba/helpers/software.py @@ -16,90 +16,242 @@ import logging +from functools import lru_cache + from fba.helpers import tidyup -from fba.helpers import version logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) +# A list of relay software +relays = [ + "activityrelay", + "aoderelay", + "selective-relay", + "pub-relay" +] + +# Aliases for misskey +_misskey_aliases = [ + "slipfox calckey", + "calckey", + "groundpolis", + "foundkey", + "cherrypick", + "meisskey", + "magnetar", + "keybump", + "dolphin", + "calckey social", + "azk.sns", + "firefish", + "qtmmsky", + "iceshrimp", + "owohub", + "re+", + "russkey", + "loverskey", + "hajkey", + "sharkey", + "renekey", + "renekey-lite", + "yoiyami", + "catnip", + "cyberskey", + "catodon", + "lycheebridge", + "goblin", + "miraiskey", + "lovers", + "rosekey" +] + +@lru_cache def alias(software: str) -> str: logger.debug("software='%s'- CALLED!", software) + if not isinstance(software, str) and software is not None: raise ValueError(f"software[]='{type(software)}' is not type 'str'") + elif software == "": + raise ValueError("Parameter 'software' is empty") + elif software.startswith("re:"): + logger.debug("Cutting prefix 're:' from software='%s' ...", software) + software = software.split(":")[1] logger.debug("software='%s'- BEFORE!", software) - software = tidyup.domain(software) - logger.debug("software='%s'- AFTER!", software) - - if software in ["akkoma", "rebased", "akkounfucked", "ched", "incestoma"]: - logger.debug("Setting pleroma: software='%s'", software) - software = "pleroma" - elif "radiant" in software: - logger.debug("Setting radiant: software='%s'", software) - software = "radiant" - elif software in ["hometown", "ecko", "fedibird" ] or "되는 마스토돈" in software or "mastodon" in software: - logger.debug("Setting mastodon: software='%s'", software) - software = "mastodon" - elif software in ["slipfox calckey", "calckey", "groundpolis", "foundkey", "cherrypick", "meisskey", "magnetar", "keybump", "dolphin", "calckey social", "azk.sns", "firefish", "qtmmsky", "iceshrimp", "owohub"] or "shumihub" in software or "мисскей" in software or "milkey" in software or "misskey" in software: - logger.debug("Setting misskey: software='%s'", software) - software = "misskey" - elif software in ["runtube.re", "islameye"]: - logger.debug("Setting peertube: software='%s'", software) - software = "peertube" - elif software in ["nextcloud social", "nextcloudpi", "storage share"] or "nextcloud" in software: - logger.debug("Setting nextcloud: software='%s'", software) - software = "nextcloud" - elif software == "activity-relay": - logger.debug("Setting activityrelay: software='%s'", software) - software = "activityrelay" - elif "owncast" in software: - logger.debug("Setting owncast: software='%s'", software) - software = "owncast" - elif software in ["streams-hubzilla-social", "streams13"]: - logger.debug("Setting streams: software='%s'", software) - software = "streams" - elif software == "roadhouse": - logger.debug("Setting hubzilla: software='%s'", software) - software = "hubzilla" - elif software == "takahē": - logger.debug("Setting takahe: software='%s'", software) - software = "takahe" - elif software == "diaspora* social network": - logger.debug("Setting diaspora: software='%s'", software) - software = "diaspora" - elif software == "tkz relay": - logger.debug("Setting aoderelay: software='%s'", software) - software = "aoderelay" - elif software == "gitdab": - logger.debug("Setting forgejo: software='%s'", software) - software = "forgejo" - elif software.find("/") > 0: - logger.warning("Spliting of slash: software='%s'", software) - software = software.split("/")[-1] - elif software.find("|") > 0: - logger.warning("Spliting of pipe: software='%s'", software) - software = software.split("|")[0] - elif "powered by" in software: - logger.debug("software='%s' has 'powered by' in it", software) - software = version.strip_powered_by(software) - - if isinstance(software, str) and " by " in software: - logger.debug("software='%s' has ' by ' in it", software) - software = version.strip_until(software, " by ") - elif isinstance(software, str) and " - " in software: - logger.debug("software='%s' has ' - ' in it", software) - software = version.strip_until(software, " - ") - elif isinstance(software, str) and " see " in software: - logger.debug("software='%s' has ' see ' in it", software) - software = version.strip_until(software, " see ") - - logger.debug("software['%s']='%s'", type(software), software) - if software == "": - logger.warning("tidyup.domain() left no software name behind: software='%s'", software) - software = None + cleared = tidyup.domain(software) + logger.debug("cleared='%s'- AFTER!", cleared) + + if cleared in ["akkoma", "rebased", "akkounfucked", "ched", "incestoma", "revolver"]: + logger.debug("Setting pleroma: cleared='%s'", cleared) + cleared = "pleroma" + elif "radiant" in cleared: + logger.debug("Setting radiant: cleared='%s'", cleared) + cleared = "radiant" + elif cleared in ["hometown", "ecko", "fedibird", "glitchcafe", "kmyblue"] or "되는 마스토돈" in cleared or "mastodon" in cleared: + logger.debug("Setting mastodon: cleared='%s'", cleared) + cleared = "mastodon" + elif cleared in _misskey_aliases or "shumihub" in cleared or "мисскей" in cleared or "milkey" in cleared or "misskey" in cleared: + logger.debug("Setting misskey: cleared='%s'", cleared) + cleared = "misskey" + elif cleared in ["runtube.re", "islameye"]: + logger.debug("Setting peertube: cleared='%s'", cleared) + cleared = "peertube" + elif cleared in ["nextcloud social", "nextcloudpi", "storage share", "nube"] or "nextcloud" in cleared: + logger.debug("Setting nextcloud: cleared='%s'", cleared) + cleared = "nextcloud" + elif "discourse" in cleared: + logger.debug("Setting discourse: cleared='%s'", cleared) + cleared = "discourse" + elif cleared == "activity-relay": + logger.debug("Setting activityrelay: cleared='%s'", cleared) + cleared = "activityrelay" + elif "owncast" in cleared: + logger.debug("Setting owncast: cleared='%s'", cleared) + cleared = "owncast" + elif cleared in ["streams-hubzilla-social", "streams13"]: + logger.debug("Setting streams: cleared='%s'", cleared) + cleared = "streams" + elif cleared == "roadhouse": + logger.debug("Setting hubzilla: cleared='%s'", cleared) + cleared = "hubzilla" + elif cleared == "takahē": + logger.debug("Setting takahe: cleared='%s'", cleared) + cleared = "takahe" + elif cleared == "diaspora* social network": + logger.debug("Setting diaspora: cleared='%s'", cleared) + cleared = "diaspora" + elif cleared == "tkz relay": + logger.debug("Setting aoderelay: cleared='%s'", cleared) + cleared = "aoderelay" + elif cleared == "gitdab": + logger.debug("Setting forgejo: cleared='%s'", cleared) + cleared = "forgejo" + elif cleared == "mbin": + logger.debug("Setting kbin: cleared='%s'", cleared) + cleared = "kbin" + elif cleared == "write.as": + logger.debug("Setting writefreely: cleared='%s'", cleared) + cleared = "writefreely" + elif "gnu social" in cleared: + logger.debug("Setting gnusocial: cleared='%s'", cleared) + cleared = "gnusocial" + elif cleared.find("/") > 0: + logger.warning("Spliting of slash: cleared='%s'", cleared) + cleared = cleared.split("/")[-1] + elif cleared.find("|") > 0: + logger.warning("Spliting of pipe: cleared='%s'", cleared) + cleared = cleared.split("|")[0] + elif "powered by" in cleared: + logger.debug("cleared='%s' has 'powered by' in it", cleared) + cleared = strip_powered_by(cleared) + elif cleared.endswith(" experimental"): + logger.debug("cleared='%s' ends with 'experimental", cleared) + cleared = strip_until(cleared, "experimental") + + if isinstance(cleared, str) and " by " in cleared: + logger.debug("cleared='%s' has ' by ' in it", cleared) + cleared = strip_until(cleared, " by ") + elif isinstance(cleared, str) and " - " in cleared: + logger.debug("cleared='%s' has ' - ' in it", cleared) + cleared = strip_until(cleared, " - ") + elif isinstance(cleared, str) and " see " in cleared: + logger.debug("cleared='%s' has ' see ' in it", cleared) + cleared = strip_until(cleared, " see ") + + logger.debug("cleared['%s']='%s'", type(cleared), cleared) + if cleared == "": + logger.warning("tidyup.domain() left no cleared name behind: cleared='%s'", cleared) + cleared = None else: - logger.debug("software='%s' is being cleaned up further ...") - software = software.rstrip("!") + logger.debug("cleared='%s' is being cleaned up further ...", cleared) + cleared = cleared.rstrip("!").strip() + + logger.debug("cleared[%s]='%s' - EXIT!", type(cleared), cleared) + return cleared + +def strip_hosted_on(software: str) -> str: + logger.debug("software='%s' - CALLED!", software) + + if not isinstance(software, str): + raise ValueError(f"Parameter software[]='{type(software)}' is not of type 'str'") + elif software == "": + raise ValueError("Parameter 'software' is empty") + elif "hosted on" not in software: + logger.warning("Cannot find 'hosted on' in software='%s'!", software) + return software + + end = software.find("hosted on ") + logger.debug("end[%s]=%d", type(end), end) + + software = software[0:end].strip() + logger.debug("software[%s]='%s'", type(software), software) + + if " - " in software: + logger.debug("Stripping ' - ' of from software='%s' ...", software) + software = strip_until(software, " - ").strip() + + logger.debug("software='%s' - EXIT!", software) + return software + +def strip_powered_by(software: str) -> str: + logger.debug("software='%s' - CALLED!", software) - logger.debug("software[%s]='%s' - EXIT!", type(software), software) + if not isinstance(software, str): + raise ValueError(f"Parameter software[]='{type(software)}' is not of type 'str'") + elif software == "": + raise ValueError("Parameter 'software' is empty") + elif "powered by" not in software: + logger.warning("Cannot find 'powered by' in software='%s'!", software) + return software + + start = software.find("powered by ") + logger.debug("start[%s]=%d", type(start), start) + + software = software[start + 11:].strip() + logger.debug("software='%s'", software) + + if " - " in software: + logger.debug("Stripping ' - ' of from software='%s' ...", software) + software = strip_until(software, " - ").strip() + + logger.debug("software='%s' - EXIT!", software) + return software + +def strip_until(software: str, until: str) -> str: + logger.debug("software='%s',until='%s' - CALLED!", software, until) + + if not isinstance(software, str): + raise ValueError(f"Parameter software[]='{type(software)}' is not of type 'str'") + elif software == "": + raise ValueError("Parameter 'software' is empty") + elif not isinstance(until, str): + raise ValueError(f"Parameter until[]='{type(until)}' is not of type 'str'") + elif until == "": + raise ValueError("Parameter 'until' is empty") + elif not until in software: + logger.warning("Cannot find until='%s' in software='%s'!", until, software) + return software + + # Next, strip until part + end = software.strip().find(until) + + logger.debug("end[%s]=%d", type(end), end) + if end > 0: + software = software[0:end].strip() + + logger.debug("software='%s' - EXIT!", software) return software + +def is_relay(software: str) -> bool: + logger.debug("software='%s'- CALLED!", software) + + if not isinstance(software, str): + raise ValueError(f"software[]='{type(software)}' is not type 'str'") + elif software == "": + raise ValueError("Parameter 'software' is empty") + + found = software in relays + + logger.debug("found='%s' - EXIT!", found) + return found