added push method to sync db objects, needs to be implemented

This commit is contained in:
Hellow 2022-12-02 14:39:47 +01:00
parent 0744cc8606
commit 7ac5b8a6d3
3 changed files with 81 additions and 10 deletions

View File

@ -1,5 +1,23 @@
import music_kraken import music_kraken
import music_kraken.database.new_database as db
cache = music_kraken.database.new_database.Database("test.db")
cache.reset()
artist = music_kraken.Artist(
name="I'm in a Coffin"
)
song = music_kraken.Song(
title="Vein Deep in the Solution",
release="One Final Action",
artists=[artist]
)
cache.push([artist, song])
"""
music_kraken.clear_cache() music_kraken.clear_cache()
artist = music_kraken.Artist( artist = music_kraken.Artist(
@ -16,3 +34,4 @@ print(song)
print(song.id) print(song.id)
# music_kraken.fetch_sources([song]) # music_kraken.fetch_sources([song])
"""

View File

@ -1,13 +1,23 @@
import sqlite3 import sqlite3
import os import os
import logging import logging
from typing import List
from pkg_resources import resource_string
from .song import (
Song,
Lyrics,
Metadata,
Target,
Artist,
Source
)
logger = logging.getLogger("database") logger = logging.getLogger("database")
class Database: class Database:
def __init__(self, structure_file: str, database_file: str): def __init__(self, database_file: str):
self.structure_file: str = structure_file
self.database_file: str = database_file self.database_file: str = database_file
self.connection = sqlite3.connect(self.database_file) self.connection = sqlite3.connect(self.database_file)
@ -18,7 +28,7 @@ class Database:
Deletes all Data from the database if it exists Deletes all Data from the database if it exists
and resets the schema defined in self.structure_file and resets the schema defined in self.structure_file
""" """
logger.info(f"resetting the database \"{self.__name__}\"") logger.info(f"resetting the database")
# deleting the database # deleting the database
del self.connection del self.connection
@ -28,10 +38,56 @@ class Database:
# newly creating the database # newly creating the database
self.connection = sqlite3.connect(self.database_file) self.connection = sqlite3.connect(self.database_file)
self.cursor = self.connection.cursor() self.cursor = self.connection.cursor()
with open(self.structure_file, "r") as structure_file_obj: query = resource_string("music_kraken", "static_files/new_db.sql").decode('utf-8')
query = structure_file_obj.read()
# fill the database with the schematic # fill the database with the schematic
self.cursor.executescript(query) self.cursor.executescript(query)
self.connection.commit() self.connection.commit()
def push_one(self, db_object: Song | Lyrics | Target | Artist | Source):
if type(db_object) == Song:
return self.push_song(song=db_object)
if type(db_object) == Lyrics:
return self.push_lyrics(lyrics=db_object)
if type(db_object) == Target:
return self.push_target(target=db_object)
if type(db_object) == Artist:
return self.push_artist(artist=db_object)
if type(db_object) == Source:
return self.push_source(source=db_object)
def push(self, db_object_list: List[Song | Lyrics | Target | Artist | Source]):
"""
This function is used to Write the data of any db_object to the database
It syncs a whole list of db_objects to the database and is meant
as the primary method to add to the database.
:param db_object_list:
"""
for db_object in db_object_list:
self.push_one(db_object)
def push_song(self, song: Song):
pass
def push_lyrics(self, lyrics: Lyrics):
pass
def push_target(self, target: Target):
pass
def push_artist(self, artist: Artist):
pass
def push_source(self, source: Source):
pass
if __name__ == "__main__":
cache = Database("")

View File

@ -40,10 +40,6 @@ CREATE TABLE Lyrics
FOREIGN KEY(song_id) REFERENCES Song(id) FOREIGN KEY(song_id) REFERENCES Song(id)
); );
CREATE TABLE EasyId3
(
);
CREATE TABLE SongArtist CREATE TABLE SongArtist
( (
song_id BIGINT, song_id BIGINT,