]> git.parisson.com Git - telemeta.git/commitdiff
add more class based Resource views
authorGuillaume Pellerin <yomguy@parisson.com>
Tue, 9 Sep 2014 15:33:11 +0000 (17:33 +0200)
committerGuillaume Pellerin <yomguy@parisson.com>
Tue, 9 Sep 2014 15:33:11 +0000 (17:33 +0200)
telemeta/urls.py
telemeta/views/resource.py

index 5519df3bbe60852b8e6c9dd2e46ca89dec0621c3..f1ae3add7bf9521deec17a684ef0f324a6af51d5 100644 (file)
@@ -159,14 +159,10 @@ urlpatterns = patterns('',
     # Generic resources
     url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/$', ResourceListView.as_view(), name="telemeta-resource-list"),
     url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/$', ResourceDetailView.as_view(), name="telemeta-resource-detail"),
-    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/dc/$', resource_view.detail,
-        dict(template="telemeta/resource_detail_dc.html"), name="telemeta-resource-dublincore"),
-    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/edit/$', resource_view.edit,
-        dict(template='telemeta/resource_edit.html'), name="telemeta-resource-edit"),
-    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/copy/$', resource_view.copy,
-        dict(template='telemeta/resource_edit.html'), name="telemeta-resource-copy"),
-    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)_add$', resource_view.add,
-        dict(template='telemeta/resource_add.html'), name="telemeta-resource-add"),
+    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/dc/$', ResourceDetailDCView.as_view(), name="telemeta-resource-dublincore"),
+    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/edit/$', ResourceEditView.as_view(), name="telemeta-resource-edit"),
+    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/copy/$', ResourceCopyView.as_view(), name="telemeta-resource-copy"),
+    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)_add$', ResourceAddView.as_view(), name="telemeta-resource-add"),
     url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/delete/$', resource_view.delete, name="telemeta-resource-delete"),
     url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)/view/$', resource_view.related_stream, name="telemeta-resource-related"),
     url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)/download/$', resource_view.related_download, name="telemeta-resource-related-download"),
index 511d5dfb26b0fab3a8b8351985aaab2a4852c80f..4479f669ab11b557c9e2e12ad7c688cdbdd15a64 100644 (file)
@@ -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']})
+