From 74dca7a1ffc219fdc01d5ad08cfbd1553d750d4d Mon Sep 17 00:00:00 2001 From: aliziauddin Date: Fri, 30 Jun 2023 00:56:08 +0500 Subject: [PATCH 1/3] added page_count attribute in overview class --- finvizfinance/screener/overview.py | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/finvizfinance/screener/overview.py b/finvizfinance/screener/overview.py index 8f033bc..24f22a1 100644 --- a/finvizfinance/screener/overview.py +++ b/finvizfinance/screener/overview.py @@ -34,6 +34,7 @@ def __init__(self): v_page=self.v_page, signal="", filter="", ticker="" ) self._load_setting() + self.page_count = 0 def _load_setting(self): """load all the signals and filters.""" @@ -54,7 +55,8 @@ def _set_signal(self, signal): if signal not in self.signal_dict and signal != "": signal_keys = list(self.signal_dict.keys()) raise ValueError( - "Invalid signal '{}'. Possible signal: {}".format(signal, signal_keys) + "Invalid signal '{}'. Possible signal: {}".format( + signal, signal_keys) ) elif signal != "": url_signal = "&s=" + self.signal_dict[signal] @@ -116,7 +118,8 @@ def _set_filters(self, filters_dict): if key not in self.filter_dict: filter_keys = list(self.filter_dict.keys()) raise ValueError( - "Invalid filter '{}'. Possible filter: {}".format(key, filter_keys) + "Invalid filter '{}'. Possible filter: {}".format( + key, filter_keys) ) if value not in self.filter_dict[key]["option"]: filter_options = list(self.filter_dict[key]["option"].keys()) @@ -173,7 +176,9 @@ def _get_page(self, soup): """Check the page number""" try: options = soup.find(id="pageSelect").findAll("option") - return len(options) + page_count = len(options) + self.page_count = page_count + return page_count except: return 0 @@ -208,7 +213,8 @@ def _screener_helper(self, i, page, rows, df, num_col_index, table_header, limit """ if i == page - 1: df = self._get_table( - rows, df, num_col_index, table_header, limit=((limit - 1) % 20 + 1) + rows, df, num_col_index, table_header, limit=( + (limit - 1) % 20 + 1) ) else: df = self._get_table(rows, df, num_col_index, table_header) @@ -240,7 +246,8 @@ def screener_view( if order not in self.order_dict: order_keys = list(self.order_dict.keys()) raise ValueError( - "Invalid order '{}'. Possible order: {}".format(order, order_keys) + "Invalid order '{}'. Possible order: {}".format( + order, order_keys) ) url = self.url + "&" + self.order_dict[order] if not ascend: @@ -260,7 +267,8 @@ def screener_view( raise ValueError("Invalid page {}".format(select_page)) if limit != -1: limit = -1 - warnings.warn("Limit parameter is ignored when page is selected.") + warnings.warn( + "Limit parameter is ignored when page is selected.") start_page = select_page - 1 end_page = select_page @@ -277,7 +285,8 @@ def screener_view( table = soup.find("table", class_="table-light") rows = table.findAll("tr") table_header = [i.text.strip() for i in rows[0].findAll("td")][1:] - num_col_index = [table_header.index(i) for i in table_header if i in NUMBER_COL] + num_col_index = [table_header.index( + i) for i in table_header if i in NUMBER_COL] df = pd.DataFrame([], columns=table_header) if not select_page or select_page == 1: df = self._screener_helper( @@ -297,7 +306,8 @@ def screener_view( if order == "ticker": url += "&r={}".format(i * 20 + 1) else: - url += "&r={}".format(i * 20 + 1) + "&" + self.order_dict[order] + url += "&r={}".format(i * 20 + 1) + \ + "&" + self.order_dict[order] if not ascend: url = url.replace("o=", "o=-") soup = web_scrap(url) From 8ec9519ea99823bb623287c2b8704b9f6861eba5 Mon Sep 17 00:00:00 2001 From: aliziauddin Date: Sat, 1 Jul 2023 00:56:38 +0500 Subject: [PATCH 2/3] remove prettier formatting --- finvizfinance/screener/overview.py | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/finvizfinance/screener/overview.py b/finvizfinance/screener/overview.py index 24f22a1..facf01d 100644 --- a/finvizfinance/screener/overview.py +++ b/finvizfinance/screener/overview.py @@ -55,8 +55,7 @@ def _set_signal(self, signal): if signal not in self.signal_dict and signal != "": signal_keys = list(self.signal_dict.keys()) raise ValueError( - "Invalid signal '{}'. Possible signal: {}".format( - signal, signal_keys) + "Invalid signal '{}'. Possible signal: {}".format(signal, signal_keys) ) elif signal != "": url_signal = "&s=" + self.signal_dict[signal] @@ -118,8 +117,7 @@ def _set_filters(self, filters_dict): if key not in self.filter_dict: filter_keys = list(self.filter_dict.keys()) raise ValueError( - "Invalid filter '{}'. Possible filter: {}".format( - key, filter_keys) + "Invalid filter '{}'. Possible filter: {}".format(key, filter_keys) ) if value not in self.filter_dict[key]["option"]: filter_options = list(self.filter_dict[key]["option"].keys()) @@ -213,8 +211,7 @@ def _screener_helper(self, i, page, rows, df, num_col_index, table_header, limit """ if i == page - 1: df = self._get_table( - rows, df, num_col_index, table_header, limit=( - (limit - 1) % 20 + 1) + rows, df, num_col_index, table_header, limit=((limit - 1) % 20 + 1) ) else: df = self._get_table(rows, df, num_col_index, table_header) @@ -246,8 +243,7 @@ def screener_view( if order not in self.order_dict: order_keys = list(self.order_dict.keys()) raise ValueError( - "Invalid order '{}'. Possible order: {}".format( - order, order_keys) + "Invalid order '{}'. Possible order: {}".format(order, order_keys) ) url = self.url + "&" + self.order_dict[order] if not ascend: @@ -267,8 +263,7 @@ def screener_view( raise ValueError("Invalid page {}".format(select_page)) if limit != -1: limit = -1 - warnings.warn( - "Limit parameter is ignored when page is selected.") + warnings.warn("Limit parameter is ignored when page is selected.") start_page = select_page - 1 end_page = select_page @@ -285,8 +280,7 @@ def screener_view( table = soup.find("table", class_="table-light") rows = table.findAll("tr") table_header = [i.text.strip() for i in rows[0].findAll("td")][1:] - num_col_index = [table_header.index( - i) for i in table_header if i in NUMBER_COL] + num_col_index = [table_header.index(i) for i in table_header if i in NUMBER_COL] df = pd.DataFrame([], columns=table_header) if not select_page or select_page == 1: df = self._screener_helper( @@ -306,8 +300,7 @@ def screener_view( if order == "ticker": url += "&r={}".format(i * 20 + 1) else: - url += "&r={}".format(i * 20 + 1) + \ - "&" + self.order_dict[order] + url += "&r={}".format(i * 20 + 1) + "&" + self.order_dict[order] if not ascend: url = url.replace("o=", "o=-") soup = web_scrap(url) From e5b011cfdc10bc98405c81a94f620f9c23686c88 Mon Sep 17 00:00:00 2001 From: aliziauddin Date: Sun, 2 Jul 2023 10:11:09 +0500 Subject: [PATCH 3/3] fixed comments --- finvizfinance/screener/overview.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/finvizfinance/screener/overview.py b/finvizfinance/screener/overview.py index facf01d..0b8d258 100644 --- a/finvizfinance/screener/overview.py +++ b/finvizfinance/screener/overview.py @@ -34,7 +34,7 @@ def __init__(self): v_page=self.v_page, signal="", filter="", ticker="" ) self._load_setting() - self.page_count = 0 + self.page_count = None def _load_setting(self): """load all the signals and filters.""" @@ -174,9 +174,8 @@ def _get_page(self, soup): """Check the page number""" try: options = soup.find(id="pageSelect").findAll("option") - page_count = len(options) - self.page_count = page_count - return page_count + self.page_count = len(options) + return self.page_count except: return 0