implementation to pass tests
This commit is contained in:
parent
d46148a510
commit
94568c6165
@ -1,3 +1,4 @@
|
|||||||
|
DEV_MODE = False
|
||||||
MAIN_LOGGER_NAME = 'mwfin'
|
MAIN_LOGGER_NAME = 'mwfin'
|
||||||
|
|
||||||
HTML_PARSER = 'html.parser'
|
HTML_PARSER = 'html.parser'
|
||||||
|
@ -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,
|
from .constants import (HTML_PARSER, BASE_URL, END_DATE, BS, IS, CF, FIN_STMT_URL_SUFFIX, FIN_STMT_ITEMS,
|
||||||
DEFAULT_CONCURRENT_BATCH_SIZE)
|
DEFAULT_CONCURRENT_BATCH_SIZE)
|
||||||
|
from .exceptions import UnknownFinancialStatementItem
|
||||||
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
@ -48,15 +49,21 @@ def is_relevant_table_row(tr: Tag) -> bool:
|
|||||||
return FIN_STMT_ITEMS[item_name]
|
return FIN_STMT_ITEMS[item_name]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
log.warning(f"Unknown item name '{item_name}' found in financial statement.")
|
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]:
|
def find_relevant_table_rows(soup: BeautifulSoup) -> List[Tag]:
|
||||||
"""
|
"""
|
||||||
Returns the table rows containing the data of interest.
|
Returns the table rows containing the data of interest.
|
||||||
"""
|
"""
|
||||||
trs = soup.find('div', attrs={'class': 'financials'}).tbody.find_all('tr')
|
trs = []
|
||||||
return [tr for tr in trs if is_relevant_table_row(tr)]
|
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]]:
|
def extract_row_data(tr: Tag) -> tuple[str, tuple[int]]:
|
||||||
|
@ -70,14 +70,17 @@ class FunctionsTestCase(IsolatedAsyncioTestCase):
|
|||||||
def test_find_relevant_table_rows(self, mock_is_relevant_table_row):
|
def test_find_relevant_table_rows(self, mock_is_relevant_table_row):
|
||||||
mock_is_relevant_table_row.return_value = True
|
mock_is_relevant_table_row.return_value = True
|
||||||
expected_output = self.test_soup.find('div', attrs={'class': 'financials'}).tbody.find_all('tr')
|
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)
|
output = functions.find_relevant_table_rows(self.test_soup)
|
||||||
self.assertListEqual(expected_output, output)
|
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()
|
mock_is_relevant_table_row.side_effect = UnknownFinancialStatementItem()
|
||||||
expected_output = self.test_soup.find_all('thistagdoesntexist')
|
expected_output = self.test_soup.find_all('thistagdoesntexist')
|
||||||
output = functions.find_relevant_table_rows(self.test_soup)
|
output = functions.find_relevant_table_rows(self.test_soup)
|
||||||
self.assertListEqual(expected_output, output)
|
self.assertListEqual(expected_output, output)
|
||||||
|
mock_is_relevant_table_row.assert_has_calls([call(tr0), call(tr1)])
|
||||||
|
|
||||||
def test_extract_row_data(self):
|
def test_extract_row_data(self):
|
||||||
test_row = self.test_soup.find('div', attrs={'class': 'financials'}).tbody.tr
|
test_row = self.test_soup.find('div', attrs={'class': 'financials'}).tbody.tr
|
||||||
|
Loading…
Reference in New Issue
Block a user