From 0f92681a56b30f481756e3c73b71ee7a3c833330 Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Tue, 13 Jan 2015 02:16:51 +0100 Subject: [PATCH] Add more metadata to item CSV export Fix revisions creation for collection and item type --- telemeta/models/media.py | 46 ++++++++++++++++++++++++++++-------- telemeta/views/collection.py | 19 ++++++++------- telemeta/views/core.py | 1 + telemeta/views/item.py | 20 +++++++++++++--- 4 files changed, 65 insertions(+), 21 deletions(-) diff --git a/telemeta/models/media.py b/telemeta/models/media.py index 93ea45ad..eb147b91 100644 --- a/telemeta/models/media.py +++ b/telemeta/models/media.py @@ -353,20 +353,13 @@ class MediaCollection(MediaResource): else: return '' - def last_revision(self): - revisions = Revision.objects.filter(element_type=self.element_type, element_id = self.id) - if revisions: - return revisions[0] - else: - return Revision() - def to_dict_with_more(self): metadata = self.to_dict() metadata['url'] = get_full_url(reverse('telemeta-collection-detail', kwargs={'public_id':self.pk})) metadata['doc_status'] = self.document_status() metadata['countries'] = ';'.join([location.name for location in self.main_countries()]) metadata['ethnic_groups'] = ';'.join([group.value for group in self.ethnic_groups()]) - metadata['last_modification_date'] = unicode(self.last_revision().time) + metadata['last_modification_date'] = unicode(self.get_revision().time) metadata['computed_duration'] = unicode(self.computed_duration()) metadata['computed_size'] = unicode(self.computed_size()) metadata['number_of_items'] = unicode(self.items.all().count()) @@ -469,7 +462,6 @@ class MediaItem(MediaResource): def keywords(self): return ContextKeyword.objects.filter(item_relations__item = self) - keywords.verbose_name = _('keywords') @property @@ -570,9 +562,43 @@ class MediaItem(MediaResource): def to_dict_with_more(self): metadata = self.to_dict() - metadata['url'] = reverse_lazy('telemeta-item-detail', kwargs={'public_id':self.pk}) + metadata['url'] = get_full_url(reverse('telemeta-item-detail', kwargs={'public_id':self.pk})) + metadata['last_modification_date'] = unicode(self.get_revision().time) + # metadata['computed_duration'] = unicode(self.computed_duration()) + metadata['computed_size'] = unicode(self.size()) + + keywords = [] + for keyword in self.keywords(): + keywords.append(keyword.name) + metadata['keywords'] = ';'.join(keywords) + + i = 0 + for media in self.related.all(): + metadata['related_media_title' + '_' + str(i)] = media.title + if media.url: + metadata['related_media_url' + '_' + str(i)] = media.url + elif media.url: + metadata['related_media_url' + '_' + str(i)] = get_full_url(reverse('telemeta-collection-related', + kwargs={'public_id': self.public_id, 'media_id': media.id})) + i += 1 + + i = 0 + for performance in self.performances.all(): + metadata['instrument_name' + '_' + str(i)] = performance.instrument.name + metadata['vernacular_name' + '_' + str(i)] = performance.alias.name + metadata['musicians' + '_' + str(i)] = performance.musicians + i += 1 + + i = 0 + for indentifier in self.identifiers.all(): + metadata['identifier' + '_' + str(i)] = identifier.identifier + metadata['identifier_type' + '_' + str(i)] = identifier.type + metadata['identifier_date_last' + '_' + str(i)] = unicode(identifier.date_last) + metadata['identifier_notes' + '_' + str(i)] = identifier.notes + i += 1 return metadata + class MediaItemRelated(MediaRelated): "Item related media" diff --git a/telemeta/views/collection.py b/telemeta/views/collection.py index 3637efd4..1f3ea11b 100644 --- a/telemeta/views/collection.py +++ b/telemeta/views/collection.py @@ -311,13 +311,13 @@ class CollectionEditView(CollectionViewMixin, UpdateWithInlinesView): template_name = 'telemeta/collection_edit.html' inlines = [CollectionRelatedInline, CollectionIdentifierInline] - def form_valid(self, form): - messages.info(self.request, _("You have successfully updated your collection.")) - return super(CollectionEditView, self).form_valid(form) + def forms_valid(self, form, inlines): + messages.info(self.request, ugettext_lazy("You have successfully updated your collection.")) + obj = form.save() + obj.set_revision(self.request.user) + return super(CollectionEditView, self).forms_valid(form, inlines) def get_success_url(self): - #FIXME should be in form_valid but doesn't work with extra_views - self.get_object().set_revision(self.request.user) return reverse_lazy('telemeta-collection-detail', kwargs={'public_id':self.kwargs['public_id']}) def get_context_data(self, **kwargs): @@ -336,6 +336,12 @@ class CollectionAddView(CollectionViewMixin, CreateWithInlinesView): template_name = 'telemeta/collection_add.html' inlines = [CollectionRelatedInline, CollectionIdentifierInline] + def forms_valid(self, form, inlines): + messages.info(self.request, ugettext_lazy("You have successfully added your collection.")) + obj = form.save() + obj.set_revision(self.request.user) + return super(CollectionAddView, self).forms_valid(form, inlines) + def get_success_url(self): return reverse_lazy('telemeta-collection-detail', kwargs={'public_id':self.object.code}) @@ -351,9 +357,6 @@ class CollectionCopyView(CollectionAddView): def get_initial(self): return model_to_dict(self.get_object()) - def get_success_url(self): - return reverse_lazy('telemeta-collection-detail', kwargs={'public_id':self.object.code}) - def get_context_data(self, **kwargs): context = super(CollectionCopyView, self).get_context_data(**kwargs) collection = self.get_object() diff --git a/telemeta/views/core.py b/telemeta/views/core.py index a9684f54..335191f6 100644 --- a/telemeta/views/core.py +++ b/telemeta/views/core.py @@ -72,6 +72,7 @@ from django.core.urlresolvers import reverse, reverse_lazy from django.contrib.contenttypes.models import ContentType from django.views.decorators.http import condition from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ugettext_lazy from django.forms.models import model_to_dict from django.views.generic.edit import DeletionMixin, BaseDeleteView from django.contrib.sites.models import Site diff --git a/telemeta/views/item.py b/telemeta/views/item.py index 6088cbea..b9b1a961 100644 --- a/telemeta/views/item.py +++ b/telemeta/views/item.py @@ -745,11 +745,15 @@ class ItemEditView(ItemViewMixin, UpdateWithInlinesView): form_class = MediaItemForm template_name = 'telemeta/mediaitem_edit.html' - def form_valid(self, form): - messages.info(self.request, _("You have successfully updated your item.")) - return super(ItemEditView, self).form_valid(form) + def forms_valid(self, form, inlines): + messages.info(self.request, ugettext_lazy("You have successfully updated your item.")) + obj = form.save() + obj.set_revision(self.request.user) + return super(ItemEditView, self).forms_valid(form, inlines) def get_success_url(self): + #FIXME should be in form_valid but doesn't work with extra_views + self.get_object().set_revision(self.request.user) return reverse_lazy('telemeta-item-detail', kwargs={'public_id':self.object.code}) def get_context_data(self, **kwargs): @@ -789,7 +793,15 @@ class ItemAddView(ItemViewMixin, CreateWithInlinesView): item.code = auto_code(collection) return model_to_dict(item) + def forms_valid(self, form, inlines): + messages.info(self.request, ugettext_lazy("You have successfully added your item.")) + obj = form.save() + obj.set_revision(self.request.user) + return super(ItemAddView, self).forms_valid(form, inlines) + def get_success_url(self): + #FIXME should be in form_valid but doesn't work with extra_views + self.get_object().set_revision(self.request.user) return reverse_lazy('telemeta-item-detail', kwargs={'public_id':self.object.code}) @method_decorator(permission_required('telemeta.add_mediaitem')) @@ -806,6 +818,8 @@ class ItemCopyView(ItemAddView): return model_to_dict(self.get_object()) def get_success_url(self): + #FIXME should be in form_valid but doesn't work with extra_views + self.get_object().set_revision(self.request.user) return reverse_lazy('telemeta-item-detail', kwargs={'public_id':self.object.code}) def get_context_data(self, **kwargs): -- 2.39.5