fixed stuff
This commit is contained in:
parent
04ee037f45
commit
fe86f8591d
@ -39,39 +39,15 @@ class BaseModel(Model):
|
|||||||
self._meta.database = database
|
self._meta.database = database
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
|
||||||
class ObjectModel(BaseModel):
|
class ObjectModel(BaseModel):
|
||||||
|
id: str = CharField(primary_key=True)
|
||||||
|
|
||||||
|
class MainModel(BaseModel):
|
||||||
additional_arguments: str = CharField(null=True)
|
additional_arguments: str = CharField(null=True)
|
||||||
notes: str = CharField(null=True)
|
notes: str = CharField(null=True)
|
||||||
|
|
||||||
|
|
||||||
class Album(ObjectModel):
|
class Song(MainModel):
|
||||||
"""A class representing an album in the music database."""
|
|
||||||
|
|
||||||
title: str = CharField(null=True)
|
|
||||||
album_status: str = CharField(null=True)
|
|
||||||
album_type: str = CharField(null=True)
|
|
||||||
language: str = CharField(null=True)
|
|
||||||
date: str = CharField(null=True)
|
|
||||||
date_format: str = CharField(null=True)
|
|
||||||
|
|
||||||
barcode: str = CharField(null=True)
|
|
||||||
is_split: bool = BooleanField(default=False)
|
|
||||||
|
|
||||||
albumsort: int = IntegerField(null=True)
|
|
||||||
|
|
||||||
|
|
||||||
class Artist(BaseModel):
|
|
||||||
"""A class representing an artist in the music database."""
|
|
||||||
|
|
||||||
name: str = CharField(null=True)
|
|
||||||
country: str = CharField(null=True)
|
|
||||||
formed_in_date: str = CharField(null=True)
|
|
||||||
formed_in_date_format: str = CharField(null=True)
|
|
||||||
general_genre: str = CharField(null=True)
|
|
||||||
|
|
||||||
|
|
||||||
class Song(BaseModel):
|
|
||||||
"""A class representing a song in the music database."""
|
"""A class representing a song in the music database."""
|
||||||
|
|
||||||
title: str = CharField(null=True)
|
title: str = CharField(null=True)
|
||||||
@ -79,9 +55,36 @@ class Song(BaseModel):
|
|||||||
length: int = IntegerField(null=True)
|
length: int = IntegerField(null=True)
|
||||||
tracksort: int = IntegerField(null=True)
|
tracksort: int = IntegerField(null=True)
|
||||||
genre: str = CharField(null=True)
|
genre: str = CharField(null=True)
|
||||||
|
|
||||||
|
|
||||||
|
class Album(MainModel):
|
||||||
|
"""A class representing an album in the music database."""
|
||||||
|
|
||||||
|
title: str = CharField(null=True)
|
||||||
|
album_status: str = CharField(null=True)
|
||||||
|
album_type: str = CharField(null=True)
|
||||||
|
language: str = CharField(null=True)
|
||||||
|
date_string: str = CharField(null=True)
|
||||||
|
date_format: str = CharField(null=True)
|
||||||
|
barcode: str = CharField(null=True)
|
||||||
|
albumsort: int = IntegerField(null=True)
|
||||||
|
|
||||||
|
|
||||||
class Target(BaseModel):
|
class Artist(MainModel):
|
||||||
|
"""A class representing an artist in the music database."""
|
||||||
|
|
||||||
|
name: str = CharField(null=True)
|
||||||
|
country: str = CharField(null=True)
|
||||||
|
formed_in_date: str = CharField(null=True)
|
||||||
|
formed_in_format: str = CharField(null=True)
|
||||||
|
general_genre: str = CharField(null=True)
|
||||||
|
|
||||||
|
|
||||||
|
class Label(MainModel):
|
||||||
|
name: str = CharField(null=True)
|
||||||
|
|
||||||
|
|
||||||
|
class Target(ObjectModel):
|
||||||
"""A class representing a target of a song in the music database."""
|
"""A class representing a target of a song in the music database."""
|
||||||
|
|
||||||
file: str = CharField()
|
file: str = CharField()
|
||||||
@ -89,7 +92,7 @@ class Target(BaseModel):
|
|||||||
song = ForeignKeyField(Song, backref='targets')
|
song = ForeignKeyField(Song, backref='targets')
|
||||||
|
|
||||||
|
|
||||||
class Lyrics(BaseModel):
|
class Lyrics(ObjectModel):
|
||||||
"""A class representing lyrics of a song in the music database."""
|
"""A class representing lyrics of a song in the music database."""
|
||||||
|
|
||||||
text: str = TextField()
|
text: str = TextField()
|
||||||
@ -97,33 +100,6 @@ class Lyrics(BaseModel):
|
|||||||
song = ForeignKeyField(Song, backref='lyrics')
|
song = ForeignKeyField(Song, backref='lyrics')
|
||||||
|
|
||||||
|
|
||||||
class SongTarget(BaseModel):
|
|
||||||
song: ForeignKeyField = ForeignKeyField(Song, backref='song_target')
|
|
||||||
artist: ForeignKeyField = ForeignKeyField(Target, backref='song_target')
|
|
||||||
is_feature: bool = BooleanField(default=False)
|
|
||||||
|
|
||||||
|
|
||||||
class SongArtist(BaseModel):
|
|
||||||
"""A class representing the relationship between a song and an artist."""
|
|
||||||
|
|
||||||
song: ForeignKeyField = ForeignKeyField(Song, backref='song_artists')
|
|
||||||
artist: ForeignKeyField = ForeignKeyField(Artist, backref='song_artists')
|
|
||||||
is_feature: bool = BooleanField(default=False)
|
|
||||||
|
|
||||||
|
|
||||||
class AlbumArtist(BaseModel):
|
|
||||||
"""A class representing the relationship between an album and an artist."""
|
|
||||||
|
|
||||||
album: ForeignKeyField = ForeignKeyField(Album, backref='album_artists')
|
|
||||||
artist: ForeignKeyField = ForeignKeyField(Artist, backref='album_artists')
|
|
||||||
|
|
||||||
|
|
||||||
class AlbumSong(BaseModel):
|
|
||||||
"""A class representing the relationship between an album and an song."""
|
|
||||||
album: ForeignKeyField = ForeignKeyField(Album, backref='album_artists')
|
|
||||||
song: ForeignKeyField = ForeignKeyField(Song, backref='album_artists')
|
|
||||||
|
|
||||||
|
|
||||||
class Source(BaseModel):
|
class Source(BaseModel):
|
||||||
"""A class representing a source of a song in the music database."""
|
"""A class representing a source of a song in the music database."""
|
||||||
ContentTypes = Union[Song, Album, Artist, Lyrics]
|
ContentTypes = Union[Song, Album, Artist, Lyrics]
|
||||||
@ -140,12 +116,15 @@ class Source(BaseModel):
|
|||||||
"""Get the content associated with the source as an object."""
|
"""Get the content associated with the source as an object."""
|
||||||
if self.content_type == 'Song':
|
if self.content_type == 'Song':
|
||||||
return Song.get(Song.id == self.content_id)
|
return Song.get(Song.id == self.content_id)
|
||||||
elif self.content_type == 'Album':
|
if self.content_type == 'Album':
|
||||||
return Album.get(Album.id == self.content_id)
|
return Album.get(Album.id == self.content_id)
|
||||||
elif self.content_type == 'Artist':
|
if self.content_type == 'Artist':
|
||||||
return Artist.get(Artist.id == self.content_id)
|
return Artist.get(Artist.id == self.content_id)
|
||||||
else:
|
if self.content_type == 'Label':
|
||||||
return None
|
return Label.get(Label.id == self.content_id)
|
||||||
|
if self.content_type == 'Lyrics':
|
||||||
|
return Lyrics.get(Lyrics.id == self.content_id)
|
||||||
|
|
||||||
|
|
||||||
@content_object.setter
|
@content_object.setter
|
||||||
def content_object(self, value: Union[Song, Album, Artist]) -> None:
|
def content_object(self, value: Union[Song, Album, Artist]) -> None:
|
||||||
@ -154,13 +133,44 @@ class Source(BaseModel):
|
|||||||
self.content_id = value.id
|
self.content_id = value.id
|
||||||
|
|
||||||
|
|
||||||
|
class SongArtist(BaseModel):
|
||||||
|
"""A class representing the relationship between a song and an artist."""
|
||||||
|
|
||||||
|
song: ForeignKeyField = ForeignKeyField(Song, backref='song_artists')
|
||||||
|
artist: ForeignKeyField = ForeignKeyField(Artist, backref='song_artists')
|
||||||
|
is_feature: bool = BooleanField(default=False)
|
||||||
|
|
||||||
|
|
||||||
|
class ArtistAlbum(BaseModel):
|
||||||
|
"""A class representing the relationship between an album and an artist."""
|
||||||
|
|
||||||
|
album: ForeignKeyField = ForeignKeyField(Album, backref='album_artists')
|
||||||
|
artist: ForeignKeyField = ForeignKeyField(Artist, backref='album_artists')
|
||||||
|
|
||||||
|
|
||||||
|
class AlbumSong(BaseModel):
|
||||||
|
"""A class representing the relationship between an album and an song."""
|
||||||
|
album: ForeignKeyField = ForeignKeyField(Album, backref='album_artists')
|
||||||
|
song: ForeignKeyField = ForeignKeyField(Song, backref='album_artists')
|
||||||
|
|
||||||
|
|
||||||
|
class LabelAlbum(BaseModel):
|
||||||
|
label: ForeignKeyField = ForeignKeyField(Label, backref='label_album')
|
||||||
|
album: ForeignKeyField = ForeignKeyField(Album, backref='label_album')
|
||||||
|
|
||||||
|
|
||||||
|
class LabelArtist(BaseModel):
|
||||||
|
label: ForeignKeyField = ForeignKeyField(Label, backref='label_artist')
|
||||||
|
artist: ForeignKeyField = ForeignKeyField(Artist, backref='label_artists')
|
||||||
|
|
||||||
|
|
||||||
ALL_MODELS = [
|
ALL_MODELS = [
|
||||||
Song,
|
Song,
|
||||||
Album,
|
Album,
|
||||||
Artist,
|
Artist,
|
||||||
Source,
|
Source,
|
||||||
Lyrics,
|
Lyrics,
|
||||||
AlbumArtist,
|
ArtistAlbum,
|
||||||
Target,
|
Target,
|
||||||
SongArtist
|
SongArtist
|
||||||
]
|
]
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
from typing import Union, Optional, Dict, DefaultDict, Type, List
|
from typing import Union, Optional, Dict, DefaultDict, Type, List
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
import json
|
||||||
import traceback
|
import traceback
|
||||||
from peewee import (
|
from peewee import (
|
||||||
SqliteDatabase,
|
SqliteDatabase,
|
||||||
@ -42,6 +43,7 @@ class WritingSession:
|
|||||||
self.added_song_ids: Dict[str] = dict()
|
self.added_song_ids: Dict[str] = dict()
|
||||||
self.added_album_ids: Dict[str] = dict()
|
self.added_album_ids: Dict[str] = dict()
|
||||||
self.added_artist_ids: Dict[str] = dict()
|
self.added_artist_ids: Dict[str] = dict()
|
||||||
|
self.added_label_ids: Dict[str] = dict()
|
||||||
|
|
||||||
self.db_objects: DefaultDict[data_models.BaseModel, List[data_models.BaseModel]] = defaultdict(list)
|
self.db_objects: DefaultDict[data_models.BaseModel, List[data_models.BaseModel]] = defaultdict(list)
|
||||||
|
|
||||||
@ -130,7 +132,7 @@ class WritingSession:
|
|||||||
|
|
||||||
db_song: data_models.Song = data_models.Song(
|
db_song: data_models.Song = data_models.Song(
|
||||||
id=song.id,
|
id=song.id,
|
||||||
name=song.title,
|
title=song.title,
|
||||||
isrc=song.isrc,
|
isrc=song.isrc,
|
||||||
length=song.length,
|
length=song.length,
|
||||||
tracksort=song.tracksort,
|
tracksort=song.tracksort,
|
||||||
@ -187,17 +189,15 @@ class WritingSession:
|
|||||||
return self.added_album_ids[album.id]
|
return self.added_album_ids[album.id]
|
||||||
|
|
||||||
db_album = data_models.Album(
|
db_album = data_models.Album(
|
||||||
|
id = album.id,
|
||||||
title = album.title,
|
title = album.title,
|
||||||
label = album.label,
|
album_status = album.album_status.value,
|
||||||
album_status = album.album_status,
|
album_type = album.album_type.value,
|
||||||
album_type = album.album_type,
|
|
||||||
language = album.iso_639_2_language,
|
language = album.iso_639_2_language,
|
||||||
date = album.date.timestamp,
|
date_string = album.date.timestamp,
|
||||||
date_format = album.date.timeformat,
|
date_format = album.date.timeformat,
|
||||||
country = album.country,
|
|
||||||
barcode = album.barcode,
|
barcode = album.barcode,
|
||||||
albumsort = album.albumsort,
|
albumsort = album.albumsort
|
||||||
is_split = album.is_split
|
|
||||||
).use(self.database)
|
).use(self.database)
|
||||||
|
|
||||||
self.db_objects[data_models.Album].append(db_album)
|
self.db_objects[data_models.Album].append(db_album)
|
||||||
@ -216,13 +216,21 @@ class WritingSession:
|
|||||||
self.db_objects[data_models.AlbumSong].append(db_song_album)
|
self.db_objects[data_models.AlbumSong].append(db_song_album)
|
||||||
|
|
||||||
for artist in album.artist_collection:
|
for artist in album.artist_collection:
|
||||||
db_album_artist = data_models.AlbumArtist(
|
db_album_artist = data_models.ArtistAlbum(
|
||||||
album = album,
|
album = album,
|
||||||
artist = self.add_artist(artist)
|
artist = self.add_artist(artist)
|
||||||
)
|
)
|
||||||
|
|
||||||
self.db_objects[data_models.Artist].append(db_album_artist)
|
self.db_objects[data_models.Artist].append(db_album_artist)
|
||||||
|
|
||||||
|
for label in album.label_collection:
|
||||||
|
self.db_objects[data_models.LabelAlbum].append(
|
||||||
|
data_models.LabelAlbum(
|
||||||
|
label = self.add_label(label=label),
|
||||||
|
album = db_album
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
return db_album
|
return db_album
|
||||||
|
|
||||||
def add_artist(self, artist: objects.Artist) -> Optional[data_models.Artist]:
|
def add_artist(self, artist: objects.Artist) -> Optional[data_models.Artist]:
|
||||||
@ -240,7 +248,10 @@ class WritingSession:
|
|||||||
db_artist = data_models.Artist(
|
db_artist = data_models.Artist(
|
||||||
id = artist.id,
|
id = artist.id,
|
||||||
name = artist.name,
|
name = artist.name,
|
||||||
notes = artist.notes.json
|
country = artist.country_string,
|
||||||
|
formed_in_date = artist.formed_in.timestamp,
|
||||||
|
formed_in_format = artist.formed_in.timestamp,
|
||||||
|
general_genre = artist.general_genre
|
||||||
)
|
)
|
||||||
|
|
||||||
self.db_objects[data_models.Artist].append(db_artist)
|
self.db_objects[data_models.Artist].append(db_artist)
|
||||||
@ -250,12 +261,12 @@ class WritingSession:
|
|||||||
self.add_source(source, db_artist)
|
self.add_source(source, db_artist)
|
||||||
|
|
||||||
for album in artist.main_albums:
|
for album in artist.main_albums:
|
||||||
db_album_artist = data_models.AlbumArtist(
|
db_album_artist = data_models.ArtistAlbum(
|
||||||
artist = artist,
|
artist = artist,
|
||||||
album = self.add_album(album)
|
album = self.add_album(album)
|
||||||
)
|
)
|
||||||
|
|
||||||
self.db_objects[data_models.AlbumArtist].append(db_album_artist)
|
self.db_objects[data_models.ArtistAlbum].append(db_album_artist)
|
||||||
|
|
||||||
for song in artist.feature_songs:
|
for song in artist.feature_songs:
|
||||||
db_artist_song = data_models.SongArtist(
|
db_artist_song = data_models.SongArtist(
|
||||||
@ -266,8 +277,47 @@ class WritingSession:
|
|||||||
|
|
||||||
self.db_objects[data_models.SongArtist].append(db_artist_song)
|
self.db_objects[data_models.SongArtist].append(db_artist_song)
|
||||||
|
|
||||||
|
for label in artist.label_collection:
|
||||||
|
self.db_objects[data_models.LabelArtist].append(
|
||||||
|
data_models.LabelArtist(
|
||||||
|
artist = db_artist,
|
||||||
|
label = self.add_label(label=label)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
return db_artist
|
return db_artist
|
||||||
|
|
||||||
|
def add_label(self, label: objects.Label) -> Optional[data_models.Label]:
|
||||||
|
if label.dynamic:
|
||||||
|
return
|
||||||
|
if label.id in self.added_label_ids:
|
||||||
|
return self.added_label_ids[label.id]
|
||||||
|
|
||||||
|
db_label = data_models.Label(
|
||||||
|
id = label.id,
|
||||||
|
name = label.name,
|
||||||
|
additional_arguments = json.dumps(label.additional_arguments)
|
||||||
|
)
|
||||||
|
|
||||||
|
self.db_objects[data_models.Label]
|
||||||
|
self.add_label[label.id] = db_label
|
||||||
|
|
||||||
|
for album in label.album_collection:
|
||||||
|
self.db_objects[data_models.LabelAlbum].append(
|
||||||
|
data_models.LabelAlbum(
|
||||||
|
album = self.add_album(album=album),
|
||||||
|
label = db_label
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
for artist in label.current_artist_collection:
|
||||||
|
self.db_objects[data_models.LabelArtist].append(
|
||||||
|
artist = self.add_artist(artist=artist),
|
||||||
|
label = db_label
|
||||||
|
)
|
||||||
|
|
||||||
|
return db_label
|
||||||
|
|
||||||
def commit(self, reset: bool = True):
|
def commit(self, reset: bool = True):
|
||||||
"""
|
"""
|
||||||
Commit changes to the database
|
Commit changes to the database
|
||||||
|
@ -21,6 +21,7 @@ Artist = song.Artist
|
|||||||
Source = source.Source
|
Source = source.Source
|
||||||
Target = song.Target
|
Target = song.Target
|
||||||
Lyrics = song.Lyrics
|
Lyrics = song.Lyrics
|
||||||
|
Label = song.Label
|
||||||
|
|
||||||
AlbumType = album.AlbumType
|
AlbumType = album.AlbumType
|
||||||
AlbumStatus = album.AlbumStatus
|
AlbumStatus = album.AlbumStatus
|
||||||
|
@ -206,7 +206,6 @@ class Album(MainObject, SourceAttribute, MetadataAttribute):
|
|||||||
maybe look at how mutagen does it with easy_id3
|
maybe look at how mutagen does it with easy_id3
|
||||||
"""
|
"""
|
||||||
self.barcode: str = barcode
|
self.barcode: str = barcode
|
||||||
self.is_split: bool = is_split
|
|
||||||
"""
|
"""
|
||||||
TODO
|
TODO
|
||||||
implement a function in the Artist class,
|
implement a function in the Artist class,
|
||||||
@ -277,6 +276,10 @@ class Album(MainObject, SourceAttribute, MetadataAttribute):
|
|||||||
id3Mapping.DATE: [self.date.timestamp]
|
id3Mapping.DATE: [self.date.timestamp]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_split(self) -> bool:
|
||||||
|
return len(self.artist_collection) > 1
|
||||||
|
|
||||||
def get_copyright(self) -> str:
|
def get_copyright(self) -> str:
|
||||||
if self.date is None:
|
if self.date is None:
|
||||||
return ""
|
return ""
|
||||||
@ -285,7 +288,8 @@ class Album(MainObject, SourceAttribute, MetadataAttribute):
|
|||||||
|
|
||||||
return f"{self.date.year} {self.label_collection[0].name}"
|
return f"{self.date.year} {self.label_collection[0].name}"
|
||||||
|
|
||||||
def get_iso_639_2_lang(self) -> Optional[str]:
|
@property
|
||||||
|
def iso_639_2_lang(self) -> Optional[str]:
|
||||||
if self.language is None:
|
if self.language is None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -307,8 +311,6 @@ class Album(MainObject, SourceAttribute, MetadataAttribute):
|
|||||||
tracklist: List[Song] = property(fget=lambda self: self.song_collection.copy())
|
tracklist: List[Song] = property(fget=lambda self: self.song_collection.copy())
|
||||||
|
|
||||||
copyright = property(fget=get_copyright)
|
copyright = property(fget=get_copyright)
|
||||||
iso_639_2_language = property(fget=get_iso_639_2_lang)
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
All objects dependent on Artist
|
All objects dependent on Artist
|
||||||
@ -384,6 +386,10 @@ class Artist(MainObject, SourceAttribute, MetadataAttribute):
|
|||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"Artist(\"{self.name}\")"
|
return f"Artist(\"{self.name}\")"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def country_string(self):
|
||||||
|
return self.country.alpha_3
|
||||||
|
|
||||||
def update_albumsort(self):
|
def update_albumsort(self):
|
||||||
"""
|
"""
|
||||||
This updates the albumsort attributes, of the albums in
|
This updates the albumsort attributes, of the albums in
|
||||||
|
Loading…
Reference in New Issue
Block a user