From f4e08ca8ad5169d1e2a19dbc7b15166dfbed4e52 Mon Sep 17 00:00:00 2001 From: Andrew Williams Date: Wed, 6 Jun 2012 20:59:29 +0100 Subject: [PATCH] Switch Add/Update to use CBV, combine templates into one. --- app/eve_api/forms.py | 7 +- .../templates/eve_api/eveaccount_add.html | 23 ---- .../templates/eve_api/eveaccount_form.html | 24 ++++ app/eve_api/templates/eve_api/update.html | 24 ---- app/eve_api/urls.py | 4 +- app/eve_api/views/base.py | 116 ++++++++---------- app/sso/templates/sso/profile.html | 4 +- 7 files changed, 85 insertions(+), 117 deletions(-) delete mode 100644 app/eve_api/templates/eve_api/eveaccount_add.html create mode 100644 app/eve_api/templates/eve_api/eveaccount_form.html delete mode 100644 app/eve_api/templates/eve_api/update.html diff --git a/app/eve_api/forms.py b/app/eve_api/forms.py index 744acbc..2cdd45a 100644 --- a/app/eve_api/forms.py +++ b/app/eve_api/forms.py @@ -6,7 +6,7 @@ from gargoyle import gargoyle from eve_api.models import EVEAccount, EVEPlayerCharacter, EVEPlayerCorporation -class EveAPIForm(forms.ModelForm): +class EVEAPIForm(forms.ModelForm): """ EVE API input form """ class Meta: @@ -15,12 +15,15 @@ class EveAPIForm(forms.ModelForm): widgets = {'user': forms.HiddenInput()} def __init__(self, *args, **kwargs): - super(EveAPIForm, self).__init__(*args, **kwargs) + super(EVEAPIForm, self).__init__(*args, **kwargs) instance = getattr(self, 'instance', None) if instance and instance.pk: # We're editing a existing instance, readonly the userid self.fields['api_user_id'].widget.attrs['readonly'] = True + else: + # New instance, hide description + del self.fields['description'] if gargoyle.is_active('eve-cak'): self.fields['api_user_id'].label = 'Key ID' diff --git a/app/eve_api/templates/eve_api/eveaccount_add.html b/app/eve_api/templates/eve_api/eveaccount_add.html deleted file mode 100644 index c145b80..0000000 --- a/app/eve_api/templates/eve_api/eveaccount_add.html +++ /dev/null @@ -1,23 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Add EVE API Key{% endblock %} - -{% block content %} - - -

Please fill in your API key details and a optional description. You can create a API key on the API support site

- -
- -
- {% include "formtools/formerror.html" %} - {% include "formtools/formfield.html" with field=form.api_user_id %} - {% include "formtools/formfield.html" with field=form.api_key class="xxlarge"%} - {% csrf_token %} - -
-
- -{% endblock %} diff --git a/app/eve_api/templates/eve_api/eveaccount_form.html b/app/eve_api/templates/eve_api/eveaccount_form.html new file mode 100644 index 0000000..abf7fa7 --- /dev/null +++ b/app/eve_api/templates/eve_api/eveaccount_form.html @@ -0,0 +1,24 @@ +{% extends "base.html" %} + +{% block title %}{% if object %}Update EVE API Key{% else %}Add EVE API Key{% endif %}{% endblock %} + +{% block content %} + + +

Please fill in your API key details and a optional description. You can create a API key on the API support site

+ +
+
+ {% include "formtools/formerror.html" %} + {% include "formtools/formfield.html" with field=form.api_user_id %} + {% include "formtools/formfield.html" with field=form.api_key class="xxlarge" %} + {% include "formtools/formfield.html" with field=form.description class="xxlarge" %} + {% include "formtools/formfield.html" with field=form.user %} + {% csrf_token %} + +
+
+ +{% endblock %} diff --git a/app/eve_api/templates/eve_api/update.html b/app/eve_api/templates/eve_api/update.html deleted file mode 100644 index 978a057..0000000 --- a/app/eve_api/templates/eve_api/update.html +++ /dev/null @@ -1,24 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Update EVE API Key{% endblock %} - -{% block content %} - - -

Please update your API key as provided on the EVE Online API page and a optional description.

- -
-
- {% include "formtools/formerror.html" %} - {% include "formtools/formfield.html" with field=form.user %} - {% include "formtools/formfield.html" with field=form.api_user_id %} - {% include "formtools/formfield.html" with field=form.api_key class="xxlarge" %} - {% include "formtools/formfield.html" with field=form.description class="xxlarge" %} - {% csrf_token %} - -
-
- -{% endblock %} diff --git a/app/eve_api/urls.py b/app/eve_api/urls.py index a1e7b02..207a8bc 100644 --- a/app/eve_api/urls.py +++ b/app/eve_api/urls.py @@ -5,8 +5,8 @@ from django.contrib.auth.decorators import login_required from eve_api import views urlpatterns = patterns('', - url(r'^eveapi/add/$', views.eveapi_add, name="eveapi-add"), - url(r'^eveapi/update/(?P\d+)/$', views.eveapi_update, name="eveapi-update"), + url(r'^eveapi/add/$', login_required(views.EVEAPICreateView.as_view()), name="eveapi-add"), + url(r'^eveapi/update/(?P\d+)/$', login_required(views.EVEAPIUpdateView.as_view()), name="eveapi-update"), url(r'^eveapi/delete/(?P\d+)/$', login_required(views.EVEAPIDeleteView.as_view()), name="eveapi-delete"), url(r'^eveapi/refresh/(?P\d+)/$', login_required(views.EVEAPIRefreshView.as_view()), name="eveapi-refresh"), url(r'^eveapi/log/(?P\d+)/$', login_required(views.EVEAPILogView.as_view()), name="eveapi-log"), diff --git a/app/eve_api/views/base.py b/app/eve_api/views/base.py index 533ed0d..7056ce3 100644 --- a/app/eve_api/views/base.py +++ b/app/eve_api/views/base.py @@ -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 diff --git a/app/sso/templates/sso/profile.html b/app/sso/templates/sso/profile.html index dbb77a0..40b40f5 100644 --- a/app/sso/templates/sso/profile.html +++ b/app/sso/templates/sso/profile.html @@ -99,7 +99,7 @@ {{ acc.get_api_status_display }} {{ acc.api_last_updated|naturaltimediff }} {% ifswitch api-disableprocessing %}{% else %}Refresh,  - Update Key, {% endifswitch %} + Update Key, {% endifswitch %} Logs{% ifswitch eve-keydelete %},  Delete{% endifswitch %} @@ -112,7 +112,7 @@

{% ifswitch api-disableprocessing %} {% else %} - Add a Eve API key + Add a Eve API key Create API Key Force Access Update {% endifswitch %}