From 755073bafb26e0fb48284a33fe49eab6b543a4c1 Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Tue, 9 Sep 2014 17:33:11 +0200 Subject: [PATCH] add more class based Resource views --- telemeta/urls.py | 12 ++-- telemeta/views/resource.py | 109 ++++++++++++++++++++++++++----------- 2 files changed, 81 insertions(+), 40 deletions(-) diff --git a/telemeta/urls.py b/telemeta/urls.py index 5519df3b..f1ae3add 100644 --- a/telemeta/urls.py +++ b/telemeta/urls.py @@ -159,14 +159,10 @@ urlpatterns = patterns('', # Generic resources url(r'^archives/(?P[A-Za-z0-9._-]+)/$', ResourceListView.as_view(), name="telemeta-resource-list"), url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/$', ResourceDetailView.as_view(), name="telemeta-resource-detail"), - url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/dc/$', resource_view.detail, - dict(template="telemeta/resource_detail_dc.html"), name="telemeta-resource-dublincore"), - url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/edit/$', resource_view.edit, - dict(template='telemeta/resource_edit.html'), name="telemeta-resource-edit"), - url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/copy/$', resource_view.copy, - dict(template='telemeta/resource_edit.html'), name="telemeta-resource-copy"), - url(r'^archives/(?P[A-Za-z0-9._-]+)_add$', resource_view.add, - dict(template='telemeta/resource_add.html'), name="telemeta-resource-add"), + url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/dc/$', ResourceDetailDCView.as_view(), name="telemeta-resource-dublincore"), + url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/edit/$', ResourceEditView.as_view(), name="telemeta-resource-edit"), + url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/copy/$', ResourceCopyView.as_view(), name="telemeta-resource-copy"), + url(r'^archives/(?P[A-Za-z0-9._-]+)_add$', ResourceAddView.as_view(), name="telemeta-resource-add"), url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/delete/$', resource_view.delete, name="telemeta-resource-delete"), url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/related/(?P[A-Za-z0-9._-]+)/view/$', resource_view.related_stream, name="telemeta-resource-related"), url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/related/(?P[A-Za-z0-9._-]+)/download/$', resource_view.related_download, name="telemeta-resource-related-download"), diff --git a/telemeta/views/resource.py b/telemeta/views/resource.py index 511d5dfb..4479f669 100644 --- a/telemeta/views/resource.py +++ b/telemeta/views/resource.py @@ -36,6 +36,8 @@ from telemeta.views.core import * +from django.utils.translation import ugettext_lazy as _ +from django.forms.models import model_to_dict class ResourceView(object): @@ -194,7 +196,7 @@ class ResourceView(object): return render(request, template, {'resource': resource, 'type': type, 'formset': formset,}) -class ResourceMixin(object): +class ResourceMixin(View): types = {'corpus': {'model': MediaCorpus, @@ -220,41 +222,20 @@ class ResourceMixin(object): self.parent = self.types[type]['parent'] self.type = type - -class ResourceListView(ResourceMixin, ListView): - - template_name = "telemeta/resource_list.html" - paginate_by = 20 - - def get_queryset(self): + def get_object(self): + # super(CorpusDetailView, self).get_object() self.type = self.kwargs['type'] self.setup(self.type) - return self.model.objects.all().order_by('code') + self.pk = self.model.objects.get(code=self.kwargs['public_id']).pk + return get_object_or_404(self.model, pk=self.pk) def get_context_data(self, **kwargs): - context = super(ResourceListView, self).get_context_data(**kwargs) + context = super(ResourceMixin, self).get_context_data(**kwargs) context['type'] = self.type return context -class FondsListView(ListView): - - model = MediaFonds - queryset = MediaFonds.objects.all().order_by('code') - template_name = "telemeta/resource_list.html" - paginate_by = 20 - - def get_context_data(self, **kwargs): - context = super(FondsListView, self).get_context_data(**kwargs) - context['type'] = 'fonds' - return context - - - - -class ResourceDetailView(ResourceMixin, DetailView): - - template_name = "telemeta/resource_detail.html" +class ResourceSingleMixin(ResourceMixin): def get_object(self): # super(CorpusDetailView, self).get_object() @@ -264,13 +245,12 @@ class ResourceDetailView(ResourceMixin, DetailView): return get_object_or_404(self.model, pk=self.pk) def get_context_data(self, **kwargs): - context = super(ResourceDetailView, self).get_context_data(**kwargs) - resource = self.object - related_media = self.related.objects.filter(resource=self.object) + context = super(ResourceMixin, self).get_context_data(**kwargs) + resource = self.get_object() + related_media = self.related.objects.filter(resource=resource) check_related_media(related_media) playlists = get_playlists(self.request) revisions = Revision.objects.filter(element_type=self.type, element_id=self.pk).order_by('-time') - context['resource'] = resource context['type'] = self.type context['related_media'] = related_media @@ -284,3 +264,68 @@ class ResourceDetailView(ResourceMixin, DetailView): else: context['parents'] = [] return context + + +class ResourceListView(ResourceMixin, ListView): + + template_name = "telemeta/resource_list.html" + paginate_by = 20 + + def get_queryset(self): + self.type = self.kwargs['type'] + self.setup(self.type) + return self.model.objects.all().order_by('code') + + +class ResourceDetailView(ResourceSingleMixin, DetailView): + + template_name = "telemeta/resource_detail.html" + + +class ResourceDetailDCView(ResourceDetailView): + + template_name = "telemeta/resource_detail_dc.html" + + +class ResourceEditView(ResourceSingleMixin, UpdateView): + + template_name = 'telemeta/resource_edit.html' + + def get_form_class(self): + self.type = self.kwargs['type'] + self.setup(self.type) + return self.form + + def form_valid(self, form): + messages.info(self.request, _("You have successfully updated your resource.")) + return super(ResourceEditView, self).form_valid(form) + + def get_success_url(self): + return reverse_lazy('telemeta-resource-detail', kwargs={'type':self.kwargs['type'], 'public_id':self.kwargs['public_id']}) + + +class ResourceAddView(ResourceMixin, CreateView): + + template_name = 'telemeta/resource_add.html' + + def get_queryset(self): + self.type = self.kwargs['type'] + self.setup(self.type) + return self + + def get_success_url(self): + return reverse_lazy('telemeta-resource-list', kwargs={'type':self.kwargs['type']}) + + +class ResourceCopyView(ResourceSingleMixin, ResourceAddView): + + template_name = 'telemeta/resource_edit.html' + + def get_initial(self): + resource = self.model.objects.get(code=self.kwargs['public_id']) + return model_to_dict(resource) + + def get_success_url(self): + return reverse_lazy('telemeta-resource-list', kwargs={'type':self.kwargs['type']}) + # return reverse_lazy('telemeta-resource-detail', kwargs={'type':self.kwargs['type'], 'public_id':self.kwargs['public_id']}) + -- 2.39.5