[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. Contains all the playlist routes.
""" """
from copy import deepcopy
from typing import List
from flask import Blueprint, request from flask import Blueprint, request
from app import instances, api from app import instances, api
from app.lib import playlistlib from app.lib import playlistlib
from app import models from app import models
from app import exceptions
playlist_bp = Blueprint("playlist", __name__, url_prefix="/") playlist_bp = Blueprint("playlist", __name__, url_prefix="/")
PlaylistExists = exceptions.PlaylistExists
TrackExistsInPlaylist = exceptions.TrackExistsInPlaylist
@playlist_bp.route("/playlists", methods=["GET"]) @playlist_bp.route("/playlists", methods=["GET"])
def get_all_playlists(): def get_all_playlists():
ppp = deepcopy(api.PLAYLISTS)
playlists = [] playlists = []
for playlist in api.PLAYLISTS: for pl in ppp:
playlist.tracks = [] pl.tracks = []
playlists.append(playlist) playlists.append(pl)
return {"data": playlists} return {"data": playlists}
@ -30,24 +36,28 @@ def create_playlist():
p_in_db = instances.playlist_instance.get_playlist_by_name(playlist["name"]) p_in_db = instances.playlist_instance.get_playlist_by_name(playlist["name"])
if p_in_db: if p_in_db:
raise Exception("Playlist already exists.") raise PlaylistExists("Playlist already exists.")
except Exception as e: except PlaylistExists as e:
return {"error": str(e)}, 409 return {"error": str(e)}, 409
upsert_id = instances.playlist_instance.insert_playlist(playlist) upsert_id = instances.playlist_instance.insert_playlist(playlist)
p = instances.playlist_instance.get_playlist_by_id(upsert_id) 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"]) @playlist_bp.route("/playlist/<playlist_id>/add", methods=["POST"])
def add_track_to_playlist(playlist_id): def add_track_to_playlist(playlist_id):
data = request.get_json() data = request.get_json()
pid = data["playlist"]
trackid = data["track"] trackid = data["track"]
playlistlib.add_track(pid, trackid) try:
return 200 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. 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 from app.lib import trackslib
TrackExistsInPlaylist = exceptions.TrackExistsInPlaylist
def add_track(playlistid: str, trackid: str): def add_track(playlistid: str, trackid: str):
""" """
@ -13,14 +16,23 @@ def add_track(playlistid: str, trackid: str):
for playlist in api.PLAYLISTS: for playlist in api.PLAYLISTS:
if playlist.playlistid == playlistid: if playlist.playlistid == playlistid:
track = trackslib.get_track_by_id(trackid) 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(): def create_all_playlists():
""" """
Gets all playlists from the database. 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)) api.PLAYLISTS.append(models.Playlist(playlist))
_bar.next()
_bar.finish()