Repository: benbusby/whoogle-search
File: app/utils/results.py (Python)

Code before:
        ip_text = html_soup.new_tag("div")
        ip_text.string = "Your public IP address"
        ip_text["class"] = "kCrYT ip-text-div"

        # Adding all the above html tags to the IP card
        ip_tag.append(ip_address)
        ip_tag.append(ip_text)

        # Finding the element before which the IP card would be placed
        f_link = html_soup.select_one(".BNeawe.vvjwJb.AP7Wnd")
        ref_element = f_link.find_parent(class_="ZINbbc xpd O9g5cc" +
                                                " uUPGi")

        # Inserting the element
        ref_element.insert_before(ip_tag)
    return html_soup


def check_currency(response: str):
    """Check whether the results have currency conversion

    Args:
        response: Search query Result

    Returns:
        list

    """
    soup = BeautifulSoup(response, 'html.parser')
    a = soup.find(class_='ZINbbc xpd O9g5cc uUPGi')
    tag = a.find('a')
    if tag and tag['href'] == 'https://g.co/gfd':
        currency1 = soup.find(class_="xUrNXd UMOHqf")
        currency2 = soup.select_one('.kCrYT'
                                    ' .BNeawe.iBp4i.AP7Wnd '
                                    '.BNeawe.iBp4i.AP7Wnd')
        currency1 = currency1.text.rstrip('=').split(' ', 1)
        currency2 = currency2.text.split(' ', 1)
        return [float(currency1[0]), currency1[1],
                float(currency2[0]), currency2[1]]
    return None


def add_currency_b(soup: BeautifulSoup,
                   conversion_details: list) -> BeautifulSoup:
    """Adds the currency conversion boxes
    to response of the search query

    Args:
        soup: Parsed search result
        conversion_details: list of currency

Review comment (suggestion):
Since the returned list contains a specific set of values that you're expecting in `add_currency_details`, it might be good to document those here. Or it might be better to a key-value dict so that you can reference them by more fitting names (see below)

Code after:
        ip_text = html_soup.new_tag("div")
        ip_text.string = "Your public IP address"
        ip_text["class"] = "kCrYT ip-text-div"

        # Adding all the above html tags to the IP card
        ip_tag.append(ip_address)
        ip_tag.append(ip_text)

        # Finding the element before which the IP card would be placed
        f_link = html_soup.select_one(".BNeawe.vvjwJb.AP7Wnd")
        ref_element = f_link.find_parent(class_="ZINbbc xpd O9g5cc" +
                                                " uUPGi")

        # Inserting the element
        ref_element.insert_before(ip_tag)
    return html_soup


def check_currency(response: str) -> dict:
    """Check whether the results have currency conversion

    Args:
        response: Search query Result

    Returns:
        dict: Consists of currency names and values

    """
    soup = BeautifulSoup(response, 'html.parser')
    currency_link = soup.find('a', {'href': 'https://g.co/gfd'})
    if currency_link:
        while 'class' not in currency_link.attrs or \
                'ZINbbc' not in currency_link.attrs['class']:
            currency_link = currency_link.parent
        currency_link = currency_link.find_all(class_='BNeawe')
        currency1 = currency_link[0].text
        currency2 = currency_link[1].text
        currency1 = currency1.rstrip('=').split(' ', 1)
        currency2 = currency2.split(' ', 1)
        if currency2[0][-3] == ',':
            currency1[0] = currency1[0].replace('.', '')
            currency1[0] = currency1[0].replace(',', '.')
            currency2[0] = currency2[0].replace('.', '')
            currency2[0] = currency2[0].replace(',', '.')
        else:
            currency1[0] = currency1[0].replace(',', '')
            currency2[0] = currency2[0].replace(',', '')
        return {'currencyValue1': float(currency1[0]),
                'currencyLabel1': currency1[1],
                'currencyValue2': float(currency2[0]),
                'currencyLabel2': currency2[1]