From cb0b8868695d2dc4bad5ca7a0eaa4e63f3fc6e07 Mon Sep 17 00:00:00 2001 From: Ben Busby Date: Thu, 17 Dec 2020 15:09:09 -0500 Subject: [PATCH] PEP-8: Fix formatting in config model and utils --- app/models/config.py | 24 ++++++++++-------- app/utils/filter_utils.py | 17 ++++++++----- app/utils/routing_utils.py | 52 +++++++++++++++++++++++++------------- 3 files changed, 58 insertions(+), 35 deletions(-) diff --git a/app/models/config.py b/app/models/config.py index e69e037..4fe0092 100644 --- a/app/models/config.py +++ b/app/models/config.py @@ -128,7 +128,7 @@ class Config: {'name': 'Fiji', 'value': 'countryFJ'}, {'name': 'Finland', 'value': 'countryFI'}, {'name': 'France', 'value': 'countryFR'}, - {'name': 'France\, Metropolitan', 'value': 'countryFX'}, + {'name': r'France\, Metropolitan', 'value': 'countryFX'}, {'name': 'French Guiana', 'value': 'countryGF'}, {'name': 'French Polynesia', 'value': 'countryPF'}, {'name': 'French Southern Territories', 'value': 'countryTF'}, @@ -167,7 +167,8 @@ class Config: {'name': 'Kazakhstan', 'value': 'countryKZ'}, {'name': 'Kenya', 'value': 'countryKE'}, {'name': 'Kiribati', 'value': 'countryKI'}, - {'name': 'Korea, Democratic People\'s Republic of', 'value': 'countryKP'}, + {'name': 'Korea, Democratic People\'s Republic of', + 'value': 'countryKP'}, {'name': 'Korea, Republic of', 'value': 'countryKR'}, {'name': 'Kuwait', 'value': 'countryKW'}, {'name': 'Kyrgyzstan', 'value': 'countryKG'}, @@ -181,7 +182,8 @@ class Config: {'name': 'Lithuania', 'value': 'countryLT'}, {'name': 'Luxembourg', 'value': 'countryLU'}, {'name': 'Macao', 'value': 'countryMO'}, - {'name': 'Macedonia, the Former Yugosalv Republic of', 'value': 'countryMK'}, + {'name': 'Macedonia, the Former Yugosalv Republic of', + 'value': 'countryMK'}, {'name': 'Madagascar', 'value': 'countryMG'}, {'name': 'Malawi', 'value': 'countryMW'}, {'name': 'Malaysia', 'value': 'countryMY'}, @@ -253,7 +255,8 @@ class Config: {'name': 'Solomon Islands', 'value': 'countrySB'}, {'name': 'Somalia', 'value': 'countrySO'}, {'name': 'South Africa', 'value': 'countryZA'}, - {'name': 'South Georgia and the South Sandwich Islands', 'value': 'countryGS'}, + {'name': 'South Georgia and the South Sandwich Islands', + 'value': 'countryGS'}, {'name': 'Spain', 'value': 'countryES'}, {'name': 'Sri Lanka', 'value': 'countryLK'}, {'name': 'Sudan', 'value': 'countrySD'}, @@ -310,6 +313,12 @@ class Config: self.alts = False self.new_tab = False self.get_only = False + self.safe_keys = [ + 'lang_search', + 'lang_interface', + 'ctry', + 'dark' + ] for key, value in kwargs.items(): setattr(self, key, value) @@ -338,12 +347,7 @@ class Config: array """ - return key in [ - 'lang_search', - 'lang_interface', - 'ctry', - 'dark' - ] + return key in self.safe_keys def from_params(self, params) -> 'Config': """Modify user config with search parameters. This is primarily diff --git a/app/utils/filter_utils.py b/app/utils/filter_utils.py index 0efb4ff..877c38c 100644 --- a/app/utils/filter_utils.py +++ b/app/utils/filter_utils.py @@ -7,14 +7,16 @@ SKIP_ARGS = ['ref_src', 'utm'] FULL_RES_IMG = '
Full Image' GOOG_IMG = '/images/branding/searchlogo/1x/googlelogo' LOGO_URL = GOOG_IMG + '_desk' -BLANK_B64 = ''' -data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAQAAAAnOwc2AAAAD0lEQVR42mNkwAIYh7IgAAVVAAuInjI5AAAAAElFTkSuQmCC -''' +BLANK_B64 = ('data:image/png;base64,' + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAQAAAAnOwc2AAAAD0lEQVR42mNkw' + 'AIYh7IgAAVVAAuInjI5AAAAAElFTkSuQmCC') +# Ad keywords BLACKLIST = [ - 'ad', 'anuncio', 'annuncio', 'annonce', 'Anzeige', '广告', '廣告', 'Reklama', 'Реклама', 'Anunț', '광고', - 'annons', 'Annonse', 'Iklan', '広告', 'Augl.', 'Mainos', 'Advertentie', 'إعلان', 'Գովազդ', 'विज्ञापन', 'Reklam', - 'آگهی', 'Reklāma', 'Reklaam', 'Διαφήμιση', 'מודעה', 'Hirdetés', 'Anúncio' + 'ad', 'anuncio', 'annuncio', 'annonce', 'Anzeige', '广告', '廣告', 'Reklama', + 'Реклама', 'Anunț', '광고', 'annons', 'Annonse', 'Iklan', '広告', 'Augl.', + 'Mainos', 'Advertentie', 'إعلان', 'Գովազդ', 'विज्ञापन', 'Reklam', 'آگهی', + 'Reklāma', 'Reklaam', 'Διαφήμιση', 'מודעה', 'Hirdetés', 'Anúncio' ] SITE_ALTS = { @@ -25,7 +27,8 @@ SITE_ALTS = { def has_ad_content(element: str): - return element.upper() in (value.upper() for value in BLACKLIST) or 'ⓘ' in element + return element.upper() in (value.upper() for value in BLACKLIST) \ + or 'ⓘ' in element def get_first_link(soup): diff --git a/app/utils/routing_utils.py b/app/utils/routing_utils.py index 703b7e0..3822d48 100644 --- a/app/utils/routing_utils.py +++ b/app/utils/routing_utils.py @@ -1,25 +1,26 @@ from app.filter import Filter, get_first_link from app.utils.session_utils import generate_user_keys from app.request import gen_query -from bs4 import BeautifulSoup +from bs4 import BeautifulSoup as bsoup from cryptography.fernet import Fernet, InvalidToken from flask import g from typing import Any, Tuple - TOR_BANNER = '

You are using Tor


' class RoutingUtils: def __init__(self, request, config, session, cookies_disabled=False): - self.request_params = request.args if request.method == 'GET' else request.form + method = request.method + self.request_params = request.args if method == 'GET' else request.form self.user_agent = request.headers.get('User-Agent') self.feeling_lucky = False self.config = config self.session = session self.query = '' self.cookies_disabled = cookies_disabled - self.search_type = self.request_params.get('tbm') if 'tbm' in self.request_params else '' + self.search_type = self.request_params.get( + 'tbm') if 'tbm' in self.request_params else '' def __getitem__(self, name): return getattr(self, name) @@ -45,7 +46,9 @@ class RoutingUtils: else: # Attempt to decrypt if this is an internal link try: - q = Fernet(self.session['fernet_keys']['text_key']).decrypt(q.encode()).decode() + q = Fernet( + self.session['fernet_keys']['text_key'] + ).decrypt(q.encode()).decode() except InvalidToken: pass @@ -53,29 +56,40 @@ class RoutingUtils: self.session['fernet_keys']['text_key'] = generate_user_keys( cookies_disabled=self.cookies_disabled)['text_key'] - # Format depending on whether or not the query is a "feeling lucky" query + # Strip leading '! ' for "feeling lucky" queries self.feeling_lucky = q.startswith('! ') self.query = q[2:] if self.feeling_lucky else q return self.query def bang_operator(self, bangs_dict: dict) -> str: for operator in bangs_dict.keys(): - if self.query.split(' ')[0] == operator: - return bangs_dict[operator]['url'].format(self.query.replace(operator, '').strip()) + if self.query.split(' ')[0] != operator: + continue + + return bangs_dict[operator]['url'].format( + self.query.replace(operator, '').strip()) return '' def generate_response(self) -> Tuple[Any, int]: mobile = 'Android' in self.user_agent or 'iPhone' in self.user_agent - content_filter = Filter(self.session['fernet_keys'], mobile=mobile, config=self.config) - full_query = gen_query(self.query, self.request_params, self.config, content_filter.near) + content_filter = Filter( + self.session['fernet_keys'], + mobile=mobile, + config=self.config) + full_query = gen_query( + self.query, + self.request_params, + self.config, + content_filter.near) get_body = g.user_request.send(query=full_query) # Produce cleanable html soup from response - html_soup = BeautifulSoup(content_filter.reskin(get_body.text), 'html.parser') - html_soup.insert(0, BeautifulSoup( - TOR_BANNER, - features='lxml') if g.user_request.tor_valid else BeautifulSoup("", features="lxml")) + html_soup = bsoup(content_filter.reskin(get_body.text), 'html.parser') + html_soup.insert( + 0, + bsoup(TOR_BANNER, 'html.parser') + if g.user_request.tor_valid else bsoup('', 'html.parser')) if self.feeling_lucky: return get_first_link(html_soup), 1 @@ -83,11 +97,13 @@ class RoutingUtils: formatted_results = content_filter.clean(html_soup) # Append user config to all search links, if available - param_str = ''.join('&{}={}'.format(k, v) - for k, v in self.request_params.to_dict(flat=True).items() - if self.config.is_safe_key(k)) + param_str = ''.join('&{}={}'.format(k, v) + for k, v in + self.request_params.to_dict(flat=True).items() + if self.config.is_safe_key(k)) for link in formatted_results.find_all('a', href=True): - if 'search?' not in link['href'] or link['href'].index('search?') > 1: + if 'search?' not in link['href'] or link['href'].index( + 'search?') > 1: continue link['href'] += param_str