From 0a7dfeb5eaa40af00262756f33fbd75f3f5b00d5 Mon Sep 17 00:00:00 2001 From: Hellow Date: Tue, 28 Mar 2023 18:40:56 +0200 Subject: [PATCH] fixed rpr --- src/donwload.py | 2 +- .../pages/download_center/search.py | 94 +++++++++---------- 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/src/donwload.py b/src/donwload.py index 91a5559..1edcf34 100644 --- a/src/donwload.py +++ b/src/donwload.py @@ -7,7 +7,7 @@ def search_pages(): print("audio", search.audio_pages) print() - print(search._current_option) + print(search) if __name__ == "__main__": diff --git a/src/music_kraken/pages/download_center/search.py b/src/music_kraken/pages/download_center/search.py index 92f534b..382946a 100644 --- a/src/music_kraken/pages/download_center/search.py +++ b/src/music_kraken/pages/download_center/search.py @@ -9,114 +9,114 @@ from ...objects import Options, DatabaseObject class MultiPageOptions: def __init__( - self, - max_displayed_options: int = 10, - option_digits: int = 3 + self, + max_displayed_options: int = 10, + option_digits: int = 3 ) -> None: self.max_displayed_options = max_displayed_options self.option_digits: int = option_digits - + self._current_option_dict: Dict[Type[Page], Options] = defaultdict(lambda: Options()) def __getitem__(self, key: Type[Page]): return self._current_option_dict[key] - + def __setitem__(self, key: Type[Page], value: Options): self._current_option_dict[key] = value - + def string_from_all_pages(self) -> str: lines: List[str] = [] - + page_name_fill = "-" max_page_len = 21 - + j = 0 for page, options in self._current_option_dict.items(): lines.append(f"----------{page.__name__:{page_name_fill}<{max_page_len}}----------") - + option_obj: DatabaseObject for i, option_obj in enumerate(options): if i >= self.max_displayed_options: lines.append("...") break - - lines.append(f"{j+i:0{self.option_digits}} {option_obj.option_string}") - + + lines.append(f"{j + i:0{self.option_digits}} {option_obj.option_string}") + j += i + 1 - + return "\n".join(lines) - + def choose_from_all_pages(self, index: int) -> DatabaseObject: j = 0 for page, options in self._current_option_dict.items(): option_len = len(options) if option_len > self.max_displayed_options: option_len = self.max_displayed_options - + if index < j + option_len: - return options[j+option_len-1] - + return options[j + option_len - 1] + j += option_len - 1 - + raise KeyError("index is out of range") - + def string_from_single_page(self, page: Type[Page]) -> str: lines: List[str] = [] - + page_name_fill = "-" max_page_len = 21 lines.append(f"----------{page.__name__:{page_name_fill}<{max_page_len}}----------") - + option_obj: DatabaseObject - for i, option_obj in enumerate(self._current_option_dict[page]): + for i, option_obj in enumerate(self._current_option_dict[page]): lines.append(f"{i:0{self.option_digits}} {option_obj.option_string}") - + return "\n".join(lines) - + def choose_from_single_page(self, page: Type[Page], index: int) -> DatabaseObject: return self._current_option_dict[page][index] - + def __repr__(self) -> str: return self.string_from_all_pages() class Search: def __init__( - self, - query: str, - pages: Tuple[Type[Page]] = page_attributes.ALL_PAGES, - exclude_pages: Set[Type[Page]] = set(), - exclude_shady: bool = False, - max_displayed_options: int = 10, - option_digits: int = 3 + self, + query: str, + pages: Tuple[Type[Page]] = page_attributes.ALL_PAGES, + exclude_pages: Set[Type[Page]] = set(), + exclude_shady: bool = False, + max_displayed_options: int = 10, + option_digits: int = 3 ) -> None: _page_list: List[Type[Page]] = [] _audio_page_list: List[Type[Page]] = [] - + for page in pages: if exclude_shady and page in page_attributes.SHADY_PAGES: continue if page in exclude_pages: continue - + _page_list.append(page) - + if page in page_attributes.AUDIO_PAGES: _audio_page_list.append(page) - + self.pages: Tuple[Type[Page]] = tuple(_page_list) self.audio_pages: Tuple[Type[Page]] = tuple(_audio_page_list) - + self.max_displayed_options = max_displayed_options self.option_digits: int = option_digits - + self._option_history: List[MultiPageOptions] = [] - + self._current_option: MultiPageOptions = self.next_options - + self.search(query) - + @property def next_options(self) -> MultiPageOptions: mpo = MultiPageOptions( @@ -125,13 +125,12 @@ class Search: ) self._option_history.append(mpo) return mpo - + @property def previous_options(self) -> MultiPageOptions: self._option_history.pop() return self._option_history[-1] - - + def search(self, query: str): """ # The Query @@ -141,8 +140,9 @@ class Search: followed by a space "#a Psychonaut 4 #r Tired, Numb and #t Drop by Drop" if no # is in the query it gets treated as "unspecified query" """ - + for page in self.pages: self._current_option[page] = page.search_by_query(query=query) - - \ No newline at end of file + + def __repr__(self): + return self._current_option.__repr__()