Рефакторинг

This commit is contained in:
Lev Plyusnin 2023-08-06 12:26:22 +05:00
parent 7ba28fd5c3
commit 4c8c489742
No known key found for this signature in database
GPG key ID: 21C6C2C9C0A4460D

58
main.py
View file

@ -37,7 +37,6 @@ PLAYLIST_RE = re.compile(r'([\w\-._]+)/playlists/(\d+)$')
FILENAME_CLEAR_RE = re.compile(r'[^\w\-\'() ]+')
TITLE_TEMPLATE = '{title} ({version})'
TRACK_URL_TEMPLATE = 'https://music.yandex.ru/album/{album_id}/track/{track_id}'
logger = logging.getLogger('yandex-music-downloader')
@ -89,24 +88,6 @@ class FullArtistInfo(BasicArtistInfo):
return cls(**base.__dict__, cover_info=cover_info, albums=albums)
def parse_artists(data: list) -> list[BasicArtistInfo]:
artists = []
for artist in data:
artists.append(artist)
if decomposed := artist.get('decomposed'):
for d_artist in decomposed:
if isinstance(d_artist, dict):
artists.append(d_artist)
return [BasicArtistInfo.from_json(a) for a in artists]
def parse_title(data: dict) -> str:
title = data['title']
if version := data.get('version'):
title = TITLE_TEMPLATE.format(title=title, version=version)
return title
@dataclass
class BasicAlbumInfo:
id: str
@ -176,6 +157,10 @@ class BasicTrackInfo:
has_lyrics=has_lyrics,
cover_info=cover_info)
@property
def url(self) -> str:
return f'https://music.yandex.ru/album/{self.album.id}/track/{self.id}'
@dataclass
class FullTrackInfo(BasicTrackInfo):
@ -202,6 +187,24 @@ class FullAlbumInfo(BasicAlbumInfo):
return cls(**base.__dict__, tracks=tracks)
def parse_artists(data: list) -> list[BasicArtistInfo]:
artists = []
for artist in data:
artists.append(artist)
if decomposed := artist.get('decomposed'):
for d_artist in decomposed:
if isinstance(d_artist, dict):
artists.append(d_artist)
return [BasicArtistInfo.from_json(a) for a in artists]
def parse_title(data: dict) -> str:
title = data['title']
if version := data.get('version'):
title = TITLE_TEMPLATE.format(title=title, version=version)
return title
def get_track_download_url(session: Session, track: BasicTrackInfo,
hq: bool) -> str:
resp = session.get('https://music.yandex.ru/api/v2.1/handlers/track'
@ -266,16 +269,18 @@ def get_playlist(session: Session,
def prepare_track_path(path: Path, prepare_path: bool,
track: BasicTrackInfo) -> Path:
path_str = str(path)
album = track.album
artist = album.artists[0]
repl_dict = {
'#album-artist': track.album.artists[0].name,
'#artist-id': track.artists[0].id,
'#album-id': track.album.id,
'#album-artist': album.artists[0].name,
'#artist-id': artist.name,
'#album-id': album.id,
'#track-id': track.id,
'#number': track.number,
'#artist': track.artists[0].name,
'#artist': artist.name,
'#title': track.title,
'#album': track.album.title,
'#year': track.album.year
'#album': album.title,
'#year': album.year
}
for placeholder, replacement in repl_dict.items():
replacement = str(replacement)
@ -306,8 +311,7 @@ def set_id3_tags(path: Path, track: BasicTrackInfo, lyrics: Optional[str],
tag.disc_num = track.disc_number
tag.release_date = tag.original_release_date = release_date
tag.encoded_by = ENCODED_BY
tag.audio_file_url = TRACK_URL_TEMPLATE.format(album_id=track.album.id,
track_id=track.id)
tag.audio_file_url = track.url
if lyrics is not None:
tag.lyrics.set(lyrics)