rewritten general search for me
This commit is contained in:
parent
70e0a16b20
commit
8500b714a2
@ -10,12 +10,15 @@ MusicObject = Union[Song, Album, Artist, Label]
|
||||
class Download:
|
||||
def __init__(
|
||||
self,
|
||||
pages: Tuple[Type[Page]] = page_attributes.ALL_PAGES,
|
||||
exclude_pages: Set[Type[Page]] = set(),
|
||||
pages: Tuple[Page] = page_attributes.ALL_PAGES,
|
||||
exclude_pages=None,
|
||||
exclude_shady: bool = False,
|
||||
) -> None:
|
||||
_page_list: List[Type[Page]] = []
|
||||
_audio_page_list: List[Type[Page]] = []
|
||||
if exclude_pages is None:
|
||||
exclude_pages = set()
|
||||
|
||||
_page_list: List[Page] = []
|
||||
_audio_page_list: List[Page] = []
|
||||
|
||||
for page in pages:
|
||||
if exclude_shady and page in page_attributes.SHADY_PAGES:
|
||||
@ -28,8 +31,8 @@ class Download:
|
||||
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.pages: Tuple[Page] = tuple(_page_list)
|
||||
self.audio_pages: Tuple[Page] = tuple(_audio_page_list)
|
||||
|
||||
def fetch_details(self, music_object: MusicObject) -> MusicObject:
|
||||
for page in self.pages:
|
||||
|
@ -34,11 +34,11 @@ class MultiPageOptions:
|
||||
def __len__(self) -> int:
|
||||
return self._length
|
||||
|
||||
def get_page_str(self, page: Type[Page]) -> str:
|
||||
def get_page_str(self, page: Page) -> str:
|
||||
page_name_fill = "-"
|
||||
max_page_len = 21
|
||||
|
||||
return f"({page_attributes.PAGE_NAME_MAP[page]}) ------------------------{page.__name__:{page_name_fill}<{max_page_len}}------------"
|
||||
return f"({page_attributes.PAGE_NAME_MAP[page]}) ------------------------{type(page).__name__:{page_name_fill}<{max_page_len}}------------"
|
||||
|
||||
def string_from_all_pages(self) -> str:
|
||||
if self._length == 1:
|
||||
|
@ -4,27 +4,26 @@ from ..utils.enums.source import SourcePages
|
||||
from ..pages import Page, EncyclopaediaMetallum, Musify
|
||||
|
||||
|
||||
NAME_PAGE_MAP: Dict[str, Type[Page]] = dict()
|
||||
PAGE_NAME_MAP: Dict[Type[Page], str] = dict()
|
||||
SOURCE_PAGE_MAP: Dict[SourcePages, Type[Page]] = dict()
|
||||
NAME_PAGE_MAP: Dict[str, Page] = dict()
|
||||
PAGE_NAME_MAP: Dict[Page, str] = dict()
|
||||
SOURCE_PAGE_MAP: Dict[SourcePages, Page] = dict()
|
||||
|
||||
ALL_PAGES: Tuple[Type[Page]] = (
|
||||
EncyclopaediaMetallum,
|
||||
Musify
|
||||
ALL_PAGES: Tuple[Page, ...] = (
|
||||
EncyclopaediaMetallum(),
|
||||
)
|
||||
|
||||
AUDIO_PAGES: Tuple[Type[Page]] = (
|
||||
Musify,
|
||||
AUDIO_PAGES: Tuple[Page, ...] = (
|
||||
Musify(),
|
||||
)
|
||||
|
||||
SHADY_PAGES: Tuple[Type[Page]] = (
|
||||
Musify,
|
||||
SHADY_PAGES: Tuple[Page, ...] = (
|
||||
Musify(),
|
||||
)
|
||||
|
||||
# this needs to be case insensitive
|
||||
# this needs to be case-insensitive
|
||||
SHORTHANDS = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z')
|
||||
for i, page in enumerate(ALL_PAGES):
|
||||
NAME_PAGE_MAP[page.__name__.lower()] = page
|
||||
NAME_PAGE_MAP[type(page).__name__.lower()] = page
|
||||
NAME_PAGE_MAP[SHORTHANDS[i].lower()] = page
|
||||
|
||||
PAGE_NAME_MAP[page] = SHORTHANDS[i]
|
||||
|
@ -94,7 +94,7 @@ class Search(Download):
|
||||
new_text = ""
|
||||
latest_key: str = None
|
||||
for i in range(len(query) - 1):
|
||||
currenct_char = query[i]
|
||||
current_char = query[i]
|
||||
next_char = query[i+1]
|
||||
|
||||
if skip_next:
|
||||
@ -102,24 +102,25 @@ class Search(Download):
|
||||
continue
|
||||
|
||||
if escape_next:
|
||||
new_text += currenct_char
|
||||
new_text += current_char
|
||||
escape_next = False
|
||||
|
||||
# escaping
|
||||
if currenct_char == "\\":
|
||||
if current_char == "\\":
|
||||
if next_char in special_characters:
|
||||
escape_next = True
|
||||
continue
|
||||
|
||||
if currenct_char == "#":
|
||||
if current_char == "#":
|
||||
if latest_key is not None:
|
||||
key_text[latest_key]
|
||||
key_text[latest_key] = new_text
|
||||
new_text = ""
|
||||
|
||||
latest_key = next_char
|
||||
skip_next = True
|
||||
continue
|
||||
|
||||
new_text += currenct_char
|
||||
new_text += current_char
|
||||
|
||||
if latest_key is not None:
|
||||
key_text[latest_key] = new_text
|
||||
@ -129,8 +130,7 @@ class Search(Download):
|
||||
|
||||
|
||||
for page in self.pages:
|
||||
for search in parsed_query.default_search:
|
||||
self._current_option[page].extend(page._raw_search(query=search))
|
||||
self._current_option[page].extend(page.search(parsed_query))
|
||||
|
||||
def choose_page(self, page: Type[Page]):
|
||||
"""
|
||||
|
@ -35,8 +35,7 @@ ALBUM_TYPE_MAP: Dict[str, AlbumType] = defaultdict(lambda: AlbumType.OTHER, {
|
||||
})
|
||||
|
||||
|
||||
def _song_from_json(artist_html=None, album_html=None, release_type=None, title=None,
|
||||
lyrics_html=None) -> Song:
|
||||
def _song_from_json(artist_html=None, album_html=None, release_type=None, title=None, lyrics_html=None) -> Song:
|
||||
song_id = None
|
||||
if lyrics_html is not None:
|
||||
soup = BeautifulSoup(lyrics_html, 'html.parser')
|
||||
@ -60,7 +59,7 @@ def _song_from_json(artist_html=None, album_html=None, release_type=None, title=
|
||||
|
||||
def _artist_from_json(artist_html=None, genre=None, country=None) -> Artist:
|
||||
"""
|
||||
TODO parse the country to a standart
|
||||
TODO parse the country to a standard
|
||||
"""
|
||||
# parse the html
|
||||
# parse the html for the band name and link on metal-archives
|
||||
|
Loading…
Reference in New Issue
Block a user