Commit 4186e65b authored by petitminion's avatar petitminion
Browse files

Update utils.py

parent 53e4a246
Pipeline #15192 failed with stages
in 15 seconds
import logging
import os
import re
# /!\ The next import have xml vulnerabilities but this shouldn't have security implication in funkwhale
# since there are only used to generate xspf file.
from xml.etree.ElementTree import Element, SubElement
......@@ -27,13 +25,7 @@ def clean_namespace_xspf(xspf_file):
# This is needed because lxml error : "ValueError: Unicode strings with encoding declaration are
# not supported. Please use bytes input or XML fragments without declaration."
xspf_data = re.sub("'encoding='.'", "", xspf_data)
xspf_file_clean = xspf_file + "2"
if os.path.exists(xspf_file_clean):
os.remove(xspf_file_clean)
file = open(xspf_file_clean, "x")
file.write(xspf_data)
return xspf_file_clean
return xspf_data
def get_track_id_from_xspf(xspf_file):
......@@ -41,8 +33,8 @@ def get_track_id_from_xspf(xspf_file):
Return a list of funkwhale tracks id from a xspf file. Tracks not found in database are ignored.
"""
track_list = []
xspf_file_clean = clean_namespace_xspf(xspf_file)
tree = etree.parse(xspf_file_clean)
xspf_data_clean = clean_namespace_xspf(xspf_file)
tree = etree.fromstring(xspf_data_clean)
tracks = tree.findall(".//track")
added_track_count = 0
......@@ -55,7 +47,6 @@ def get_track_id_from_xspf(xspf_file):
album = track.find(".//album").text
except Exception as e:
logger.info(f"Error while parsing Xml file : {e!r}")
# Finding track id in the db
try:
artist_id = Artist.objects.get(name=artist)
......@@ -118,6 +109,35 @@ def generate_xspf_from_playlist(playlist_id):
return prettify(top)
def generate_xspf_from_tracks_ids(tracks_ids):
"""
This returns a string containing playlist data in xspf format. It's used for test purposes.
"""
top = Element("playlist")
top.set("version", "1")
# top.append(Element.fromstring('version="1"'))
title_xspf = SubElement(top, "title")
title_xspf.text = "An automated generated playlist"
trackList_xspf = SubElement(top, "trackList")
for track_id in tracks_ids:
track = Track.objects.get(id=track_id)
track_xspf = SubElement(trackList_xspf, "track")
location_xspf = SubElement(track_xspf, "location")
location_xspf.text = "https://" + track.domain_name + track.listen_url
title_xspf = SubElement(track_xspf, "title")
title_xspf.text = str(track.title)
creator_xspf = SubElement(track_xspf, "creator")
creator_xspf.text = str(track.artist)
if str(track.album) == "[non-album tracks]":
continue
else:
album_xspf = SubElement(track_xspf, "album")
album_xspf.text = str(track.album)
return prettify(top)
def prettify(elem):
"""
Return a pretty-printed XML string for the Element.
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment