feat: improved initialization of data objects
This commit is contained in:
parent
e3e547c232
commit
a5f8057b82
@ -3,6 +3,7 @@ from __future__ import annotations
|
|||||||
import random
|
import random
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from typing import List, Optional, Dict, Tuple, Type, Union
|
from typing import List, Optional, Dict, Tuple, Type, Union
|
||||||
|
import copy
|
||||||
|
|
||||||
import pycountry
|
import pycountry
|
||||||
|
|
||||||
@ -118,13 +119,27 @@ class Song(Base):
|
|||||||
"tracksort": lambda: 0,
|
"tracksort": lambda: 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, title: str = "", unified_title: str = None, isrc: str = None, length: int = None,
|
def __init__(
|
||||||
genre: str = None, note: FormattedText = None, source_list: List[Source] = None,
|
self,
|
||||||
target_list: List[Target] = None, lyrics_list: List[Lyrics] = None,
|
title: str = None,
|
||||||
main_artist_list: List[Artist] = None, feature_artist_list: List[Artist] = None,
|
isrc: str = None,
|
||||||
album_list: List[Album] = None, tracksort: int = 0, artwork: Optional[Artwork] = None, **kwargs) -> None:
|
length: int = None,
|
||||||
|
genre: str = None,
|
||||||
|
note: FormattedText = None,
|
||||||
|
source_list: List[Source] = None,
|
||||||
|
target_list: List[Target] = None,
|
||||||
|
lyrics_list: List[Lyrics] = None,
|
||||||
|
main_artist_list: List[Artist] = None,
|
||||||
|
feature_artist_list: List[Artist] = None,
|
||||||
|
album_list: List[Album] = None,
|
||||||
|
tracksort: int = 0,
|
||||||
|
artwork: Optional[Artwork] = None,
|
||||||
|
**kwargs
|
||||||
|
) -> None:
|
||||||
|
real_kwargs = copy.copy(locals())
|
||||||
|
real_kwargs.update(real_kwargs.pop("kwargs", {}))
|
||||||
|
|
||||||
Base.__init__(**locals())
|
Base.__init__(**real_kwargs)
|
||||||
|
|
||||||
UPWARDS_COLLECTION_STRING_ATTRIBUTES = ("main_artist_collection", "feature_artist_collection", "album_collection")
|
UPWARDS_COLLECTION_STRING_ATTRIBUTES = ("main_artist_collection", "feature_artist_collection", "album_collection")
|
||||||
TITEL = "title"
|
TITEL = "title"
|
||||||
@ -245,6 +260,7 @@ class Album(Base):
|
|||||||
barcode: str
|
barcode: str
|
||||||
albumsort: int
|
albumsort: int
|
||||||
notes: FormattedText
|
notes: FormattedText
|
||||||
|
artwork: Artwork
|
||||||
|
|
||||||
source_collection: SourceCollection
|
source_collection: SourceCollection
|
||||||
|
|
||||||
@ -263,6 +279,7 @@ class Album(Base):
|
|||||||
"language": lambda: Language.by_alpha_2("en"),
|
"language": lambda: Language.by_alpha_2("en"),
|
||||||
"date": ID3Timestamp,
|
"date": ID3Timestamp,
|
||||||
"notes": FormattedText,
|
"notes": FormattedText,
|
||||||
|
"artwork": Artwork,
|
||||||
|
|
||||||
"source_collection": SourceCollection,
|
"source_collection": SourceCollection,
|
||||||
"artist_collection": Collection,
|
"artist_collection": Collection,
|
||||||
@ -273,15 +290,27 @@ class Album(Base):
|
|||||||
TITEL = "title"
|
TITEL = "title"
|
||||||
|
|
||||||
# This is automatically generated
|
# This is automatically generated
|
||||||
def __init__(self, title: str = None, unified_title: str = None, album_status: AlbumStatus = None,
|
def __init__(
|
||||||
album_type: AlbumType = None, language: Language = None, date: ID3Timestamp = None,
|
self,
|
||||||
barcode: str = None, albumsort: int = None, notes: FormattedText = None,
|
title: str = None,
|
||||||
source_list: List[Source] = None, artist_list: List[Artist] = None, song_list: List[Song] = None,
|
unified_title: str = None,
|
||||||
label_list: List[Label] = None, **kwargs) -> None:
|
album_status: AlbumStatus = None,
|
||||||
super().__init__(title=title, unified_title=unified_title, album_status=album_status, album_type=album_type,
|
album_type: AlbumType = None,
|
||||||
language=language, date=date, barcode=barcode, albumsort=albumsort, notes=notes,
|
language: Language = None,
|
||||||
source_list=source_list, artist_list=artist_list, song_list=song_list, label_list=label_list,
|
date: ID3Timestamp = None,
|
||||||
**kwargs)
|
barcode: str = None,
|
||||||
|
albumsort: int = None,
|
||||||
|
notes: FormattedText = None,
|
||||||
|
source_list: List[Source] = None,
|
||||||
|
artist_list: List[Artist] = None,
|
||||||
|
song_list: List[Song] = None,
|
||||||
|
label_list: List[Label] = None,
|
||||||
|
**kwargs
|
||||||
|
) -> None:
|
||||||
|
real_kwargs = copy.copy(locals())
|
||||||
|
real_kwargs.update(real_kwargs.pop("kwargs", {}))
|
||||||
|
|
||||||
|
Base.__init__(**real_kwargs)
|
||||||
|
|
||||||
DOWNWARDS_COLLECTION_STRING_ATTRIBUTES = ("song_collection",)
|
DOWNWARDS_COLLECTION_STRING_ATTRIBUTES = ("song_collection",)
|
||||||
UPWARDS_COLLECTION_STRING_ATTRIBUTES = ("label_collection", "artist_collection")
|
UPWARDS_COLLECTION_STRING_ATTRIBUTES = ("label_collection", "artist_collection")
|
||||||
@ -415,7 +444,6 @@ class Album(Base):
|
|||||||
|
|
||||||
class Artist(Base):
|
class Artist(Base):
|
||||||
name: str
|
name: str
|
||||||
unified_name: str
|
|
||||||
country: Country
|
country: Country
|
||||||
formed_in: ID3Timestamp
|
formed_in: ID3Timestamp
|
||||||
notes: FormattedText
|
notes: FormattedText
|
||||||
@ -432,8 +460,7 @@ class Artist(Base):
|
|||||||
label_collection: Collection[Label]
|
label_collection: Collection[Label]
|
||||||
|
|
||||||
_default_factories = {
|
_default_factories = {
|
||||||
"name": str,
|
"name": lambda: None,
|
||||||
"unified_name": lambda: None,
|
|
||||||
"country": lambda: None,
|
"country": lambda: None,
|
||||||
"unformatted_location": lambda: None,
|
"unformatted_location": lambda: None,
|
||||||
|
|
||||||
@ -452,17 +479,28 @@ class Artist(Base):
|
|||||||
TITEL = "name"
|
TITEL = "name"
|
||||||
|
|
||||||
# This is automatically generated
|
# This is automatically generated
|
||||||
def __init__(self, name: str = "", unified_name: str = None, country: Country = None,
|
def __init__(
|
||||||
formed_in: ID3Timestamp = None, notes: FormattedText = None, lyrical_themes: List[str] = None,
|
self,
|
||||||
general_genre: str = None, unformatted_location: str = None, source_list: List[Source] = None,
|
name: str = None,
|
||||||
contact_list: List[Contact] = None, feature_song_list: List[Song] = None,
|
unified_name: str = None,
|
||||||
main_album_list: List[Album] = None, label_list: List[Label] = None, **kwargs) -> None:
|
country: Country = None,
|
||||||
|
formed_in: ID3Timestamp = None,
|
||||||
|
notes: FormattedText = None,
|
||||||
|
lyrical_themes: List[str] = None,
|
||||||
|
general_genre: str = None,
|
||||||
|
unformatted_location: str = None,
|
||||||
|
source_list: List[Source] = None,
|
||||||
|
contact_list: List[Contact] = None,
|
||||||
|
feature_song_list: List[Song] = None,
|
||||||
|
main_album_list: List[Album] = None,
|
||||||
|
label_list: List[Label] = None,
|
||||||
|
**kwargs
|
||||||
|
) -> None:
|
||||||
|
real_kwargs = copy.copy(locals())
|
||||||
|
real_kwargs.update(real_kwargs.pop("kwargs", {}))
|
||||||
|
|
||||||
|
Base.__init__(**real_kwargs)
|
||||||
|
|
||||||
super().__init__(name=name, unified_name=unified_name, country=country, formed_in=formed_in, notes=notes,
|
|
||||||
lyrical_themes=lyrical_themes, general_genre=general_genre,
|
|
||||||
unformatted_location=unformatted_location, source_list=source_list, contact_list=contact_list,
|
|
||||||
feature_song_list=feature_song_list, main_album_list=main_album_list, label_list=label_list,
|
|
||||||
**kwargs)
|
|
||||||
|
|
||||||
DOWNWARDS_COLLECTION_STRING_ATTRIBUTES = ("main_album_collection", "feature_song_collection")
|
DOWNWARDS_COLLECTION_STRING_ATTRIBUTES = ("main_album_collection", "feature_song_collection")
|
||||||
UPWARDS_COLLECTION_STRING_ATTRIBUTES = ("label_collection",)
|
UPWARDS_COLLECTION_STRING_ATTRIBUTES = ("label_collection",)
|
||||||
@ -615,12 +653,21 @@ class Label(Base):
|
|||||||
|
|
||||||
TITEL = "name"
|
TITEL = "name"
|
||||||
|
|
||||||
def __init__(self, name: str = None, unified_name: str = None, notes: FormattedText = None,
|
def __init__(
|
||||||
source_list: List[Source] = None, contact_list: List[Contact] = None,
|
self,
|
||||||
album_list: List[Album] = None, current_artist_list: List[Artist] = None, **kwargs) -> None:
|
name: str = None,
|
||||||
super().__init__(name=name, unified_name=unified_name, notes=notes, source_list=source_list,
|
unified_name: str = None,
|
||||||
contact_list=contact_list, album_list=album_list, current_artist_list=current_artist_list,
|
notes: FormattedText = None,
|
||||||
**kwargs)
|
source_list: List[Source] = None,
|
||||||
|
contact_list: List[Contact] = None,
|
||||||
|
album_list: List[Album] = None,
|
||||||
|
current_artist_list: List[Artist] = None,
|
||||||
|
**kwargs
|
||||||
|
) -> None:
|
||||||
|
real_kwargs = copy.copy(locals())
|
||||||
|
real_kwargs.update(real_kwargs.pop("kwargs", {}))
|
||||||
|
|
||||||
|
Base.__init__(**real_kwargs)
|
||||||
|
|
||||||
def __init_collections__(self):
|
def __init_collections__(self):
|
||||||
self.album_collection.append_object_to_attribute = {
|
self.album_collection.append_object_to_attribute = {
|
||||||
|
@ -254,7 +254,7 @@ class Page:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if obj_type in fetch_map:
|
if obj_type in fetch_map:
|
||||||
music_object = fetch_map[obj_type](source, stop_at_level)
|
music_object = fetch_map[obj_type](source, stop_at_level=stop_at_level)
|
||||||
else:
|
else:
|
||||||
self.LOGGER.warning(f"Can't fetch details of type: {obj_type}")
|
self.LOGGER.warning(f"Can't fetch details of type: {obj_type}")
|
||||||
return None
|
return None
|
||||||
|
@ -785,7 +785,7 @@ class Musify(Page):
|
|||||||
|
|
||||||
return album
|
return album
|
||||||
|
|
||||||
def _fetch_initial_artist(self, url: MusifyUrl, source: Source) -> Artist:
|
def _fetch_initial_artist(self, url: MusifyUrl, source: Source, **kwargs) -> Artist:
|
||||||
"""
|
"""
|
||||||
https://musify.club/artist/ghost-bath-280348?_pjax=#bodyContent
|
https://musify.club/artist/ghost-bath-280348?_pjax=#bodyContent
|
||||||
"""
|
"""
|
||||||
@ -907,7 +907,7 @@ class Musify(Page):
|
|||||||
notes=notes
|
notes=notes
|
||||||
)
|
)
|
||||||
|
|
||||||
def _parse_album_card(self, album_card: BeautifulSoup, source: Source, artist_name: str = None, **kwargs) -> Album:
|
def _parse_album_card(self, album_card: BeautifulSoup, artist_name: str = None, **kwargs) -> Album:
|
||||||
"""
|
"""
|
||||||
<div class="card release-thumbnail" data-type="2">
|
<div class="card release-thumbnail" data-type="2">
|
||||||
<a href="/release/ghost-bath-self-loather-2021-1554266">
|
<a href="/release/ghost-bath-self-loather-2021-1554266">
|
||||||
@ -932,7 +932,7 @@ class Musify(Page):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
album_kwargs: Dict[str, Any] = {
|
album_kwargs: Dict[str, Any] = {
|
||||||
"source_list": [source],
|
"source_list": [],
|
||||||
}
|
}
|
||||||
|
|
||||||
name: str = None
|
name: str = None
|
||||||
@ -1069,7 +1069,7 @@ class Musify(Page):
|
|||||||
soup: BeautifulSoup = self.get_soup_from_response(r)
|
soup: BeautifulSoup = self.get_soup_from_response(r)
|
||||||
|
|
||||||
for card_soup in soup.find_all("div", {"class": "card"}):
|
for card_soup in soup.find_all("div", {"class": "card"}):
|
||||||
album = self._parse_album_card(card_soup, source, artist_name, **kwargs)
|
album = self._parse_album_card(card_soup, artist_name, **kwargs)
|
||||||
if album.album_type in _album_type_blacklist:
|
if album.album_type in _album_type_blacklist:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user