| 123456789101112131415161718192021222324252627282930313233343536373839 | from searx.data import bangs_loader# bangs data coming from the following url convert to json with# https://raw.githubusercontent.com/jivesearch/jivesearch/master/bangs/bangs.toml# https://pseitz.github.io/toml-to-json-online-converter/# NOTE only use the get_bang_urlbangs_data = {}for bang in bangs_loader()['bang']:    for trigger in bang["triggers"]:        bangs_data[trigger] = {x: y for x, y in bang.items() if x != "triggers"}def get_bang_url(search_query):    """    Redirects if the user supplied a correct bang search.    :param search_query: This is a search_query object which contains preferences and the submitted queries.    :return: None if the bang was invalid, else a string of the redirect url.    """    if search_query.external_bang:        query = search_query.query        bang = _get_bang(search_query.external_bang)        if bang and query:            # TODO add region support.            bang_url = bang["regions"]["default"]            return bang_url.replace("{{{term}}}", query)    return Nonedef _get_bang(user_bang):    """    Searches if the supplied user bang is available. Returns None if not found.    :param user_bang: The parsed user bang. For example yt    :return: Returns a dict with bangs data (check bangs_data.json for the structure)    """    return bangs_data.get(user_bang)
 |