You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.8 KiB
92 lines
2.8 KiB
# imports {{{ #
|
|
|
|
import math
|
|
import random
|
|
import requests
|
|
import os
|
|
import urllib
|
|
import secrets
|
|
import string
|
|
|
|
from pprint import pprint
|
|
from datetime import datetime
|
|
from time import strftime
|
|
from django.shortcuts import render, redirect
|
|
from .utils import *
|
|
from django_tables2 import RequestConfig, SingleTableView
|
|
from django_tables2.export.views import ExportMixin
|
|
from django_tables2.export import TableExport
|
|
from api.models import History
|
|
|
|
# }}} imports #
|
|
|
|
def display_artist_graph(request, user_secret):
|
|
"""Renders the artist data graph display page
|
|
|
|
:param request: the HTTP request
|
|
:param user_secret: the user secret used for identification
|
|
:return: render the artist data graph display page
|
|
"""
|
|
return render(request, "graphs/artist_graph.html",
|
|
get_secret_context(user_secret))
|
|
|
|
|
|
def display_genre_graph(request, user_secret):
|
|
return render(request, "graphs/genre_graph.html",
|
|
get_secret_context(user_secret))
|
|
|
|
|
|
def display_features_graphs(request, user_secret):
|
|
"""Renders the audio features page
|
|
|
|
:param request: the HTTP request
|
|
:param user_secret: user secret used for identification
|
|
:return: renders the audio features page
|
|
"""
|
|
return render(request, "graphs/features_graphs.html",
|
|
get_secret_context(user_secret))
|
|
|
|
# HistoryList {{{ #
|
|
|
|
class HistoryList(ExportMixin, SingleTableView):
|
|
"""Create table with list of song history."""
|
|
model = History
|
|
table_class = HistoryTable
|
|
context_table_name = 'user_history_table'
|
|
template_name = 'graphs/user_history.html'
|
|
|
|
# overridden methods {{{ #
|
|
|
|
def get_table_kwargs(self):
|
|
return { 'exclude': ('id', 'user', 'track', 'track_id', 'iso_timestamp', ) }
|
|
|
|
def get_table_data(self):
|
|
return History.objects.filter(user__exact=self.request.session['user_id']).order_by('-timestamp')
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context['user_id'] = self.request.session['user_id']
|
|
context['total_history'] = self.get_table_data().count()
|
|
return context
|
|
|
|
def get_export_filename(self, export_format):
|
|
user_id = self.request.session['user_id']
|
|
# timestamp = strftime("%m%d%Y-%H%M")
|
|
# return "{}.{}".format("-".join((user_id, timestamp)), export_format)
|
|
return "{}.{}".format(user_id, export_format)
|
|
|
|
def create_export(self, export_format):
|
|
export_exclude = ('id', 'user', 'track', 'track_name', 'artists',
|
|
'timestamp', )
|
|
exporter = TableExport(
|
|
export_format=export_format,
|
|
table=self.get_table(exclude=export_exclude),
|
|
exclude_columns=self.exclude_columns,
|
|
)
|
|
|
|
return exporter.response(filename=self.get_export_filename(export_format))
|
|
|
|
# }}} overridden methods #
|
|
|
|
# }}} HistoryList #
|
|
|