From 92d94d9ea77cd669086cec0b91be75fd20602be1 Mon Sep 17 00:00:00 2001 From: Ben Busby Date: Thu, 17 Dec 2020 15:24:18 -0500 Subject: [PATCH] PEP-8: Fix filter class formatting --- app/filter.py | 73 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 47 insertions(+), 26 deletions(-) diff --git a/app/filter.py b/app/filter.py index 5299b92..5fede0e 100644 --- a/app/filter.py +++ b/app/filter.py @@ -32,20 +32,27 @@ class Filter: def reskin(self, page): # Aesthetic only re-skinning if self.dark: - page = page.replace('fff', '000').replace('202124', 'ddd').replace('1967D2', '3b85ea') + page = page.replace( + 'fff', '000').replace( + '202124', 'ddd').replace( + '1967D2', '3b85ea') return page def encrypt_path(self, msg, is_element=False): # Encrypts path to avoid plaintext results in logs if is_element: - # Element paths are tracked differently in order for the element key to be regenerated - # once all elements have been loaded - enc_path = Fernet(self.user_keys['element_key']).encrypt(msg.encode()).decode() + # Element paths are encrypted separately from text, to allow key + # regeneration once all items have been served to the user + enc_path = Fernet( + self.user_keys['element_key'] + ).encrypt(msg.encode()).decode() self._elements += 1 return enc_path - return Fernet(self.user_keys['text_key']).encrypt(msg.encode()).decode() + return Fernet( + self.user_keys['text_key'] + ).encrypt(msg.encode()).decode() def clean(self, soup): self.main_divs = soup.find('div', {'id': 'main'}) @@ -74,8 +81,8 @@ class Filter: footer = soup.find('footer') if footer: # Remove divs that have multiple links beyond just page navigation - [_.decompose() for _ in footer.find_all('div', recursive=False) - if len(_.find_all('a', href=True)) > 3] + [_.decompose() for _ in footer.find_all('div', recursive=False) + if len(_.find_all('a', href=True)) > 3] header = soup.find('header') if header: @@ -88,8 +95,9 @@ class Filter: return for div in [_ for _ in self.main_divs.find_all('div', recursive=True)]: - has_ad = len([_ for _ in div.find_all('span', recursive=True) if has_ad_content(_.text)]) - _ = div.decompose() if has_ad else None + div_ads = [_ for _ in div.find_all('span', recursive=True) + if has_ad_content(_.text)] + _ = div.decompose() if len(div_ads) else None def fix_question_section(self): if not self.main_divs: @@ -97,14 +105,14 @@ class Filter: question_divs = [_ for _ in self.main_divs.find_all( 'div', recursive=False - ) if len(_.find_all('h2')) > 0] + ) if len(_.find_all('h2')) > 0] if len(question_divs) == 0: return # Wrap section in details element to allow collapse/expand - details = BeautifulSoup(features='lxml').new_tag('details') - summary = BeautifulSoup(features='lxml').new_tag('summary') + details = BeautifulSoup('html.parser').new_tag('details') + summary = BeautifulSoup('html.parser').new_tag('summary') summary.string = question_divs[0].find('h2').text question_divs[0].find('h2').decompose() details.append(summary) @@ -113,7 +121,7 @@ class Filter: for question_div in question_divs: questions = [_ for _ in question_div.find_all( 'div', recursive=True - ) if _.text.endswith('?')] + ) if _.text.endswith('?')] for question in questions: question['style'] = 'padding: 10px; font-style: italic;' @@ -131,11 +139,15 @@ class Filter: element['src'] = BLANK_B64 return - element['src'] = 'element?url=' + self.encrypt_path(element_src, is_element=True) + \ - '&type=' + urlparse.quote(mime) - # TODO: Non-mobile image results link to website instead of image + element['src'] = 'element?url=' + self.encrypt_path( + element_src, + is_element=True) + '&type=' + urlparse.quote(mime) + + # FIXME: Non-mobile image results link to website instead of image # if not self.mobile: - # img.append(BeautifulSoup(FULL_RES_IMG.format(element_src), 'html.parser')) + # img.append( + # BeautifulSoup(FULL_RES_IMG.format(element_src), + # 'html.parser')) def update_styling(self, soup): # Remove unnecessary button(s) @@ -149,8 +161,9 @@ class Filter: # Update logo logo = soup.find('a', {'class': 'l'}) if logo and self.mobile: - logo['style'] = 'display:flex; justify-content:center; align-items:center; color:#685e79; ' \ - 'font-size:18px; ' + logo['style'] = ('display:flex; justify-content:center; ' + 'align-items:center; color:#685e79; ' + 'font-size:18px; ') # Fix search bar length on mobile try: @@ -163,7 +176,7 @@ class Filter: # Replace href with only the intended destination (no "utm" type tags) href = link['href'].replace('https://www.google.com', '') if 'advanced_search' in href or 'tbm=shop' in href: - # TODO: The "Shopping" tab requires further filtering (see #136) + # FIXME: The "Shopping" tab requires further filtering (see #136) # Temporarily removing all links to that tab for now. link.decompose() return @@ -171,20 +184,26 @@ class Filter: link['target'] = '_blank' result_link = urlparse.urlparse(href) - query_link = parse_qs(result_link.query)['q'][0] if '?q=' in href else '' + query_link = parse_qs( + result_link.query + )['q'][0] if '?q=' in href else '' if query_link.startswith('/'): - # Internal google links (i.e. mail, maps, etc) should still be forwarded to Google + # Internal google links (i.e. mail, maps, etc) should still + # be forwarded to Google link['href'] = 'https://google.com' + query_link elif '/search?q=' in href: - # "li:1" implies the query should be interpreted verbatim, so we wrap it in double quotes + # "li:1" implies the query should be interpreted verbatim, + # which is accomplished by wrapping the query in double quotes if 'li:1' in href: query_link = '"' + query_link + '"' new_search = 'search?q=' + self.encrypt_path(query_link) query_params = parse_qs(urlparse.urlparse(href).query) for param in VALID_PARAMS: - param_val = query_params[param][0] if param in query_params else '' + if param not in query_params: + continue + param_val = query_params[param][0] new_search += '&' + param + '=' + param_val link['href'] = new_search elif 'url?q=' in href: @@ -199,9 +218,11 @@ class Filter: # Replace link location if "alts" config is enabled if self.alt_redirect: - # Search and replace all link descriptions with alternative location + # Search and replace all link descriptions + # with alternative location link['href'] = get_site_alt(link['href']) - link_desc = link.find_all(text=re.compile('|'.join(SITE_ALTS.keys()))) + link_desc = link.find_all( + text=re.compile('|'.join(SITE_ALTS.keys()))) if len(link_desc) == 0: return