kumify/dreams/views.py
Kumi ae97cfa30e
refactor: clean up unused imports and improve code quality
Removed unnecessary imports across various modules to streamline the application's dependencies and improve loading times. Specific changes include the removal of unused Django model and admin imports in several apps, simplifying view imports by eliminating unutilized components, and cleaning up static CSS for better maintainability. Corrections were made to conditional expressions for clearer logic. The removal of the django.test.TestCase import in test files reflects a shift towards a different testing strategy or the current lack of tests. Exception handling has been made more explicit to avoid catching unintended exceptions, paving the way for more robust error handling and logging in the future. Additionally, a new CSS file was added for frontend enhancements, indicating ongoing UI/UX improvements.

These changes collectively aim to make the codebase more maintainable and efficient, reducing clutter and focusing on used functionalities. It's a step towards optimizing the application's performance and ensuring a clean, manageable codebase for future development.
2024-06-02 20:27:02 +02:00

263 lines
9.8 KiB
Python

from django.views.generic import ListView, UpdateView, DetailView, CreateView, DeleteView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import get_object_or_404
from django.urls import reverse_lazy
from django.http import HttpResponseRedirect
from .models import Dream, DreamTheme, DreamMedia, Theme
from .forms import DreamForm
from common.helpers import get_upload_path
from msgio.models import NotificationDailySchedule, Notification
class DreamListView(LoginRequiredMixin, ListView):
template_name = "dreams/dream_list.html"
model = Dream
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Dream List"
context["subtitle"] = "A list of the dreams you have entered so far."
context["buttons"] = [(reverse_lazy("dreams:dream_create"), "New Dream", "plus")]
return context
def get_queryset(self):
return Dream.objects.filter(user=self.request.user).order_by('timestamp')
class DreamViewView(LoginRequiredMixin, DetailView):
template_name = "dreams/dream_view.html"
model = Dream
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "View Dream"
context["subtitle"] = "View the details of your dream."
context["buttons"] = [(reverse_lazy("dreams:dream_edit", kwargs={"id": self.kwargs["id"]}), "Edit Dream", "pen")]
return context
def get_object(self):
return get_object_or_404(Dream, user=self.request.user, id=self.kwargs["id"])
class DreamCreateView(LoginRequiredMixin, CreateView):
template_name = "dreams/dream_edit.html"
form_class = DreamForm
model = Dream
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Create Dream"
context["subtitle"] = "What did you dream?"
context["scripts"] = ["frontend/js/dropdown-to-buttons.js"]
return context
def form_valid(self, form):
form.instance.user = self.request.user
ret = super().form_valid(form)
for theme in form.cleaned_data["themes"]:
if theme.user == self.request.user:
DreamTheme.objects.create(theme=theme, dream=form.instance)
for attachment in form.cleaned_data["uploads"]:
dba = DreamMedia(dream=form.instance)
dba.media.save(get_upload_path(form.instance, attachment.name), attachment)
dba.save()
return ret
def get_success_url(self):
return reverse_lazy("dreams:dream_view", kwargs={"id": self.object.id})
class DreamEditView(LoginRequiredMixin, UpdateView):
template_name = "dreams/dream_edit.html"
form_class = DreamForm
model = Dream
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Update Dream"
context["subtitle"] = "Change details of a dream you entered before."
context["scripts"] = ["frontend/js/dropdown-to-buttons.js"]
context["buttons"] = [(reverse_lazy("dreams:dream_delete", kwargs={"id": self.kwargs["id"]}), "Delete Dream", "trash-alt")]
return context
def get_object(self):
return get_object_or_404(Dream, user=self.request.user, id=self.kwargs["id"])
def form_valid(self, form):
for theme in form.cleaned_data["themes"]:
if theme.user == self.request.user:
if theme not in form.instance.theme_set:
DreamTheme.objects.create(theme=theme, dream=form.instance)
for dreamtheme in form.instance.dreamtheme_set.all():
if dreamtheme.theme not in form.cleaned_data["themes"]:
dreamtheme.delete()
for attachment in form.cleaned_data["uploads"]:
dba = DreamMedia(dream=form.instance)
dba.media.save(get_upload_path(form.instance, attachment.name), attachment)
dba.save()
return super().form_valid(form)
def get_success_url(self):
return reverse_lazy("dreams:dream_view", kwargs={"id": self.object.id})
class DreamDeleteView(LoginRequiredMixin, DeleteView):
template_name = "dreams/dream_delete.html"
model = Dream
def get_object(self):
return get_object_or_404(Dream, user=self.request.user, id=self.kwargs["id"])
def get_success_url(self):
return reverse_lazy("dreams:dream_list")
class ThemeListView(LoginRequiredMixin, ListView):
template_name = "dreams/theme_list.html"
model = Theme
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Themes"
context["subtitle"] = "The themes you have defined for your dreams."
context["buttons"] = [(reverse_lazy("dreams:theme_create"), "Create Theme", "pen")]
return context
def get_queryset(self):
return Theme.objects.filter(user=self.request.user)
class ThemeEditView(LoginRequiredMixin, UpdateView):
template_name = "dreams/theme_edit.html"
model = Theme
fields = ["name", "icon", "color"]
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Edit Theme"
context["subtitle"] = "Make changes to the theme."
context["scripts"] = ["colorfield/jscolor/jscolor.js", "colorfield/colorfield.js", "frontend/js/fontawesome-iconpicker.min.js", "frontend/js/iconpicker-loader.js"]
context["styles"] = ["frontend/css/fontawesome-iconpicker.min.css"]
context["buttons"] = [(reverse_lazy("dreams:theme_delete", kwargs={"id": self.kwargs["id"]}), "Delete Theme", "trash-alt")]
return context
def get_object(self):
return get_object_or_404(Theme, user=self.request.user, id=self.kwargs["id"])
def get_success_url(self):
return reverse_lazy("dreams:theme_list")
class ThemeCreateView(LoginRequiredMixin, CreateView):
template_name = "dreams/theme_edit.html"
model = Theme
fields = ["name", "icon", "color"]
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Create Theme"
context["subtitle"] = "Add a new theme for your dreams."
context["scripts"] = ["colorfield/jscolor/jscolor.js", "colorfield/colorfield.js", "frontend/js/fontawesome-iconpicker.min.js", "frontend/js/iconpicker-loader.js"]
context["styles"] = ["frontend/css/fontawesome-iconpicker.min.css"]
return context
def form_valid(self, form):
obj = form.save(commit=False)
obj.user = self.request.user
return super().form_valid(form)
def get_success_url(self):
return reverse_lazy("dreams:theme_list")
class ThemeDeleteView(LoginRequiredMixin, DeleteView):
template_name = "dreams/theme_delete.html"
model = Theme
def get_object(self):
return get_object_or_404(Theme, user=self.request.user, id=self.kwargs["id"])
def get_success_url(self):
return reverse_lazy("dreams:theme_list")
class NotificationListView(LoginRequiredMixin, ListView):
template_name = "dreams/notification_list.html"
model = NotificationDailySchedule
fields = ["time"]
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Notifications"
context["subtitle"] = "The daily reminders you have set up."
context["buttons"] = [(reverse_lazy("dreams:notification_create"), "New Notification", "plus")]
return context
def get_queryset(self):
return NotificationDailySchedule.objects.filter(notification__recipient=self.request.user, notification__app="dreams")
class NotificationCreateView(LoginRequiredMixin, CreateView):
template_name = "dreams/notification_edit.html"
model = NotificationDailySchedule
fields = ["time"]
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Create Notification"
context["subtitle"] = "Add a new daily notification."
return context
def form_valid(self, form):
notification = Notification.objects.create(content="What did you dream tonight? Go to %KUMIFYURL% to document your dreams!", recipient=self.request.user, app="dreams")
obj = form.save(commit=False)
obj.notification = notification
return super().form_valid(form)
def get_success_url(self):
return reverse_lazy("dreams:notification_list")
class NotificationEditView(LoginRequiredMixin, UpdateView):
template_name = "dreams/notification_edit.html"
model = NotificationDailySchedule
fields = ["time"]
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Edit Notification"
context["subtitle"] = "Change the time of a daily notification."
context["buttons"] = [(reverse_lazy("dreams:notification_delete", args=[self.kwargs["id"]]), "Delete Notification")]
return context
def get_success_url(self):
return reverse_lazy("dreams:notification_list")
def get_object(self):
return get_object_or_404(NotificationDailySchedule, notification__recipient=self.request.user, id=self.kwargs["id"])
class NotificationDeleteView(LoginRequiredMixin, DeleteView):
template_name = "dreams/notification_delete.html"
model = NotificationDailySchedule
def get_object(self):
return get_object_or_404(NotificationDailySchedule, notification__recipient=self.request.user, id=self.kwargs["id"])
def delete(self, request, *args, **kwargs):
self.object = self.get_object()
success_url = self.get_success_url()
self.object.notification.delete()
return HttpResponseRedirect(success_url)
def get_success_url(self):
return reverse_lazy("dreams:notification_list")