Graphs and tables for your Spotify account.
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

  1. # imports {{{ #
  2. import math
  3. import random
  4. import requests
  5. import os
  6. import urllib
  7. import secrets
  8. import string
  9. from pprint import pprint
  10. from datetime import datetime
  11. from time import strftime
  12. from django.shortcuts import render, redirect
  13. from .utils import *
  14. from django_tables2 import RequestConfig, SingleTableView
  15. from django_tables2.export.views import ExportMixin
  16. from django_tables2.export import TableExport
  17. from api.models import History
  18. # }}} imports #
  19. def display_artist_graph(request, user_secret):
  20. """Renders the artist data graph display page
  21. :param request: the HTTP request
  22. :param user_secret: the user secret used for identification
  23. :return: render the artist data graph display page
  24. """
  25. return render(request, "graphs/artist_graph.html",
  26. get_secret_context(user_secret))
  27. def display_genre_graph(request, user_secret):
  28. return render(request, "graphs/genre_graph.html",
  29. get_secret_context(user_secret))
  30. def display_features_graphs(request, user_secret):
  31. """Renders the audio features page
  32. :param request: the HTTP request
  33. :param user_secret: user secret used for identification
  34. :return: renders the audio features page
  35. """
  36. return render(request, "graphs/features_graphs.html",
  37. get_secret_context(user_secret))
  38. # HistoryList {{{ #
  39. class HistoryList(ExportMixin, SingleTableView):
  40. """Create table with list of song history."""
  41. model = History
  42. table_class = HistoryTable
  43. context_table_name = 'user_history_table'
  44. template_name = 'graphs/user_history.html'
  45. # overridden methods {{{ #
  46. def get_table_kwargs(self):
  47. return { 'exclude': ('id', 'user', 'track', 'track_id', 'iso_timestamp', ) }
  48. def get_table_data(self):
  49. return History.objects.filter(user__exact=self.request.session['user_id']).order_by('-timestamp')
  50. def get_context_data(self, **kwargs):
  51. context = super().get_context_data(**kwargs)
  52. context['user_id'] = self.request.session['user_id']
  53. context['total_history'] = self.get_table_data().count()
  54. return context
  55. def get_export_filename(self, export_format):
  56. user_id = self.request.session['user_id']
  57. # timestamp = strftime("%m%d%Y-%H%M")
  58. # return "{}.{}".format("-".join((user_id, timestamp)), export_format)
  59. return "{}.{}".format(user_id, export_format)
  60. def create_export(self, export_format):
  61. export_exclude = ('id', 'user', 'track', 'track_name', 'artists',
  62. 'timestamp', )
  63. exporter = TableExport(
  64. export_format=export_format,
  65. table=self.get_table(exclude=export_exclude),
  66. exclude_columns=self.exclude_columns,
  67. )
  68. return exporter.response(filename=self.get_export_filename(export_format))
  69. # }}} overridden methods #
  70. # }}} HistoryList #