import json import shutil import cachetools import gradio as gr import whois from tdagent.utils.json_utils import TDAgentJsonEncoder _WHOIS_BINARY = "whois" _CACHE_MAX_SIZE = 4096 _CACHE_TTL_SECONDS = 3600 @cachetools.cached( cache=cachetools.TTLCache(maxsize=_CACHE_MAX_SIZE, ttl=_CACHE_TTL_SECONDS), ) def query_whois(url: str) -> str: """Query a WHOIS database to gather information about a url or domain. WHOIS information includes: domain names, IP address blocks and autonomous systems, but it is also used for a wider range of other information. Args: url: URL to query for WHOIS information. Returns: A JSON formatted string with the gathered information """ try: whois_result = whois.whois( url, command=shutil.which(_WHOIS_BINARY) is not None, executable=_WHOIS_BINARY, ) except whois.parser.PywhoisError as err: return json.dumps({"error": str(err)}) return json.dumps(whois_result, cls=TDAgentJsonEncoder) gr_query_whois = gr.Interface( fn=query_whois, inputs=["text"], outputs="text", title="Get WHOIS information for a given URL.", description="Query a WHOIS database to gather information about a url or domain.", )