Switch Add/Update to use CBV, combine templates into one.

This commit is contained in:
2012-06-06 20:59:29 +01:00
parent a39fe76e47
commit f4e08ca8ad
7 changed files with 85 additions and 117 deletions

View File

@@ -2,10 +2,10 @@ import csv
from django.core import serializers
from django.core.urlresolvers import reverse, reverse_lazy
from django.http import HttpResponse, Http404, HttpResponseForbidden, HttpResponseRedirect
from django.shortcuts import render_to_response, get_object_or_404, redirect
from django.http import HttpResponse, HttpResponseForbidden, HttpResponseRedirect
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
from django.views.generic import TemplateView, DetailView, ListView, DeleteView, View
from django.views.generic import TemplateView, CreateView, UpdateView, DetailView, ListView, DeleteView, View
from django.views.generic.detail import SingleObjectMixin
from django.contrib import messages
from django.contrib.auth.decorators import login_required
@@ -16,23 +16,55 @@ from gargoyle import gargoyle
from eve_proxy.models import ApiAccessLog, CachedDocument
from eve_proxy.exceptions import DocumentRetrievalError
from eve_api.app_defines import *
from eve_api.forms import EveAPIForm
from eve_api.forms import EVEAPIForm
from eve_api.models import EVEAccount, EVEPlayerCharacter, EVEPlayerCorporation, EVEPlayerAlliance
from eve_api.tasks import import_apikey_result
from eve_api.utils import basic_xml_parse_doc
from eve_api.views.mixins import DetailPaginationMixin
@login_required
def eveapi_add(request, post_save_redirect='/', template='eve_api/add.html'):
""" Add a EVE API key to a user's account """
class EVEAPICreateView(CreateView):
if request.method == 'POST':
form = EveAPIForm(request.POST)
if form.is_valid():
task = import_apikey_result.delay(api_key=form.cleaned_data['api_key'], api_userid=form.cleaned_data['api_user_id'], user=request.user.id)
model = EVEAccount
form_class = EVEAPIForm
success_url = reverse_lazy('sso-profile')
def form_valid(self, form):
task = import_apikey_result.delay(api_key=form.cleaned_data['api_key'], api_userid=form.cleaned_data['api_user_id'], user=request.user.id)
try:
out = task.wait(10)
except celery.exceptions.TimeoutError:
msg = "The addition of your API key is still processing, please check back in a minute or so."
except DocumentRetrievalError:
msg = "An issue with the EVE API was encountered while adding your API, please try again later."
except:
msg = "An unknown error was encountered while trying to add your API key, please try again later."
else:
if out:
msg = "Key %d successfully added." % form.cleaned_data['api_user_id']
else:
msg = "An issue was encountered while trying to import key %s, Please check that you are using the correct information and try again." % form.cleaned_data['api_user_id']
messages.success(request, msg, fail_silently=True)
return HttpResponseRedirect(self.get_success_url())
def get_initial(self):
return {'user': self.request.user.pk}
class EVEAPIUpdateView(UpdateView):
model = EVEAccount
form_class = EVEAPIForm
success_url = reverse_lazy('sso-profile')
def get_initial(self):
return {'user': self.request.user.pk}
def form_valid(self, form):
if form.has_changed() and 'api_key' in form.changed_data:
task = import_apikey_result.delay(api_key=acc.api_key, api_userid=acc.api_user_id, user=request.user.id)
try:
out = task.wait(10)
task.wait(30)
except celery.exceptions.TimeoutError:
msg = "The addition of your API key is still processing, please check back in a minute or so."
except DocumentRetrievalError:
@@ -40,59 +72,14 @@ def eveapi_add(request, post_save_redirect='/', template='eve_api/add.html'):
except:
msg = "An unknown error was encountered while trying to add your API key, please try again later."
else:
if out:
msg = "Key %d successfully added." % form.cleaned_data['api_user_id']
else:
msg = "An issue was encountered while trying to import key %s, Please check that you are using the correct information and try again." % form.cleaned_data['api_user_id']
messages.success(request, msg, fail_silently=True)
return HttpResponseRedirect(post_save_redirect)
else:
form = EveAPIForm(initial={'user': request.user.id }) # An unbound form
context = {
'form': form,
}
return render_to_response(template, context, context_instance=RequestContext(request))
@login_required
def eveapi_update(request, userid, post_save_redirect='/', template='eve_api/update.html'):
""" Update a EVE API Key """
acc = get_object_or_404(EVEAccount, pk=userid)
if not acc.user == request.user and not request.user.is_staff:
raise Http404
if request.method == 'POST':
form = EveAPIForm(request.POST, instance=acc)
if form.is_valid():
if form.has_changed() and ('api_key' in form.changed_data):
task = import_apikey_result.delay(api_key=acc.api_key, api_userid=acc.api_user_id, user=request.user.id)
try:
task.wait(30)
except celery.exceptions.TimeoutError:
msg = "The addition of your API key is still processing, please check back in a minute or so."
except DocumentRetrievalError:
msg = "An issue with the EVE API was encountered while adding your API, please try again later."
except:
msg = "An unknown error was encountered while trying to add your API key, please try again later."
else:
msg = "EVE API key %d successfully updated." % acc.api_user_id
else:
if form.has_changed():
form.save()
msg = "EVE API key %d successfully updated." % acc.api_user_id
else:
if form.has_changed():
form.save()
msg = "EVE API key %d successfully updated." % acc.api_user_id
messages.success(request, msg, fail_silently=True)
return redirect(post_save_redirect)
else:
form = EveAPIForm(instance=acc) # An unbound form
context = {
'acc': acc,
'form': form,
}
return render_to_response(template, context, context_instance=RequestContext(request))
messages.success(request, msg, fail_silently=True)
return HttpResponseRedirect(self.get_success_url())
class EVEAPIDeleteView(DeleteView):
@@ -205,6 +192,7 @@ class EVEAPICharacterDetailView(DetailView):
})
return ctx
class EVEAPICharacterListView(TemplateView):
template_name = 'eve_api/character_list.html'
@@ -240,7 +228,7 @@ def eveapi_corporation_members_csv(request, corporationid):
corporation = get_object_or_404(EVEPlayerCorporation, id=corporationid)
if not corporation.eveplayercharacter_set.filter(eveaccount__user=request.user, roles__name="roleDirector").count() and not request.user.is_superuser:
raise Http404
return HttpResponseForbidden()
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment; filename=%s-members_export.csv' % corporation.id