From 604124439d9eb049ac3530c306dbf6a467c30dd0 Mon Sep 17 00:00:00 2001 From: Andrew Williams Date: Wed, 6 Jun 2012 18:28:28 +0100 Subject: [PATCH] Convert character views to CBV --- app/eve_api/urls.py | 4 +-- app/eve_api/views/base.py | 52 ++++++++++++++++++++++----------------- app/templates/base.html | 2 +- 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/app/eve_api/urls.py b/app/eve_api/urls.py index b414d5a..7256a63 100644 --- a/app/eve_api/urls.py +++ b/app/eve_api/urls.py @@ -12,8 +12,8 @@ urlpatterns = patterns('', url(r'^eveapi/log/(?P\d+)/$', login_required(views.EVEAPILogView.as_view()), name="eveapi-log"), url(r'^eveapi/access/(?P\d+)/$', login_required(views.EVEAPIAccessView.as_view()), name="eveapi-accessview"), - url(r'^character/list/$', views.eveapi_character, name="eveapi-characters-list"), - url(r'^character/(?P\d+)/$', views.eveapi_character, name="eveapi-character"), + url(r'^character/list/$', login_required(views.EVEAPICharacterListView.as_view()), name="eveapi-characters-list"), + url(r'^character/(?P\d+)/$', login_required(views.EVEAPICharacterDetailView.as_view()), name="eveapi-character"), url(r'^corporation/(?P\d+)/$', login_required(views.EVEAPICorporationView.as_view()), name="eveapi-corporation"), url(r'^corporation/(?P\d+)/export/$', views.eveapi_corporation_members_csv, name="eveapi-corporation-members-csv"), diff --git a/app/eve_api/views/base.py b/app/eve_api/views/base.py index 9bec49f..18d8ca8 100644 --- a/app/eve_api/views/base.py +++ b/app/eve_api/views/base.py @@ -5,7 +5,7 @@ from django.core.urlresolvers import reverse from django.http import HttpResponse, Http404, HttpResponseForbidden, HttpResponseRedirect from django.shortcuts import render_to_response, get_object_or_404, redirect from django.template import RequestContext -from django.views.generic import DetailView, ListView, View +from django.views.generic import TemplateView, DetailView, ListView, View from django.views.generic.detail import SingleObjectMixin from django.contrib import messages from django.contrib.auth.decorators import login_required @@ -159,22 +159,25 @@ class EVEAPILogView(ListView): return self.model.objects.filter(userid=self.userid).order_by('-time_access')[:limit] -@login_required -def eveapi_character(request, charid=None, template='eve_api/character.html', list_template='eve_api/character_list.html'): - """ Provide a list of characters, or a indivdual character sheet """ +class EVEAPICharacterDetailView(DetailView): - if charid: - character = get_object_or_404(EVEPlayerCharacter.objects.select_related('corporation', 'corporation__aliance'), id=charid) + model = EVEPlayerCharacter + template_name = 'eve_api/character.html' - #Check if the user has permission to see the character profile - if not request.user.has_perm('eve_api.can_view_all_characters') and (not character.account or not request.user == character.account.user): - raise Http404 + def get(self, request, *args, **kwargs): + self.object = self.get_object() + if not request.user.has_perm('eve_api.can_view_all_characters') and (not self.object.account or not request.user == self.object.account.user): + return HttpResponseForbidden() + context = self.get_context_data(object=self.object) + return self.render_to_response(context) + def get_context_data(self, **kwargs): + ctx = super(EVEAPICharacterDetailView, self).get_context_data(**kwargs) try: - current_training = character.eveplayercharacterskill_set.get(in_training__gt=0) + current_training = self.object.eveplayercharacterskill_set.get(in_training__gt=0) except: current_training = None - skills = character.eveplayercharacterskill_set.all().order_by('skill__group__name', 'skill__name') + skills = self.object.eveplayercharacterskill_set.all().order_by('skill__group__name', 'skill__name') skillTree = [] currentSkillGroup = 0 @@ -182,24 +185,29 @@ def eveapi_character(request, charid=None, template='eve_api/character.html', li if not skill.skill.group.id == currentSkillGroup: currentSkillGroup = skill.skill.group.id skillTree.append([0, skill.skill.group.name, [], skill.skill.group.id]) - + skillTree[-1][0] += skill.skillpoints skillTree[-1][2].append(skill) - context = { - 'character': character, + ctx.update({ + 'character': self.object, 'current_training': current_training, 'skills': skills, 'skillTree': skillTree, - 'employmenthistory': character.employmenthistory.all().order_by('-record_id'), - } - return render_to_response(template, context, context_instance=RequestContext(request)) + 'employmenthistory': self.object.employmenthistory.all().order_by('-record_id'), + }) + return ctx - context = { - 'accounts': EVEAccount.objects.select_related('characters__name').filter(user=request.user).exclude(api_keytype=API_KEYTYPE_CORPORATION), - 'characters': EVEPlayerCharacter.objects.filter(eveaccount__user=request.user).distinct().order_by('name'), - } - return render_to_response(list_template, context, context_instance=RequestContext(request)) +class EVEAPICharacterListView(TemplateView): + + template_name = 'eve_api/character_list.html' + + def get_context_data(self, **kwargs): + ctx = { + 'accounts': EVEAccount.objects.select_related('characters__name').filter(user=self.request.user).exclude(api_keytype=API_KEYTYPE_CORPORATION), + 'characters': EVEPlayerCharacter.objects.filter(eveaccount__user=self.request.user).distinct().order_by('name'), + } + return ctx class EVEAPICorporationView(DetailPaginationMixin, DetailView): diff --git a/app/templates/base.html b/app/templates/base.html index d63bb26..bd3851f 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -53,7 +53,7 @@
  • Your Profile
  • {% if "groups"|installed %}
  • Your Groups
  • {% endif %} -
  • Your Characters
  • +
  • Your Characters
  • {% if "api"|installed %}
  • 3rd Party App Access
  • {% endif %} {% if "hr"|installed %}
  • HR