diff --git a/manager/admin.py b/manager/admin.py index 3f18eb2..4b37be1 100644 --- a/manager/admin.py +++ b/manager/admin.py @@ -1,9 +1,10 @@ from django.contrib import admin -from manager.models import Playlist, Track, Artist, PlaylistEntry +from manager.models import Playlist, Track, Artist, PlaylistEntry, PlaylistSession admin.site.register(Playlist) admin.site.register(Track) admin.site.register(Artist) admin.site.register(PlaylistEntry) +admin.site.register(PlaylistSession) # Register your models here. diff --git a/manager/fields.py b/manager/fields.py new file mode 100644 index 0000000..638b3ee --- /dev/null +++ b/manager/fields.py @@ -0,0 +1,40 @@ +from django.db import models +from django.core.serializers.json import DjangoJSONEncoder +import json + +class JSONField(models.TextField): + + """ + JSONField is a generic textfield that neatly serializes/unserializes + JSON objects seamlessly. + Django snippet #1478 + + example: + class Page(models.Model): + data = JSONField(blank=True, null=True) + + + page = Page.objects.get(pk=5) + page.data = {'title': 'test', 'type': 3} + page.save() + """ + + __metaclass__ = models.SubfieldBase + + def to_python(self, value): + if value == "": + return None + + try: + if isinstance(value, basestring): + return json.loads(value) + except ValueError: + pass + return value + + def get_db_prep_save(self, value, *args, **kwargs): + if value == "": + return None + if isinstance(value, dict): + value = json.dumps(value, cls=DjangoJSONEncoder) + return super(JSONField, self).get_db_prep_save(value, *args, **kwargs) diff --git a/manager/models.py b/manager/models.py index 0659b2d..b7777b7 100644 --- a/manager/models.py +++ b/manager/models.py @@ -1,18 +1,24 @@ from django.db import models -import pprint -import sys -import os -import subprocess +# import pprint +# import sys +# import os +# import subprocess +import unicodedata import requests import json -def import_playlists(userid = 674215921): - user_playlists=json.loads(requests.get("https://api.deezer.com/user/" + str(userid) + "/playlists").text)['data'] +from fields import JSONField + + +def import_playlists(userid=674215921): + user_playlists = json.loads(requests.get( + "https://api.deezer.com/user/" + str(userid) + "/playlists").text)['data'] for playlist in user_playlists: - json_result=requests.get("https://api.deezer.com/playlist/" + str(playlist['id'])) - playlist_tracks=json.loads(json_result.text)['tracks']['data'] - if not Playlist.objects.filter(DeezerId= int(playlist['id'])).exists(): + json_result = requests.get( + "https://api.deezer.com/playlist/" + str(playlist['id'])) + playlist_tracks = json.loads(json_result.text)['tracks']['data'] + if not Playlist.objects.filter(DeezerId=int(playlist['id'])).exists(): pl = Playlist() pl.title = playlist['title'] pl.DeezerId = playlist['id'] @@ -23,7 +29,7 @@ def import_playlists(userid = 674215921): pl.save() for track in playlist_tracks: - if not Artist.objects.filter(DeezerId= int(track['artist']['id'])).exists(): + if not Artist.objects.filter(DeezerId=int(track['artist']['id'])).exists(): art = Artist() art.name = track['artist']['name'] art.DeezerId = track['artist']['id'] @@ -31,17 +37,19 @@ def import_playlists(userid = 674215921): # art.picture = track['artist']['picture'] art.save() - if not Track.objects.filter(DeezerId= int(track['id'])).exists(): + if not Track.objects.filter(DeezerId=int(track['id'])).exists(): tr = Track() tr.title = track['title'] tr.DeezerId = track['id'] tr.link = track['link'] tr.duration = track['duration'] - tr.ArtistId = Artist.objects.filter(DeezerId=int(track['artist']['id'])).first() + tr.ArtistId = Artist.objects.filter( + DeezerId=int(track['artist']['id'])).first() tr.save() tr_id = Track.objects.filter(DeezerId=int(track['id'])).first() - pl_id = Playlist.objects.filter(DeezerId=int(playlist['id'])).first() + pl_id = Playlist.objects.filter( + DeezerId=int(playlist['id'])).first() if not PlaylistEntry.objects.filter(TrackId=tr_id, PlaylistId=pl_id).exists(): pl_ent = PlaylistEntry() @@ -51,6 +59,8 @@ def import_playlists(userid = 674215921): pl_ent.save() # Create your models here. + + class Playlist(models.Model): title = models.CharField(max_length=100) DeezerId = models.IntegerField(unique=True) @@ -68,6 +78,16 @@ def getMinutes(self): def __str__(self): # __unicode__ on Python 2 return self.title + def to_dict(self): + dico = { + "DeezerId": self.DeezerId, + "description": self.description, + "link": self.link, + "picture": self.picture, + "duration": self.duration + } + return dico + class Artist(models.Model): name = models.CharField(max_length=100) @@ -78,6 +98,17 @@ class Artist(models.Model): def __str__(self): # __unicode__ on Python 2 return self.name + def to_dict(self): + dico = { + "name": self.name[:16], + # "name": remove_accents(self.name[:16]), + "DeezerId": self.DeezerId, + "link": self.link, + "picture": self.picture, + } + return dico + + class Track(models.Model): title = models.CharField(max_length=100) DeezerId = models.IntegerField(unique=True) @@ -91,9 +122,24 @@ def getMinutes(self): else: return 'unknown' + def getmSec(self): + return "%d " % (self.duration * 1000) + def __str__(self): # __unicode__ on Python 2 return self.title + def to_dict(self): + dico = { + "title": remove_accents(self.title[:25]), + "DeezerId": self.DeezerId, + "link": self.link, + "duration": self.duration, + "minutes": self.getMinutes(), + "artist": self.ArtistId.to_dict(), + "vote": 0 + } + return dico + class PlaylistEntry(models.Model): PlaylistId = models.ForeignKey(Playlist) @@ -103,3 +149,23 @@ def __str__(self): # __unicode__ on Python 2 string = self.PlaylistId.title + ' - ' + str(elf.TrackId.title) return string + def to_dict(self): + dico = {} + return dico + + +class PlaylistSession(models.Model): + Session = JSONField(blank=True, null=True) + + def __str__(self): # __unicode__ on Python 2 + # string = self.PlaylistId.title + ' - ' + str(elf.TrackId.title) + return str(self.id) + + +def remove_accents(input_str): + nkfd_form = unicodedata.normalize('NFKD', input_str) + only_ascii = nkfd_form.encode('ASCII', 'ignore') + return only_ascii + + + diff --git a/manager/templates/manager/index.html b/manager/templates/manager/index.html new file mode 100644 index 0000000..af25a8a --- /dev/null +++ b/manager/templates/manager/index.html @@ -0,0 +1,33 @@ +{% extends 'base.html' %} +{% block menu%} + {% include "player/menu.html" %} +{% endblock %} +{% block content%} +