mirror of
https://github.com/Dvorinka/swingmusic-extended.git
synced 2026-06-05 04:53:01 +00:00
Move MongoDB classes into a seperate db module (#62)
* move album class into mongodb dir * inherit AlbumMethods at DB Initialization level * move album -> db/mongodb * move mongodb classes into separate package
This commit is contained in:
+187
-29
@@ -1,44 +1,202 @@
|
|||||||
|
class AlbumMethods:
|
||||||
"""
|
"""
|
||||||
This module creates and initiliazes a MongoDB instance. It also contains the
|
Lists all the methods that can be found in the Albums class.
|
||||||
`convert_one()` and `conver_many()` methods for converting MongoDB cursors to Python dicts.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pymongo
|
def insert_album():
|
||||||
import json
|
|
||||||
from bson import json_util
|
|
||||||
|
|
||||||
|
|
||||||
class Mongo:
|
|
||||||
"""
|
"""
|
||||||
The base class for all mongodb classes.
|
Inserts a new album object into the database.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_all_albums():
|
||||||
|
"""
|
||||||
|
Returns all the albums in the database.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_album_by_id():
|
||||||
|
"""
|
||||||
|
Returns a single album matching the passed id.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_album_by_name():
|
||||||
|
"""
|
||||||
|
Returns a single album matching the passed name.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_album_by_artist():
|
||||||
|
"""
|
||||||
|
Returns a single album matching the passed artist name.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ArtistMethods:
|
||||||
|
"""
|
||||||
|
Lists all the methods that can be found in the Artists class.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, database):
|
def insert_artist():
|
||||||
mongo_uri = pymongo.MongoClient()
|
|
||||||
self.db = mongo_uri[database]
|
|
||||||
|
|
||||||
|
|
||||||
def convert_one(song):
|
|
||||||
"""
|
"""
|
||||||
Converts a single mongodb cursor to a json object.
|
Inserts a new artist object into the database.
|
||||||
"""
|
"""
|
||||||
json_song = json.dumps(song, default=json_util.default)
|
pass
|
||||||
loaded_song = json.loads(json_song)
|
|
||||||
|
|
||||||
return loaded_song
|
def get_all_artists():
|
||||||
|
|
||||||
|
|
||||||
def convert_many(array):
|
|
||||||
"""
|
"""
|
||||||
Converts a list of mongodb cursors to a list of json objects.
|
Returns all the artists in the database.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_artist_by_id():
|
||||||
|
"""
|
||||||
|
Returns an artist matching the mongo Id.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_artists_by_name():
|
||||||
|
"""
|
||||||
|
Returns all the artists matching the query.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class PlaylistMethods:
|
||||||
|
"""
|
||||||
|
Lists all the methods that can be found in the Playlists class.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
songs = []
|
def insert_playlist():
|
||||||
|
"""
|
||||||
|
Inserts a new playlist object into the database.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
for song in array:
|
def get_all_playlists():
|
||||||
json_song = json.dumps(song, default=json_util.default)
|
"""
|
||||||
loaded_song = json.loads(json_song)
|
Returns all the playlists in the database.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
songs.append(loaded_song)
|
def get_playlist_by_id():
|
||||||
|
"""
|
||||||
|
Returns a single playlist matching the id in the query params.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
return songs
|
def add_track_to_playlist():
|
||||||
|
"""
|
||||||
|
Adds a track to a playlist.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_playlist_by_name():
|
||||||
|
"""
|
||||||
|
Returns a single playlist matching the name in the query params.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def update_playlist():
|
||||||
|
"""
|
||||||
|
Updates a playlist.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class TrackMethods:
|
||||||
|
"""
|
||||||
|
Lists all the methods that can be found in the Tracks class.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def insert_track():
|
||||||
|
"""
|
||||||
|
Inserts a new track object into the database.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def drop_db():
|
||||||
|
"""
|
||||||
|
Drops the entire database.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_all_tracks():
|
||||||
|
"""
|
||||||
|
Returns all the tracks in the database.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_track_by_id():
|
||||||
|
"""
|
||||||
|
Returns a single track matching the id in the query params.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_track_by_album():
|
||||||
|
"""
|
||||||
|
Returns a single track matching the album in the query params.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def search_tracks_by_album():
|
||||||
|
"""
|
||||||
|
Returns all the tracks matching the albums in the query params (using regex).
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def search_tracks_by_artist():
|
||||||
|
"""
|
||||||
|
Returns all the tracks matching the artists in the query params.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def find_track_by_title():
|
||||||
|
"""
|
||||||
|
Finds all the tracks matching the title in the query params.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def find_tracks_by_album():
|
||||||
|
"""
|
||||||
|
Finds all the tracks matching the album in the query params.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def find_tracks_by_folder():
|
||||||
|
"""
|
||||||
|
Finds all the tracks matching the folder in the query params.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def find_tracks_by_artist():
|
||||||
|
"""
|
||||||
|
Finds all the tracks matching the artist in the query params.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def find_tracks_by_albumartist():
|
||||||
|
"""
|
||||||
|
Finds all the tracks matching the album artist in the query params.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_track_by_path():
|
||||||
|
"""
|
||||||
|
Returns a single track matching the path in the query params.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def remove_track_by_path():
|
||||||
|
"""
|
||||||
|
Removes a track from the database. Returns a boolean indicating success or failure of the operation.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def remove_track_by_id():
|
||||||
|
"""
|
||||||
|
Removes a track from the database. Returns a boolean indicating success or failure of the operation.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|||||||
@@ -0,0 +1,80 @@
|
|||||||
|
"""
|
||||||
|
This module creates and initiliazes a MongoDB instance. It also contains the
|
||||||
|
`convert_one()` and `conver_many()` methods for converting MongoDB cursors to Python dicts.
|
||||||
|
"""
|
||||||
|
import json
|
||||||
|
|
||||||
|
import pymongo
|
||||||
|
from app.db import AlbumMethods
|
||||||
|
from app.db import ArtistMethods
|
||||||
|
from app.db import PlaylistMethods
|
||||||
|
from app.db import TrackMethods
|
||||||
|
from bson import json_util
|
||||||
|
|
||||||
|
|
||||||
|
class Mongo:
|
||||||
|
"""
|
||||||
|
The base class for all mongodb classes.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, database):
|
||||||
|
mongo_uri = pymongo.MongoClient()
|
||||||
|
self.db = mongo_uri[database]
|
||||||
|
|
||||||
|
|
||||||
|
class MongoAlbums(Mongo, AlbumMethods):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super(MongoAlbums, self).__init__("ALICE_ALBUMS")
|
||||||
|
self.collection = self.db["ALL_ALBUMS"]
|
||||||
|
|
||||||
|
|
||||||
|
class MongoArtists(Mongo, ArtistMethods):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super(MongoArtists, self).__init__("ALICE_ARTISTS")
|
||||||
|
self.collection = self.db["ALL_ARTISTS"]
|
||||||
|
|
||||||
|
|
||||||
|
class MongoPlaylists(Mongo, PlaylistMethods):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super(MongoPlaylists, self).__init__("ALICE_PLAYLISTS")
|
||||||
|
self.collection = self.db["ALL_PLAYLISTS"]
|
||||||
|
|
||||||
|
|
||||||
|
class MongoTracks(Mongo, TrackMethods):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super(MongoTracks, self).__init__("ALICE_MUSIC_TRACKS")
|
||||||
|
self.collection = self.db["ALL_TRACKS"]
|
||||||
|
|
||||||
|
|
||||||
|
# ====================================================================== #
|
||||||
|
# cursor convertion methods
|
||||||
|
|
||||||
|
|
||||||
|
def convert_one(song):
|
||||||
|
"""
|
||||||
|
Converts a single mongodb cursor to a json object.
|
||||||
|
"""
|
||||||
|
json_song = json.dumps(song, default=json_util.default)
|
||||||
|
loaded_song = json.loads(json_song)
|
||||||
|
|
||||||
|
return loaded_song
|
||||||
|
|
||||||
|
|
||||||
|
def convert_many(array):
|
||||||
|
"""
|
||||||
|
Converts a list of mongodb cursors to a list of json objects.
|
||||||
|
"""
|
||||||
|
|
||||||
|
songs = []
|
||||||
|
|
||||||
|
for song in array:
|
||||||
|
json_song = json.dumps(song, default=json_util.default)
|
||||||
|
loaded_song = json.loads(json_song)
|
||||||
|
|
||||||
|
songs.append(loaded_song)
|
||||||
|
|
||||||
|
return songs
|
||||||
@@ -3,22 +3,18 @@ This file contains the Album class for interacting with
|
|||||||
album documents in MongoDB.
|
album documents in MongoDB.
|
||||||
"""
|
"""
|
||||||
from app import db
|
from app import db
|
||||||
|
from app.db.mongodb import convert_many
|
||||||
|
from app.db.mongodb import convert_one
|
||||||
|
from app.db.mongodb import MongoAlbums
|
||||||
from app.models import Album
|
from app.models import Album
|
||||||
from bson import ObjectId
|
from bson import ObjectId
|
||||||
|
|
||||||
convert_many = db.convert_many
|
|
||||||
convert_one = db.convert_one
|
|
||||||
|
|
||||||
|
class Albums(MongoAlbums):
|
||||||
class Albums(db.Mongo):
|
|
||||||
"""
|
"""
|
||||||
The class for all album-related database operations.
|
The class for all album-related database operations.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(Albums, self).__init__("ALICE_ALBUMS")
|
|
||||||
self.collection = self.db["ALL_ALBUMS"]
|
|
||||||
|
|
||||||
def insert_album(self, album: Album) -> None:
|
def insert_album(self, album: Album) -> None:
|
||||||
"""
|
"""
|
||||||
Inserts a new album object into the database.
|
Inserts a new album object into the database.
|
||||||
@@ -1,19 +1,15 @@
|
|||||||
"""
|
"""
|
||||||
This file contains the Artists class for interacting with artist documents in MongoDB.
|
This file contains the Artists class for interacting with artist documents in MongoDB.
|
||||||
"""
|
"""
|
||||||
from app import db
|
from app.db.mongodb import MongoArtists
|
||||||
from bson import ObjectId
|
from bson import ObjectId
|
||||||
|
|
||||||
|
|
||||||
class Artists(db.Mongo):
|
class Artists(MongoArtists):
|
||||||
"""
|
"""
|
||||||
The artist class for all artist related database operations.
|
The artist class for all artist related database operations.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(Artists, self).__init__("ALICE_ARTISTS")
|
|
||||||
self.collection = self.db["ALL_ARTISTS"]
|
|
||||||
|
|
||||||
def insert_artist(self, artist_obj: dict) -> None:
|
def insert_artist(self, artist_obj: dict) -> None:
|
||||||
"""
|
"""
|
||||||
Inserts an artist into the database.
|
Inserts an artist into the database.
|
||||||
@@ -1,32 +1,29 @@
|
|||||||
"""
|
"""
|
||||||
This file contains the Playlists class for interacting with the playlist documents in MongoDB.
|
This file contains the Playlists class for interacting with the playlist documents in MongoDB.
|
||||||
"""
|
"""
|
||||||
from app import db
|
from app.db.mongodb import convert_many
|
||||||
from app import models
|
from app.db.mongodb import convert_one
|
||||||
|
from app.db.mongodb import MongoPlaylists
|
||||||
|
from app.helpers import create_new_date
|
||||||
from bson import ObjectId
|
from bson import ObjectId
|
||||||
|
|
||||||
from app.helpers import create_new_date
|
|
||||||
|
|
||||||
convert_many = db.convert_many
|
class Playlists(MongoPlaylists):
|
||||||
convert_one = db.convert_one
|
|
||||||
|
|
||||||
|
|
||||||
class Playlists(db.Mongo):
|
|
||||||
"""
|
"""
|
||||||
The class for all playlist-related database operations.
|
The class for all playlist-related database operations.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(Playlists, self).__init__("ALICE_PLAYLISTS")
|
|
||||||
self.collection = self.db["ALL_PLAYLISTS"]
|
|
||||||
|
|
||||||
def insert_playlist(self, playlist: dict) -> None:
|
def insert_playlist(self, playlist: dict) -> None:
|
||||||
"""
|
"""
|
||||||
Inserts a new playlist object into the database.
|
Inserts a new playlist object into the database.
|
||||||
"""
|
"""
|
||||||
return self.collection.update_one(
|
return self.collection.update_one(
|
||||||
{"name": playlist["name"]},
|
{
|
||||||
{"$set": playlist},
|
"name": playlist["name"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$set": playlist
|
||||||
|
},
|
||||||
upsert=True,
|
upsert=True,
|
||||||
).upserted_id
|
).upserted_id
|
||||||
|
|
||||||
@@ -54,7 +51,14 @@ class Playlists(db.Mongo):
|
|||||||
{
|
{
|
||||||
"_id": ObjectId(playlistid),
|
"_id": ObjectId(playlistid),
|
||||||
},
|
},
|
||||||
{"$push": {"pre_tracks": track}, "$set": {"lastUpdated": date}},
|
{
|
||||||
|
"$push": {
|
||||||
|
"pre_tracks": track
|
||||||
|
},
|
||||||
|
"$set": {
|
||||||
|
"lastUpdated": date
|
||||||
|
}
|
||||||
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_playlist_by_name(self, name: str) -> dict:
|
def get_playlist_by_name(self, name: str) -> dict:
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# """
|
||||||
|
# This file contains the TrackColors class for interacting with Track colors documents in MongoDB.
|
||||||
|
# """
|
||||||
|
# from app import db
|
||||||
|
# class TrackColors(db.Mongo):
|
||||||
|
# """
|
||||||
|
# The class for all track-related database operations.
|
||||||
|
# """
|
||||||
|
# def __init__(self):
|
||||||
|
# super(TrackColors, self).__init__("ALICE_TRACK_COLORS")
|
||||||
|
# self.collection = self.db["TRACK_COLORS"]
|
||||||
|
# def insert_track_color(self, track_color: dict) -> None:
|
||||||
|
# """
|
||||||
|
# Inserts a new track object into the database.
|
||||||
|
# """
|
||||||
|
# return self.collection.update_one(
|
||||||
|
# {
|
||||||
|
# "filepath": track_color["filepath"]
|
||||||
|
# },
|
||||||
|
# {
|
||||||
|
# "$set": track_color
|
||||||
|
# },
|
||||||
|
# upsert=True,
|
||||||
|
# ).upserted_id
|
||||||
|
# def get_track_color_by_track(self, filepath: str) -> dict:
|
||||||
|
# """
|
||||||
|
# Returns a track color object by its filepath.
|
||||||
|
# """
|
||||||
|
# track_color = self.collection.find_one({"filepath": filepath})
|
||||||
|
# return db.convert_one(track_color)
|
||||||
@@ -1,22 +1,17 @@
|
|||||||
"""
|
"""
|
||||||
This file contains the AllSongs class for interacting with track documents in MongoDB.
|
This file contains the AllSongs class for interacting with track documents in MongoDB.
|
||||||
"""
|
"""
|
||||||
from app import db
|
from app.db.mongodb import convert_many
|
||||||
|
from app.db.mongodb import convert_one
|
||||||
|
from app.db.mongodb import MongoTracks
|
||||||
from bson import ObjectId
|
from bson import ObjectId
|
||||||
|
|
||||||
convert_many = db.convert_many
|
|
||||||
convert_one = db.convert_one
|
|
||||||
|
|
||||||
|
class Tracks(MongoTracks):
|
||||||
class AllSongs(db.Mongo):
|
|
||||||
"""
|
"""
|
||||||
The class for all track-related database operations.
|
The class for all track-related database operations.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(AllSongs, self).__init__("ALICE_MUSIC_TRACKS")
|
|
||||||
self.collection = self.db["ALL_TRACKS"]
|
|
||||||
|
|
||||||
# def drop_db(self):
|
# def drop_db(self):
|
||||||
# self.collection.drop()
|
# self.collection.drop()
|
||||||
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
"""
|
|
||||||
This file contains the TrackColors class for interacting with Track colors documents in MongoDB.
|
|
||||||
"""
|
|
||||||
from app import db
|
|
||||||
|
|
||||||
|
|
||||||
class TrackColors(db.Mongo):
|
|
||||||
"""
|
|
||||||
The class for all track-related database operations.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(TrackColors, self).__init__("ALICE_TRACK_COLORS")
|
|
||||||
self.collection = self.db["TRACK_COLORS"]
|
|
||||||
|
|
||||||
def insert_track_color(self, track_color: dict) -> None:
|
|
||||||
"""
|
|
||||||
Inserts a new track object into the database.
|
|
||||||
"""
|
|
||||||
return self.collection.update_one(
|
|
||||||
{
|
|
||||||
"filepath": track_color["filepath"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"$set": track_color
|
|
||||||
},
|
|
||||||
upsert=True,
|
|
||||||
).upserted_id
|
|
||||||
|
|
||||||
def get_track_color_by_track(self, filepath: str) -> dict:
|
|
||||||
"""
|
|
||||||
Returns a track color object by its filepath.
|
|
||||||
"""
|
|
||||||
track_color = self.collection.find_one({"filepath": filepath})
|
|
||||||
return db.convert_one(track_color)
|
|
||||||
@@ -1,14 +1,12 @@
|
|||||||
"""
|
"""
|
||||||
All the MongoDB instances are created here.
|
All the MongoDB instances are created here.
|
||||||
"""
|
"""
|
||||||
from app.db import albums
|
from app.db.mongodb import albums
|
||||||
from app.db import artists
|
from app.db.mongodb import artists
|
||||||
from app.db import playlists
|
from app.db.mongodb import playlists
|
||||||
from app.db import trackcolors
|
from app.db.mongodb import tracks
|
||||||
from app.db import tracks
|
|
||||||
|
|
||||||
tracks_instance = tracks.AllSongs()
|
tracks_instance = tracks.Tracks()
|
||||||
artist_instance = artists.Artists()
|
artist_instance = artists.Artists()
|
||||||
track_color_instance = trackcolors.TrackColors()
|
|
||||||
album_instance = albums.Albums()
|
album_instance = albums.Albums()
|
||||||
playlist_instance = playlists.Playlists()
|
playlist_instance = playlists.Playlists()
|
||||||
|
|||||||
Reference in New Issue
Block a user