From 94568c616533a237febf2dd58c01b76321dfc54d Mon Sep 17 00:00:00 2001 From: Daniil Fajnberg Date: Fri, 3 Dec 2021 16:28:12 +0100 Subject: [PATCH] implementation to pass tests --- src/mwfin/constants.py | 1 + src/mwfin/functions.py | 13 ++++++++++--- tests/test_functions.py | 5 ++++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/mwfin/constants.py b/src/mwfin/constants.py index 2f92abb..5d778e8 100644 --- a/src/mwfin/constants.py +++ b/src/mwfin/constants.py @@ -1,3 +1,4 @@ +DEV_MODE = False MAIN_LOGGER_NAME = 'mwfin' HTML_PARSER = 'html.parser' diff --git a/src/mwfin/functions.py b/src/mwfin/functions.py index 8ca656b..4d1a041 100644 --- a/src/mwfin/functions.py +++ b/src/mwfin/functions.py @@ -9,6 +9,7 @@ from webutils import in_async_session, gather_in_batches from .constants import (HTML_PARSER, BASE_URL, END_DATE, BS, IS, CF, FIN_STMT_URL_SUFFIX, FIN_STMT_ITEMS, DEFAULT_CONCURRENT_BATCH_SIZE) +from .exceptions import UnknownFinancialStatementItem log = logging.getLogger(__name__) @@ -48,15 +49,21 @@ def is_relevant_table_row(tr: Tag) -> bool: return FIN_STMT_ITEMS[item_name] except KeyError: log.warning(f"Unknown item name '{item_name}' found in financial statement.") - return False + raise UnknownFinancialStatementItem def find_relevant_table_rows(soup: BeautifulSoup) -> List[Tag]: """ Returns the table rows containing the data of interest. """ - trs = soup.find('div', attrs={'class': 'financials'}).tbody.find_all('tr') - return [tr for tr in trs if is_relevant_table_row(tr)] + trs = [] + for tr in soup.find('div', attrs={'class': 'financials'}).tbody.find_all('tr'): + try: + if is_relevant_table_row(tr): + trs.append(tr) + except UnknownFinancialStatementItem: + pass + return trs def extract_row_data(tr: Tag) -> tuple[str, tuple[int]]: diff --git a/tests/test_functions.py b/tests/test_functions.py index b1ec9fc..4c503e5 100644 --- a/tests/test_functions.py +++ b/tests/test_functions.py @@ -70,14 +70,17 @@ class FunctionsTestCase(IsolatedAsyncioTestCase): def test_find_relevant_table_rows(self, mock_is_relevant_table_row): mock_is_relevant_table_row.return_value = True expected_output = self.test_soup.find('div', attrs={'class': 'financials'}).tbody.find_all('tr') + tr0, tr1 = expected_output output = functions.find_relevant_table_rows(self.test_soup) self.assertListEqual(expected_output, output) - mock_is_relevant_table_row.assert_has_calls([call(expected_output[0]), call(expected_output[1])]) + mock_is_relevant_table_row.assert_has_calls([call(tr0), call(tr1)]) + mock_is_relevant_table_row.reset_mock() mock_is_relevant_table_row.side_effect = UnknownFinancialStatementItem() expected_output = self.test_soup.find_all('thistagdoesntexist') output = functions.find_relevant_table_rows(self.test_soup) self.assertListEqual(expected_output, output) + mock_is_relevant_table_row.assert_has_calls([call(tr0), call(tr1)]) def test_extract_row_data(self): test_row = self.test_soup.find('div', attrs={'class': 'financials'}).tbody.tr