X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=fba%2Fhelpers%2Fsoftware.py;h=43746d808aa34a08872fd2daa2d8be9e7d0e0c16;hb=d9b9b868c9d82a715da78e134cbfbe52c64f3a35;hp=29da2b6c6678e7ee348827383b3e89b104993a38;hpb=27ed41a39f400d01ac4cb3376f6503bc3ae1d4ec;p=fba.git diff --git a/fba/helpers/software.py b/fba/helpers/software.py index 29da2b6..43746d8 100644 --- a/fba/helpers/software.py +++ b/fba/helpers/software.py @@ -16,6 +16,8 @@ import logging +from functools import lru_cache + from fba.helpers import tidyup logging.basicConfig(level=logging.INFO) @@ -29,6 +31,54 @@ relays = [ "pub-relay" ] +# Aliases for mastodon +_mastodon_aliases = [ + "hometown", + "ecko", + "fedibird", + "glitchcafe", + "kmyblue", + "nagitodon" +] + +# 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", + "hijikey", + "shrimpkey" +] + +@lru_cache def alias(software: str) -> str: logger.debug("software='%s'- CALLED!", software) @@ -36,92 +86,101 @@ def alias(software: str) -> str: 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", "revolver"]: - 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", "glitchcafe"] 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", "re+", "russkey", "loverskey", "hajkey", "sharkey"] 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", "nube"] or "nextcloud" in software: - logger.debug("Setting nextcloud: software='%s'", software) - software = "nextcloud" - elif "discourse" in software: - logger.debug("Setting discourse: software='%s'", software) - software = "discourse" - 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 "gnu social" in software: - logger.debug("Setting gnusocial: software='%s'", software) - software = "gnusocial" - 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 = strip_powered_by(software) - elif software.endswith(" experimental"): - logger.debug("software='%s' ends with 'experimental", software) - software = strip_until(software, "experimental") - - if isinstance(software, str) and " by " in software: - logger.debug("software='%s' has ' by ' in it", software) - software = strip_until(software, " by ") - elif isinstance(software, str) and " - " in software: - logger.debug("software='%s' has ' - ' in it", software) - software = strip_until(software, " - ") - elif isinstance(software, str) and " see " in software: - logger.debug("software='%s' has ' see ' in it", software) - software = 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"] or "pleroma" in cleared: + 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 _mastodon_aliases 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("!").strip() + logger.debug("cleared='%s' is being cleaned up further ...", cleared) + cleared = cleared.rstrip("!").strip() - logger.debug("software[%s]='%s' - EXIT!", type(software), software) - return software + logger.debug("cleared[%s]='%s' - EXIT!", type(cleared), cleared) + return cleared def strip_hosted_on(software: str) -> str: logger.debug("software='%s' - CALLED!", software) @@ -149,6 +208,7 @@ def strip_hosted_on(software: str) -> str: def strip_powered_by(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 == "": @@ -198,9 +258,12 @@ def strip_until(software: str, until: str) -> str: def is_relay(software: str) -> bool: logger.debug("software='%s'- CALLED!", software) - if not isinstance(software, str) and software is not None: + 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