# HG changeset patch # User Harris Baptiste # Date 1471510158 -7200 # Node ID e13fed7f0837208731b2f9b1472fe2284966120d # Parent e5267573edd82d4e404adc683a912d1c32312007# Parent c8a1216fd28f4fbe151ae247e312caba70fd1cce resolving model.py conflicts diff -r e5267573edd8 -r e13fed7f0837 .hgignore --- a/.hgignore Wed Aug 17 18:36:44 2016 +0200 +++ b/.hgignore Thu Aug 18 10:49:18 2016 +0200 @@ -7,7 +7,7 @@ ^src/iconolab/static/iconolab/js/node_modules/ ^src/iconolab/static/iconolab/js/iconolab-bundle/node_modules/ ^src/iconolab/static/iconolab/js/iconolab-bundle/dist/ - +\.orig$ ^web/* ^\.pydevproject$ diff -r e5267573edd8 -r e13fed7f0837 src/iconolab/migrations/0009_auto_20160812_1417.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/iconolab/migrations/0009_auto_20160812_1417.py Thu Aug 18 10:49:18 2016 +0200 @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-08-12 14:17 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('iconolab', '0008_auto_20160811_1050'), + ] + + operations = [ + migrations.AddField( + model_name='collection', + name='height', + field=models.IntegerField(blank=True, null=True), + ), + migrations.AddField( + model_name='collection', + name='image', + field=models.ImageField(blank=True, height_field='height', null=True, upload_to='uploads/', width_field='width'), + ), + migrations.AddField( + model_name='collection', + name='width', + field=models.IntegerField(blank=True, null=True), + ), + ] diff -r e5267573edd8 -r e13fed7f0837 src/iconolab/models.py --- a/src/iconolab/models.py Wed Aug 17 18:36:44 2016 +0200 +++ b/src/iconolab/models.py Thu Aug 18 10:49:18 2016 +0200 @@ -31,6 +31,9 @@ name = models.SlugField(max_length=50, unique=True) verbose_name = models.CharField(max_length=50, null=True, blank=True) description = models.CharField(max_length=255) + image = models.ImageField(upload_to='uploads/', height_field='height', width_field='width', null=True, blank=True) + height = models.IntegerField(null=True, blank=True) + width = models.IntegerField(null=True, blank=True) def __str__(self): return self.name @@ -144,7 +147,7 @@ tag_list = [] for annotation in self.annotations.all(): revision_tags = annotation.current_revision.tags.all() - tag_list = [tag.label for tag in revision_tags] + tag_list = [tag.label for tag in revision_tags] return tag_list class AnnotationManager(models.Manager): @@ -171,13 +174,13 @@ initial_revision.save() initial_revision.set_tags(tags_json) - new_annotation.current_revision = initial_revision - new_annotation.save() - # Create stats object new_annotation_stats = AnnotationStats(annotation=new_annotation) new_annotation_stats.save() new_annotation_stats.set_tags_stats() + + # Link everything to parent + new_annotation.current_revision = initial_revision new_annotation.stats = new_annotation_stats new_annotation.save() return new_annotation @@ -274,7 +277,6 @@ if new_revision.state == AnnotationRevision.ACCEPTED: self.current_revision = new_revision self.save() - print(new_revision) iconolab_signals.revision_created.send(sender=AnnotationRevision, instance=new_revision) return new_revision diff -r e5267573edd8 -r e13fed7f0837 src/iconolab/signals/handlers.py --- a/src/iconolab/signals/handlers.py Wed Aug 17 18:36:44 2016 +0200 +++ b/src/iconolab/signals/handlers.py Thu Aug 18 10:49:18 2016 +0200 @@ -12,7 +12,6 @@ def increment_stats_on_new_revision(sender, instance, **kwargs): from iconolab.models import AnnotationRevision if sender == AnnotationRevision: - print(instance) # Annotation stats annotation = instance.annotation annotation.stats.submitted_revisions_count += 1 diff -r e5267573edd8 -r e13fed7f0837 src/iconolab/templates/errors/404error.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/iconolab/templates/errors/404error.html Thu Aug 18 10:49:18 2016 +0200 @@ -0,0 +1,7 @@ +{% extends 'iconolab_base.html' %} + +{% block content %} + +

Erreur 404: le contenu que vous essayez d'atteindre n'a pas été trouvé

+ +{% endblock %} \ No newline at end of file diff -r e5267573edd8 -r e13fed7f0837 src/iconolab/templates/iconolab/collection_home.html --- a/src/iconolab/templates/iconolab/collection_home.html Wed Aug 17 18:36:44 2016 +0200 +++ b/src/iconolab/templates/iconolab/collection_home.html Thu Aug 18 10:49:18 2016 +0200 @@ -9,13 +9,12 @@ {% block content %}

Fonds {{collection.verbose_name}}

- + +

Images du fonds

diff -r e5267573edd8 -r e13fed7f0837 src/iconolab/templates/iconolab/detail_annotation.html --- a/src/iconolab/templates/iconolab/detail_annotation.html Wed Aug 17 18:36:44 2016 +0200 +++ b/src/iconolab/templates/iconolab/detail_annotation.html Thu Aug 18 10:49:18 2016 +0200 @@ -47,7 +47,8 @@ {% else %} Proposer une révision {% endif %} - + +
{% endif %}
{% include "partials/annotation_stats_panel.html" with annotation=annotation label="Statistiques sur cette annotation:" %} diff -r e5267573edd8 -r e13fed7f0837 src/iconolab/templates/partials/header.html --- a/src/iconolab/templates/partials/header.html Wed Aug 17 18:36:44 2016 +0200 +++ b/src/iconolab/templates/partials/header.html Thu Aug 18 10:49:18 2016 +0200 @@ -1,5 +1,5 @@ {% load notifications_tags %} - +{% include "partials/header_breadcrumbs.html" %} diff -r e5267573edd8 -r e13fed7f0837 src/iconolab/templates/partials/header_breadcrumbs.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/iconolab/templates/partials/header_breadcrumbs.html Thu Aug 18 10:49:18 2016 +0200 @@ -0,0 +1,21 @@ +{% if collection %} + +{% endif %} \ No newline at end of file diff -r e5267573edd8 -r e13fed7f0837 src/iconolab/templates/partials/header_search_form.html diff -r e5267573edd8 -r e13fed7f0837 src/iconolab/urls.py --- a/src/iconolab/urls.py Wed Aug 17 18:36:44 2016 +0200 +++ b/src/iconolab/urls.py Thu Aug 18 10:49:18 2016 +0200 @@ -16,6 +16,7 @@ from django.core.urlresolvers import reverse_lazy from django.conf.urls import url, include from django.contrib import admin +from django import views as django_views from iconolab import views from iconolab.search_indexes.views import IconolabSearchView from . import settings @@ -26,15 +27,19 @@ import notifications.urls urlpatterns = [ - url(r'^$', views.iconolab.RedirectView.as_view(url=reverse_lazy("home"))), + url(r'^$', django_views.generic.RedirectView.as_view(url=reverse_lazy("home"))), url(r'^admin/', admin.site.urls), url(r'^home$', views.iconolab.GlobalHomepageView.as_view(), name="home"), url(r'^collections/(?P[a-z0-9\-]+)$', views.iconolab.CollectionHomepageView.as_view(), name='collection_home'), # Home fond url(r'^collections/(?P[a-z0-9\-]+)/items/(?P[^/]+)$', views.iconolab.ShowItemView.as_view(), name='item_detail'), + url(r'^collections/(?P[a-z0-9\-]+)/items/?$', django_views.generic.RedirectView.as_view(pattern_name="collection_home")), + url(r'^collections/(?P[a-z0-9\-]+)/images/?$', django_views.generic.RedirectView.as_view(pattern_name="collection_home")), url(r'^collections/(?P[a-z0-9\-]+)/images/(?P[^/]+)$', views.iconolab.ShowImageView.as_view(), name='image_detail'), + url(r'^collections/(?P[a-z0-9\-]+)/images/(?P[^/]+)/annotations/?$', django_views.generic.RedirectView.as_view(pattern_name="image_detail")), url(r'^collections/(?P[a-z0-9\-]+)/images/(?P[^/]+)/annotations/create$', login_required(views.iconolab.CreateAnnotationView.as_view()), name='annotation_create'), url(r'^collections/(?P[a-z0-9\-]+)/images/(?P[^/]+)/annotations/(?P[^/]+)/detail$', views.iconolab.ShowAnnotationView.as_view(), name='annotation_detail'), url(r'^collections/(?P[a-z0-9\-]+)/images/(?P[^/]+)/annotations/(?P[^/]+)/edit$', login_required(views.iconolab.EditAnnotationView.as_view()), name='annotation_edit'), + url(r'^collections/(?P[a-z0-9\-]+)/images/(?P[^/]+)/annotations/(?P[^/]+)/revisions/?$', django_views.generic.RedirectView.as_view(pattern_name="annotation_detail")), url(r'^collections/(?P[a-z0-9\-]+)/images/(?P[^/]+)/annotations/(?P[^/]+)/revisions/(?P[^/]+)/detail', views.iconolab.ShowRevisionView.as_view(), name='revision_detail'), url(r'^collections/(?P[a-z0-9\-]+)/images/(?P[^/]+)/annotations/(?P[^/]+)/revisions/(?P[^/]+)/merge$', login_required(views.iconolab.MergeProposalView.as_view()), name='annotation_merge'), url(r'^user/(?P[a-z0-9\-]+)/home/?$', views.iconolab.UserHomeView.as_view(), name="user_home"), diff -r e5267573edd8 -r e13fed7f0837 src/iconolab/views/iconolab.py --- a/src/iconolab/views/iconolab.py Wed Aug 17 18:36:44 2016 +0200 +++ b/src/iconolab/views/iconolab.py Thu Aug 18 10:49:18 2016 +0200 @@ -2,7 +2,7 @@ from django.http import Http404 from django.contrib.auth.decorators import login_required from django.contrib.auth.models import User -from django.views.generic import View, DetailView, RedirectView +from django.views.generic import View, DetailView, RedirectView, TemplateView from django.views.generic.base import ContextMixin from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.core.urlresolvers import reverse @@ -80,7 +80,7 @@ def check_kwargs(self, kwargs): try: collection = Collection.objects.prefetch_related("items", "items__images").get(name=kwargs.get('collection_name')) - except Collection.DoesNotExist: + except (ValueError, Collection.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) return True, (collection) @@ -102,11 +102,11 @@ def check_kwargs(self, kwargs): try: collection = Collection.objects.prefetch_related("items", "items__images").get(name=kwargs.get('collection_name')) - except Collection.DoesNotExist: + except (ValueError, Collection.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) try: item = Item.objects.prefetch_related("images").get(item_guid=kwargs.get('item_guid')) - except Item.DoesNotExist: + except (ValueError, Item.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) return True, (collection, item) @@ -131,11 +131,11 @@ def check_kwargs(self, kwargs): try: collection = Collection.objects.prefetch_related("items", "items__images").get(name=kwargs.get('collection_name')) - except Collection.DoesNotExist: + except (ValueError, Collection.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) try: image = Image.objects.prefetch_related("annotations").get(image_guid=kwargs.get('image_guid')) - except Image.DoesNotExist: + except (ValueError, Image.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) return True, (collection, image) @@ -163,11 +163,11 @@ def check_kwargs(self, kwargs): try: collection = Collection.objects.prefetch_related("items", "items__images").get(name=kwargs.get('collection_name')) - except Collection.DoesNotExist: + except (ValueError, Collection.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) try: image = Image.objects.prefetch_related("annotations").get(image_guid=kwargs.get('image_guid')) - except Image.DoesNotExist: + except (ValueError, Image.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) return True, (collection, image) @@ -230,15 +230,15 @@ def check_kwargs(self, kwargs): try: collection = Collection.objects.prefetch_related("items", "items__images").get(name=kwargs.get('collection_name')) - except Collection.DoesNotExist: + except (ValueError, Collection.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) try: image = Image.objects.prefetch_related("annotations").get(image_guid=kwargs.get('image_guid')) - except Image.DoesNotExist: + except (ValueError, Image.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) try: annotation = Annotation.objects.select_related('current_revision').get(annotation_guid=kwargs.get('annotation_guid')) - except Annotation.DoesNotExist: + except (ValueError, Annotation.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) return True, (collection, image, annotation) @@ -300,15 +300,15 @@ def check_kwargs(self, kwargs): try: collection = Collection.objects.prefetch_related("items", "items__images").get(name=kwargs.get('collection_name')) - except Collection.DoesNotExist: + except (ValueError, Collection.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) try: image = Image.objects.prefetch_related("annotations").get(image_guid=kwargs.get('image_guid')) - except Image.DoesNotExist: + except (ValueError, Image.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) try: annotation = Annotation.objects.select_related('current_revision').get(annotation_guid=kwargs.get('annotation_guid')) - except Annotation.DoesNotExist: + except (ValueError, Annotation.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) return True, (collection, image, annotation) @@ -376,19 +376,19 @@ def check_kwargs(self, kwargs): try: collection = Collection.objects.prefetch_related("items", "items__images").get(name=kwargs.get('collection_name')) - except Collection.DoesNotExist: + except (ValueError, Collection.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) try: image = Image.objects.prefetch_related("annotations").get(image_guid=kwargs.get('image_guid')) - except Image.DoesNotExist: + except (ValueError, Image.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) try: annotation = Annotation.objects.select_related('current_revision').get(annotation_guid=kwargs.get('annotation_guid')) - except Annotation.DoesNotExist: + except (ValueError, Annotation.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) try: revision = AnnotationRevision.objects.select_related('parent_revision').get(revision_guid=kwargs.get('revision_guid')) - except AnnotationRevision.DoesNotExist: + except (ValueError, AnnotationRevision.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) return True, (collection, image, annotation, revision) @@ -434,19 +434,19 @@ def check_kwargs(self, kwargs): try: collection = Collection.objects.prefetch_related("items", "items__images").get(name=kwargs.get('collection_name')) - except Collection.DoesNotExist: + except (ValueError, Collection.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) try: image = Image.objects.prefetch_related("annotations").get(image_guid=kwargs.get('image_guid')) - except Image.DoesNotExist: + except (ValueError, Image.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) try: annotation = Annotation.objects.select_related('current_revision').get(annotation_guid=kwargs.get('annotation_guid')) - except Annotation.DoesNotExist: + except (ValueError, Annotation.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) try: revision = AnnotationRevision.objects.select_related('parent_revision').get(revision_guid=kwargs.get('revision_guid')) - except AnnotationRevision.DoesNotExist: + except (ValueError, AnnotationRevision.DoesNotExist): return False, RedirectView.as_view(url=reverse('404error')) return True, (collection, image, annotation, revision) @@ -564,7 +564,5 @@ return render(request, 'iconolab/merge_revision.html', context) -class NotFoundErrorView(View): - def get(self, request, *args, **kwargs): - # Handle image display here - pass \ No newline at end of file +class NotFoundErrorView(TemplateView): + template_name="errors/404error.html" \ No newline at end of file