implemented

DatabaseObject.indexing_values
for each data objects
This commit is contained in:
Hellow 2023-03-09 19:53:28 +01:00
parent 617ca1316a
commit 0ffb642ac7
2 changed files with 59 additions and 7 deletions

View File

@ -1,5 +1,5 @@
import os import os
from typing import List, Optional, Type, Dict from typing import List, Optional, Type, Dict, Tuple
import pycountry import pycountry
from .metadata import ( from .metadata import (
@ -11,6 +11,7 @@ from ..utils.shared import (
MUSIC_DIR, MUSIC_DIR,
DATABASE_LOGGER as LOGGER DATABASE_LOGGER as LOGGER
) )
from ..utils.string_processing import unify
from .parents import ( from .parents import (
DatabaseObject, DatabaseObject,
MainObject MainObject
@ -47,6 +48,7 @@ class Song(MainObject, SourceAttribute, MetadataAttribute):
_id: str = None, _id: str = None,
dynamic: bool = False, dynamic: bool = False,
title: str = None, title: str = None,
unified_title: str = None,
isrc: str = None, isrc: str = None,
length: int = None, length: int = None,
tracksort: int = None, tracksort: int = None,
@ -65,6 +67,8 @@ class Song(MainObject, SourceAttribute, MetadataAttribute):
MainObject.__init__(self, _id=_id, dynamic=dynamic, **kwargs) MainObject.__init__(self, _id=_id, dynamic=dynamic, **kwargs)
# attributes # attributes
self.title: str = title self.title: str = title
self.unified_title: str = unified_title or unify(title)
self.isrc: str = isrc self.isrc: str = isrc
self.length: int = length self.length: int = length
self.tracksort: int = tracksort or 0 self.tracksort: int = tracksort or 0
@ -128,6 +132,15 @@ class Song(MainObject, SourceAttribute, MetadataAttribute):
""" """
return f"{self.tracksort}/{len(self.album.tracklist) or 1}" return f"{self.tracksort}/{len(self.album.tracklist) or 1}"
@property
def indexing_values(self) -> List[Tuple[str, object]]:
return [
('id', self.id),
('title', self.unified_title),
('isrc', self.isrc.strip()),
*[('url', source.url) for source in self.source_list]
]
def get_metadata(self) -> MetadataAttribute.Metadata: def get_metadata(self) -> MetadataAttribute.Metadata:
metadata = MetadataAttribute.Metadata({ metadata = MetadataAttribute.Metadata({
id3Mapping.TITLE: [self.title], id3Mapping.TITLE: [self.title],
@ -181,10 +194,10 @@ class Album(MainObject, SourceAttribute, MetadataAttribute):
self, self,
_id: str = None, _id: str = None,
title: str = None, title: str = None,
unified_title: str = None,
language: pycountry.Languages = None, language: pycountry.Languages = None,
date: ID3Timestamp = None, date: ID3Timestamp = None,
barcode: str = None, barcode: str = None,
is_split: bool = False,
albumsort: int = None, albumsort: int = None,
dynamic: bool = False, dynamic: bool = False,
source_list: List[Source] = None, source_list: List[Source] = None,
@ -198,6 +211,8 @@ class Album(MainObject, SourceAttribute, MetadataAttribute):
MainObject.__init__(self, _id=_id, dynamic=dynamic, **kwargs) MainObject.__init__(self, _id=_id, dynamic=dynamic, **kwargs)
self.title: str = title self.title: str = title
self.unified_title: str = unified_title or unify(self.title)
self.album_status: AlbumStatus = album_status self.album_status: AlbumStatus = album_status
self.album_type: AlbumType = album_type self.album_type: AlbumType = album_type
self.language: pycountry.Languages = language self.language: pycountry.Languages = language
@ -236,6 +251,15 @@ class Album(MainObject, SourceAttribute, MetadataAttribute):
self.source_list = source_list or [] self.source_list = source_list or []
@property
def indexing_values(self) -> List[Tuple[str, object]]:
return [
('id', self.id),
('title', self.unified_title),
('barcode', self.barcode),
*[('url', source.url) for source in self.source_list]
]
def __repr__(self): def __repr__(self):
return f"Album(\"{self.title}\")" return f"Album(\"{self.title}\")"
@ -250,8 +274,9 @@ class Album(MainObject, SourceAttribute, MetadataAttribute):
:return: :return:
""" """
tracksort_map: Dict[int, Song] = {song.tracksort: song for song in self.song_collection if tracksort_map: Dict[int, Song] = {
song.tracksort is not None} song.tracksort: song for song in self.song_collection if song.tracksort is not None
}
# place the songs, with set tracksort attribute according to it # place the songs, with set tracksort attribute according to it
for tracksort, song in tracksort_map.items(): for tracksort, song in tracksort_map.items():
@ -336,6 +361,7 @@ class Artist(MainObject, SourceAttribute, MetadataAttribute):
_id: str = None, _id: str = None,
dynamic: bool = False, dynamic: bool = False,
name: str = None, name: str = None,
unified_name: str = None,
source_list: List[Source] = None, source_list: List[Source] = None,
feature_song_list: List[Song] = None, feature_song_list: List[Song] = None,
main_album_list: List[Album] = None, main_album_list: List[Album] = None,
@ -350,6 +376,7 @@ class Artist(MainObject, SourceAttribute, MetadataAttribute):
MainObject.__init__(self, _id=_id, dynamic=dynamic, **kwargs) MainObject.__init__(self, _id=_id, dynamic=dynamic, **kwargs)
self.name: str = name self.name: str = name
self.unified_name: str = unified_name or unify(self.name)
""" """
TODO implement album type and notes TODO implement album type and notes
@ -359,7 +386,7 @@ class Artist(MainObject, SourceAttribute, MetadataAttribute):
""" """
notes, generall genre, lyrics themes are attributes notes, generall genre, lyrics themes are attributes
which are meant to only use in outputs to describe the object which are meant to only use in outputs to describe the object
i mean do as you want but there aint no strict rule about em so good luck i mean do as you want but there is no strict rule about em so good luck
""" """
self.notes: FormattedText = notes or FormattedText() self.notes: FormattedText = notes or FormattedText()
""" """
@ -389,6 +416,14 @@ class Artist(MainObject, SourceAttribute, MetadataAttribute):
self.source_list = source_list or [] self.source_list = source_list or []
@property
def indexing_values(self) -> List[Tuple[str, object]]:
return [
('id', self.id),
('name', self.unified_name),
*[('url', source.url) for source in self.source_list]
]
def __str__(self): def __str__(self):
string = self.name or "" string = self.name or ""
plaintext_notes = self.notes.get_plaintext() plaintext_notes = self.notes.get_plaintext()
@ -491,6 +526,7 @@ class Label(MainObject, SourceAttribute, MetadataAttribute):
_id: str = None, _id: str = None,
dynamic: bool = False, dynamic: bool = False,
name: str = None, name: str = None,
unified_name: str = None,
album_list: List[Album] = None, album_list: List[Album] = None,
current_artist_list: List[Artist] = None, current_artist_list: List[Artist] = None,
source_list: List[Source] = None, source_list: List[Source] = None,
@ -499,6 +535,7 @@ class Label(MainObject, SourceAttribute, MetadataAttribute):
MainObject.__init__(self, _id=_id, dynamic=dynamic, **kwargs) MainObject.__init__(self, _id=_id, dynamic=dynamic, **kwargs)
self.name: str = name self.name: str = name
self.unified_name: str = unified_name or unify(self.name)
self.album_collection: Collection = Collection( self.album_collection: Collection = Collection(
data=album_list, data=album_list,
@ -514,13 +551,21 @@ class Label(MainObject, SourceAttribute, MetadataAttribute):
self.source_list = source_list or [] self.source_list = source_list or []
@property
def indexing_values(self) -> List[Tuple[str, object]]:
return [
('id', self.id),
('name', self.unified_name),
*[('url', source.url) for source in self.source_list]
]
@property @property
def album_list(self) -> List[Album]: def album_list(self) -> List[Album]:
return self.album_collection.copy() return self.album_collection.copy()
@property @property
def current_artist_list(self) -> List[Artist]: def current_artist_list(self) -> List[Artist]:
self.current_artist_collection.copy() return self.current_artist_collection.copy()
COLLECTION_ATTRIBUTES = ("album_collection", "current_artist_collection") COLLECTION_ATTRIBUTES = ("album_collection", "current_artist_collection")
SIMPLE_ATTRIBUTES = ("name",) SIMPLE_ATTRIBUTES = ("name",)

View File

@ -1,5 +1,5 @@
from enum import Enum from enum import Enum
from typing import List, Dict from typing import List, Dict, Tuple
from .metadata import Mapping, MetadataAttribute from .metadata import Mapping, MetadataAttribute
from .parents import ( from .parents import (
@ -115,6 +115,13 @@ class Source(DatabaseObject, MetadataAttribute):
return super().get_metadata() return super().get_metadata()
@property
def indexing_values(self) -> List[Tuple[str, object]]:
return [
('id', self.id),
('url', self.url)
]
def __str__(self): def __str__(self):
return self.__repr__() return self.__repr__()