[server] fix playlist methods

- deepcopy playlists in get_all_playlists
This commit is contained in:
geoffrey45 2022-03-27 18:13:51 +03:00
parent 8bb13a109d
commit fe0d7cae1a
2 changed files with 37 additions and 15 deletions

View File

@ -1,22 +1,28 @@
"""
Contains all the playlist routes.
"""
from copy import deepcopy
from typing import List
from flask import Blueprint, request
from app import instances, api
from app.lib import playlistlib
from app import models
from app import exceptions
playlist_bp = Blueprint("playlist", __name__, url_prefix="/")
PlaylistExists = exceptions.PlaylistExists
TrackExistsInPlaylist = exceptions.TrackExistsInPlaylist
@playlist_bp.route("/playlists", methods=["GET"])
def get_all_playlists():
ppp = deepcopy(api.PLAYLISTS)
playlists = []
for playlist in api.PLAYLISTS:
playlist.tracks = []
playlists.append(playlist)
for pl in ppp:
pl.tracks = []
playlists.append(pl)
return {"data": playlists}
@ -30,24 +36,28 @@ def create_playlist():
p_in_db = instances.playlist_instance.get_playlist_by_name(playlist["name"])
if p_in_db:
raise Exception("Playlist already exists.")
except Exception as e:
raise PlaylistExists("Playlist already exists.")
except PlaylistExists as e:
return {"error": str(e)}, 409
upsert_id = instances.playlist_instance.insert_playlist(playlist)
p = instances.playlist_instance.get_playlist_by_id(upsert_id)
pp = models.Playlist(p)
api.PLAYLISTS.append(models.Playlist(p))
api.PLAYLISTS.append(pp)
return {"msg": "Playlist created successfully."}, 201
return {"playlist": pp}, 201
@playlist_bp.route("/playlist/<playlist_id>/add", methods=["POST"])
def add_track_to_playlist(playlist_id):
data = request.get_json()
pid = data["playlist"]
trackid = data["track"]
playlistlib.add_track(pid, trackid)
return 200
try:
playlistlib.add_track(playlist_id, trackid)
except TrackExistsInPlaylist as e:
return {"error": str(e)}, 409
return {"msg": "I think It's done"}, 200

View File

@ -1,10 +1,13 @@
"""
This library contains all the functions related to playlists.
"""
from progress.bar import Bar
from app import api, instances, models, exceptions, helpers
from app import api, instances, models
from app.lib import trackslib
TrackExistsInPlaylist = exceptions.TrackExistsInPlaylist
def add_track(playlistid: str, trackid: str):
"""
@ -13,14 +16,23 @@ def add_track(playlistid: str, trackid: str):
for playlist in api.PLAYLISTS:
if playlist.playlistid == playlistid:
track = trackslib.get_track_by_id(trackid)
playlist.tracks.append(track)
instances.playlist_instance.add_track_to_playlist(playlistid, track)
if track not in playlist.tracks:
playlist.tracks.append(track)
instances.playlist_instance.add_track_to_playlist(playlistid, track)
return
else:
raise TrackExistsInPlaylist("Track already in playlist.")
def create_all_playlists():
"""
Gets all playlists from the database.
"""
for playlist in instances.playlist_instance.get_all_playlists():
playlists = instances.playlist_instance.get_all_playlists()
_bar = Bar("Creating playlists", max=len(playlists))
for playlist in playlists:
api.PLAYLISTS.append(models.Playlist(playlist))
_bar.next()
_bar.finish()