SYMBOL INDEX (230 symbols across 34 files) FILE: app/__init__.py function _teardown_clients (line 95) | def _teardown_clients(exception): function get_secret_key (line 126) | def get_secret_key(): FILE: app/filter.py function extract_q (line 40) | def extract_q(q_str: str, href: str) -> str: function build_map_url (line 55) | def build_map_url(href: str) -> str: function clean_query (line 77) | def clean_query(query: str) -> str: function clean_css (line 90) | def clean_css(css: str, page_url: str) -> str: class Filter (line 114) | class Filter: method __init__ (line 121) | def __init__( method __getitem__ (line 141) | def __getitem__(self, name): method elements (line 145) | def elements(self): method encrypt_path (line 148) | def encrypt_path(self, path, is_element=False) -> str: method clean (line 159) | def clean(self, soup) -> BeautifulSoup: method sanitize_div (line 219) | def sanitize_div(self, div) -> None: method add_favicon (line 247) | def add_favicon(self, link) -> None: method remove_dark_theme_toggle (line 300) | def remove_dark_theme_toggle(self, soup: BeautifulSoup) -> None: method remove_site_blocks (line 316) | def remove_site_blocks(self, soup) -> None: method remove_ai_overview (line 327) | def remove_ai_overview(self) -> None: method remove_ads (line 369) | def remove_ads(self) -> None: method remove_block_titles (line 383) | def remove_block_titles(self) -> None: method remove_block_url (line 392) | def remove_block_url(self) -> None: method remove_block_tabs (line 401) | def remove_block_tabs(self) -> None: method collapse_sections (line 416) | def collapse_sections(self) -> None: method update_element_src (line 505) | def update_element_src(self, element: Tag, mime: str, attr='src') -> N... method update_css (line 542) | def update_css(self) -> None: method update_styling (line 559) | def update_styling(self) -> None: method update_link (line 628) | def update_link(self, link: Tag) -> None: method site_alt_swap (line 737) | def site_alt_swap(self) -> None: method view_image (line 830) | def view_image(self, soup) -> BeautifulSoup: FILE: app/models/config.py function get_rule_for_selector (line 21) | def get_rule_for_selector(stylesheet: CSSStyleSheet, class Config (line 38) | class Config: method __init__ (line 39) | def __init__(self, **kwargs): method __getitem__ (line 116) | def __getitem__(self, name): method __setitem__ (line 119) | def __setitem__(self, name, value): method __delitem__ (line 122) | def __delitem__(self, name): method __contains__ (line 125) | def __contains__(self, name): method get_mutable_attrs (line 128) | def get_mutable_attrs(self): method get_attrs (line 133) | def get_attrs(self): method style (line 139) | def style(self) -> str: method preferences (line 165) | def preferences(self) -> str: method is_safe_key (line 177) | def is_safe_key(self, key) -> bool: method get_localization_lang (line 191) | def get_localization_lang(self): method from_params (line 204) | def from_params(self, params) -> 'Config': method to_params (line 236) | def to_params(self, keys: list = []) -> str: method _get_fernet_key (line 256) | def _get_fernet_key(self, password: str) -> bytes: method _encode_preferences (line 286) | def _encode_preferences(self) -> str: method _decode_preferences (line 297) | def _decode_preferences(self, preferences: str) -> dict: FILE: app/models/endpoint.py class Endpoint (line 4) | class Endpoint(Enum): method __str__ (line 17) | def __str__(self): method in_path (line 20) | def in_path(self, path: str) -> bool: FILE: app/models/g_classes.py class GClasses (line 4) | class GClasses: method replace_css_classes (line 26) | def replace_css_classes(cls, soup: BeautifulSoup) -> BeautifulSoup: method __str__ (line 47) | def __str__(self): FILE: app/request.py class TorError (line 22) | class TorError(Exception): method __init__ (line 32) | def __init__(self, message, disable=False) -> None: function send_tor_signal (line 38) | def send_tor_signal(signal: Signal) -> bool: function gen_user_agent (line 71) | def gen_user_agent(config, is_mobile) -> str: function gen_query (line 119) | def gen_query(query, args, config) -> str: class Request (line 208) | class Request: method __init__ (line 218) | def __init__(self, normal_ua, root_path, config: Config, http_client=N... method __getitem__ (line 279) | def __getitem__(self, name): method autocomplete (line 282) | def autocomplete(self, query) -> list: method send (line 323) | def send(self, base_url='', query='', attempt=0, FILE: app/routes.py function get_search_name (line 44) | def get_search_name(tbm): function auth_required (line 50) | def auth_required(f): function session_required (line 79) | def session_required(f): function before_request_func (line 129) | def before_request_func(): function after_request_func (line 174) | def after_request_func(resp): function unknown_page (line 198) | def unknown_page(e): function healthz (line 204) | def healthz(): function index (line 211) | def index(): function opensearch (line 238) | def opensearch(): function search_html (line 260) | def search_html(): function autocomplete (line 268) | def autocomplete(): function clean_text_spacing (line 299) | def clean_text_spacing(text: str) -> str: function search (line 332) | def search(): function config (line 634) | def config(): function imgres (line 691) | def imgres(): function element (line 698) | def element(): function window (line 742) | def window(): function robots (line 814) | def robots(): function favicon (line 823) | def favicon(): function page_not_found (line 828) | def page_not_found(e): function internal_error (line 833) | def internal_error(e): function run_app (line 876) | def run_app() -> None: FILE: app/services/cse_client.py class CSEException (line 19) | class CSEException(Exception): method __init__ (line 21) | def __init__(self, message: str, code: int = 500, is_quota_error: bool... class CSEError (line 29) | class CSEError: method is_quota_exceeded (line 35) | def is_quota_exceeded(self) -> bool: method is_invalid_key (line 39) | def is_invalid_key(self) -> bool: class CSEResult (line 44) | class CSEResult: class CSEResponse (line 61) | class CSEResponse: method has_error (line 72) | def has_error(self) -> bool: method has_results (line 76) | def has_results(self) -> bool: class CSEClient (line 80) | class CSEClient: method __init__ (line 94) | def __init__(self, api_key: str, cse_id: str, timeout: float = 10.0): method search (line 107) | def search( method close (line 233) | def close(self): method __enter__ (line 237) | def __enter__(self): method __exit__ (line 240) | def __exit__(self, *args): function cse_results_to_html (line 244) | def cse_results_to_html(response: CSEResponse, query: str) -> str: function _escape_html (line 347) | def _escape_html(text: str) -> str: function _error_html (line 359) | def _error_html(title: str, message: str) -> str: function _no_results_html (line 375) | def _no_results_html(query: str) -> str: function _image_results_html (line 390) | def _image_results_html(response: CSEResponse, query: str) -> str: function _pagination_html (line 431) | def _pagination_html(current_start: int, query: str) -> str: FILE: app/services/http_client.py class HttpxClient (line 17) | class HttpxClient: method __init__ (line 24) | def __init__( method _determine_verify_setting (line 64) | def _determine_verify_setting(self): method _build_client (line 86) | def _build_client(self, client_kwargs: Dict[str, Any], verify: Any) ->... method proxies (line 118) | def proxies(self) -> Dict[str, str]: method _cache_key (line 121) | def _cache_key(self, method: str, url: str, headers: Optional[Dict[str... method get (line 125) | def get(self, method _recreate_client (line 189) | def _recreate_client(self) -> None: method close (line 216) | def close(self) -> None: FILE: app/services/provider.py function _proxies_key (line 10) | def _proxies_key(proxies: Dict[str, str]) -> Tuple[Tuple[str, str], Tupl... function get_http_client (line 18) | def get_http_client(proxies: Dict[str, str]) -> HttpxClient: function close_all_clients (line 32) | def close_all_clients() -> None: FILE: app/static/js/header.js function tackOnParams (line 30) | function tackOnParams(str) { FILE: app/static/js/keyboard.js function goUp (line 39) | function goUp () { function goDown (line 44) | function goDown () { function focusResult (line 48) | function focusResult (idx) { function focusSearch (line 54) | function focusSearch () { FILE: app/utils/bangs.py function load_all_bangs (line 11) | def load_all_bangs(ddg_bangs_file: str, ddg_bangs: dict = {}): function gen_bangs_json (line 57) | def gen_bangs_json(bangs_file: str) -> None: function suggest_bang (line 90) | def suggest_bang(query: str) -> list[str]: function resolve_bang (line 104) | def resolve_bang(query: str) -> str: FILE: app/utils/misc.py function fetch_favicon (line 30) | def fetch_favicon(url: str) -> bytes: function gen_file_hash (line 50) | def gen_file_hash(path: str, static_file: str) -> str: function read_config_bool (line 59) | def read_config_bool(var: str, default: bool=False) -> bool: function get_client_ip (line 67) | def get_client_ip(r: Request) -> str: function get_request_url (line 74) | def get_request_url(url: str) -> str: function get_proxy_host_url (line 81) | def get_proxy_host_url(r: Request, default: str, root=False) -> str: function check_for_update (line 98) | def check_for_update(version_url: str, current: str) -> int: function get_abs_url (line 111) | def get_abs_url(url, page_url): function list_to_dict (line 125) | def list_to_dict(lst: list) -> dict: function encrypt_string (line 132) | def encrypt_string(key: bytes, string: str) -> str: function decrypt_string (line 137) | def decrypt_string(key: bytes, string: str) -> str: FILE: app/utils/results.py function contains_cjko (line 54) | def contains_cjko(s: str) -> bool: function bold_search_terms (line 75) | def bold_search_terms(response: str, query: str) -> BeautifulSoup: function has_ad_content (line 125) | def has_ad_content(element: str) -> bool: function get_first_link (line 140) | def get_first_link(soup) -> str: function get_site_alt (line 166) | def get_site_alt(link: str, site_alts: dict = SITE_ALTS) -> str: function filter_link_args (line 230) | def filter_link_args(link: str) -> str: function append_nojs (line 263) | def append_nojs(result: BeautifulSoup) -> None: function append_anon_view (line 279) | def append_anon_view(result: BeautifulSoup, config: Config) -> None: function check_currency (line 302) | def check_currency(response: str) -> dict: function add_currency_card (line 352) | def add_currency_card(soup: BeautifulSoup, function get_tabs_content (line 419) | def get_tabs_content(tabs: dict, FILE: app/utils/search.py function needs_https (line 17) | def needs_https(url: str) -> bool: function has_captcha (line 37) | def has_captcha(results: str) -> bool: class Search (line 50) | class Search: method __init__ (line 59) | def __init__(self, request, config, session_key, cookies_disabled=Fals... method __getitem__ (line 74) | def __getitem__(self, name) -> Any: method __setitem__ (line 77) | def __setitem__(self, name, value) -> None: method __delitem__ (line 80) | def __delitem__(self, name) -> None: method __contains__ (line 83) | def __contains__(self, name) -> bool: method new_search_query (line 86) | def new_search_query(self) -> str: method generate_response (line 125) | def generate_response(self) -> str: method _generate_cse_response (line 161) | def _generate_cse_response(self, content_filter: Filter, root_url: str... method _generate_scrape_response (line 218) | def _generate_scrape_response(self, content_filter: Filter, root_url: ... FILE: app/utils/session.py function generate_key (line 7) | def generate_key() -> bytes: function valid_user_session (line 23) | def valid_user_session(session: dict) -> bool: FILE: app/utils/ua_generator.py function generate_opera_ua (line 138) | def generate_opera_ua() -> str: function generate_ua_pool (line 171) | def generate_ua_pool(count: int = 10) -> List[str]: function save_ua_pool (line 206) | def save_ua_pool(uas: List[str], cache_path: str) -> None: function load_custom_ua_list (line 228) | def load_custom_ua_list(file_path: str) -> List[str]: function load_ua_pool (line 251) | def load_ua_pool(cache_path: str, count: int = 10) -> List[str]: function get_random_ua (line 317) | def get_random_ua(ua_pool: List[str]) -> str: FILE: app/utils/widgets.py function add_ip_card (line 8) | def add_ip_card(html_soup: BeautifulSoup, ip: str) -> BeautifulSoup: function add_calculator_card (line 44) | def add_calculator_card(html_soup: BeautifulSoup) -> BeautifulSoup: FILE: misc/check_google_user_agents.py function read_user_agents (line 74) | def read_user_agents(file_path: str) -> List[str]: function test_user_agent (line 88) | def test_user_agent(user_agent: str, query: str = "test", timeout: float... function main (line 165) | def main(): FILE: misc/generate_uas.py function generate_opera_ua (line 120) | def generate_opera_ua(): function generate_ua_pool (line 139) | def generate_ua_pool(count=10): function main (line 163) | def main(): FILE: misc/update-translations.py function format_lang (line 8) | def format_lang(lang: str) -> str: function translate (line 21) | def translate(v: str, lang: str) -> str: FILE: test/conftest.py function mock_google (line 19) | def mock_google(monkeypatch): function client (line 51) | def client(): FILE: test/mock_google.py function _result_block (line 12) | def _result_block(title, href, snippet): function _main_results (line 27) | def _main_results(query, params, language='', country=''): function build_mock_response (line 109) | def build_mock_response(raw_query, language='', country=''): FILE: test/test_alts.py function build_soup (line 13) | def build_soup(html: str): function make_filter (line 17) | def make_filter(soup: BeautifulSoup): function test_no_duplicate_alt_prefix_reddit (line 26) | def test_no_duplicate_alt_prefix_reddit(monkeypatch): function test_wikipedia_simple_no_lang_param (line 56) | def test_wikipedia_simple_no_lang_param(monkeypatch): function test_single_pass_description_replacement (line 85) | def test_single_pass_description_replacement(monkeypatch): FILE: test/test_autocomplete.py function test_autocomplete_get (line 4) | def test_autocomplete_get(client): function test_autocomplete_post (line 11) | def test_autocomplete_post(client): FILE: test/test_autocomplete_xml.py class FakeHttpClient (line 6) | class FakeHttpClient: method get (line 7) | def get(self, url, headers=None, cookies=None, retries=0, backoff_seco... method close (line 20) | def close(self): function test_autocomplete_parsing (line 24) | def test_autocomplete_parsing(): FILE: test/test_http_client.py function test_httpxclient_follow_redirects_and_proxy (line 9) | def test_httpxclient_follow_redirects_and_proxy(monkeypatch): FILE: test/test_json.py function stubbed_search_response (line 11) | def stubbed_search_response(monkeypatch): function test_search_json_accept (line 33) | def test_search_json_accept(client, stubbed_search_response): function test_search_json_format_param (line 52) | def test_search_json_format_param(client, stubbed_search_response): function test_search_json_feeling_lucky (line 60) | def test_search_json_feeling_lucky(client, monkeypatch): FILE: test/test_misc.py function test_generate_user_keys (line 14) | def test_generate_user_keys(): function test_valid_session (line 20) | def test_valid_session(client): function test_valid_translation_keys (line 26) | def test_valid_translation_keys(client): function test_query_decryption (line 38) | def test_query_decryption(client): function test_prefs_url (line 60) | def test_prefs_url(client): FILE: test/test_results.py function get_search_results (line 15) | def get_search_results(data): function test_get_results (line 36) | def test_get_results(client, monkeypatch): function test_post_results (line 56) | def test_post_results(client): function test_translate_search (line 61) | def test_translate_search(client): function test_block_results (line 71) | def test_block_results(client): function test_view_my_ip (line 97) | def test_view_my_ip(client, monkeypatch): function test_recent_results (line 113) | def test_recent_results(client, monkeypatch): function test_leading_slash_search (line 148) | def test_leading_slash_search(client): function test_site_alt_prefix_skip (line 168) | def test_site_alt_prefix_skip(): FILE: test/test_routes.py function test_main (line 9) | def test_main(client): function test_search (line 14) | def test_search(client): function test_feeling_lucky (line 19) | def test_feeling_lucky(client): function test_ddg_bang (line 31) | def test_ddg_bang(client): function test_custom_bang (line 58) | def test_custom_bang(client): function test_config (line 65) | def test_config(client): function test_opensearch (line 88) | def test_opensearch(client): FILE: test/test_routes_json.py function test_captcha_json_block (line 9) | def test_captcha_json_block(client, monkeypatch): FILE: test/test_tor.py class FakeResponse (line 8) | class FakeResponse: method __init__ (line 9) | def __init__(self, text: str = '', status_code: int = 200, content: by... class FakeHttpClient (line 15) | class FakeHttpClient: method __init__ (line 16) | def __init__(self, tor_ok: bool): method get (line 19) | def get(self, url, headers=None, cookies=None, retries=0, backoff_seco... method close (line 24) | def close(self): function build_config (line 28) | def build_config(tor: bool) -> Config: function test_tor_validation_success (line 34) | def test_tor_validation_success(monkeypatch): function test_tor_validation_failure (line 45) | def test_tor_validation_failure(monkeypatch):