From a4bd68d75da413da169aa8330c92b8a4a104da18 Mon Sep 17 00:00:00 2001 From: TimG Date: Fri, 30 Mar 2018 22:03:43 -0400 Subject: [PATCH] Travail sur les dossiers (#29) --- drf_sp_hub/dossier/__init__.py | 0 drf_sp_hub/dossier/admin.py | 5 +++++ drf_sp_hub/dossier/apps.py | 5 +++++ drf_sp_hub/dossier/forms.py | 8 ++++++++ drf_sp_hub/dossier/models.py | 13 ++++++++++++ drf_sp_hub/dossier/tests.py | 3 +++ drf_sp_hub/dossier/urls.py | 16 +++++++++++++++ drf_sp_hub/dossier/views.py | 26 ++++++++++++++++++++++++ drf_sp_hub/sp_app/models.py | 16 --------------- drf_sp_hub/sp_app/signals.py | 9 +------- drf_sp_hub/sp_app/utils/html_importer.py | 11 +++++++++- drf_sp_hub/sp_hub/settings.py | 1 + drf_sp_hub/sp_hub/urls.py | 1 + 13 files changed, 89 insertions(+), 25 deletions(-) create mode 100644 drf_sp_hub/dossier/__init__.py create mode 100644 drf_sp_hub/dossier/admin.py create mode 100644 drf_sp_hub/dossier/apps.py create mode 100644 drf_sp_hub/dossier/forms.py create mode 100644 drf_sp_hub/dossier/models.py create mode 100644 drf_sp_hub/dossier/tests.py create mode 100644 drf_sp_hub/dossier/urls.py create mode 100644 drf_sp_hub/dossier/views.py diff --git a/drf_sp_hub/dossier/__init__.py b/drf_sp_hub/dossier/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/drf_sp_hub/dossier/admin.py b/drf_sp_hub/dossier/admin.py new file mode 100644 index 0000000..73813c4 --- /dev/null +++ b/drf_sp_hub/dossier/admin.py @@ -0,0 +1,5 @@ +from django.contrib import admin + +from .models import Dossier + +admin.site.register(Dossier) diff --git a/drf_sp_hub/dossier/apps.py b/drf_sp_hub/dossier/apps.py new file mode 100644 index 0000000..c56514e --- /dev/null +++ b/drf_sp_hub/dossier/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class DossierConfig(AppConfig): + name = 'dossier' diff --git a/drf_sp_hub/dossier/forms.py b/drf_sp_hub/dossier/forms.py new file mode 100644 index 0000000..df3f240 --- /dev/null +++ b/drf_sp_hub/dossier/forms.py @@ -0,0 +1,8 @@ +from django import forms + +from .models import Dossier + +class DossierForm(forms.ModelForm): + class Meta: + model = Dossier + fields = [ 'title', 'redacteurs', 'sommaire', 'articles' ] diff --git a/drf_sp_hub/dossier/models.py b/drf_sp_hub/dossier/models.py new file mode 100644 index 0000000..6520ac8 --- /dev/null +++ b/drf_sp_hub/dossier/models.py @@ -0,0 +1,13 @@ +from django.db import models +from django.conf import settings + +class Dossier(models.Model): + title = models.CharField(max_length=200, null=False, blank=False) + redacteurs = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True) + sommaire = models.ForeignKey('article.Article', null=True, blank=True, on_delete=models.SET_NULL) + articles = models.ManyToManyField('article.Article', blank=True, related_name='dossiers', through='DossierOrder') + +class DossierOrder(models.Model): + order = models.PositiveIntegerField() + dossier = models.ForeignKey(Dossier, on_delete=models.CASCADE) + article = models.ForeignKey('article.Article', on_delete=models.CASCADE) diff --git a/drf_sp_hub/dossier/tests.py b/drf_sp_hub/dossier/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/drf_sp_hub/dossier/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/drf_sp_hub/dossier/urls.py b/drf_sp_hub/dossier/urls.py new file mode 100644 index 0000000..e93b20d --- /dev/null +++ b/drf_sp_hub/dossier/urls.py @@ -0,0 +1,16 @@ +from django.conf.urls import url, include + +from .views import DossierList, DossierAdd, DossierDetail, DossierEdit + +app_name = 'dossier' + +dossier_patterns = [ + url(r'^$', DossierList.as_view(), name='list'), + url(r'^new$', DossierAdd.as_view(), name='add'), + url(r'^(?P.+)/$', DossierDetail.as_view(), name='display'), + url(r'^(?P.+)/edit$', DossierEdit.as_view(), name='edit'), +] + +urlpatterns = [ + url(r'^dossiers/', include(dossier_patterns)), +] diff --git a/drf_sp_hub/dossier/views.py b/drf_sp_hub/dossier/views.py new file mode 100644 index 0000000..1790a78 --- /dev/null +++ b/drf_sp_hub/dossier/views.py @@ -0,0 +1,26 @@ +from django.shortcuts import render +from django.views.generic import ListView, DetailView, CreateView, UpdateView + +from .models import Dossier +from .forms import DossierForm + +from lxml import etree + +class DossierList(ListView): + model = Dossier + context_object_name = 'dossiers' + template_name = 'list_page.html' + +class DossierDetail(DetailView): + model = Dossier + template_name = 'display.html' + +class DossierEdit(UpdateView): + model = Dossier + form_class = DossierForm + template_name = 'edit.html' + +class DossierAdd(CreateView): + model = Dossier + form_class = DossierForm + template_name = 'edit.html' diff --git a/drf_sp_hub/sp_app/models.py b/drf_sp_hub/sp_app/models.py index 3e50631..8b0d870 100644 --- a/drf_sp_hub/sp_app/models.py +++ b/drf_sp_hub/sp_app/models.py @@ -3,24 +3,8 @@ from django.urls import reverse -from django.utils.timezone import now as tznow - -from enumfields import EnumIntegerField -from enumfields import Enum - from django.contrib.postgres.fields import JSONField -class Dossier(models.Model): - title = models.CharField(max_length=200, null=False, blank=False) - redacteurs = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True) - sommaire = models.ForeignKey('article.Article', null=True, blank=True, on_delete=models.SET_NULL) - articles = models.ManyToManyField('article.Article', blank=True, related_name='dossiers', through='DossierOrder') - -class DossierOrder(models.Model): - order = models.PositiveIntegerField() - dossier = models.ForeignKey(Dossier, on_delete=models.CASCADE) - article = models.ForeignKey('article.Article', on_delete=models.CASCADE) - class Conversation(models.Model): title = models.CharField(max_length=200, null=False, blank=False) description = models.TextField(null=True, blank=True) diff --git a/drf_sp_hub/sp_app/signals.py b/drf_sp_hub/sp_app/signals.py index 9981403..f221481 100644 --- a/drf_sp_hub/sp_app/signals.py +++ b/drf_sp_hub/sp_app/signals.py @@ -1,19 +1,12 @@ import logging -import os -import re -from lxml import etree -import csv + import json import time -from django.utils.html import strip_tags - from django.db.models.signals import post_save, post_delete, pre_save from django.dispatch import receiver from .models import Conversation -from spkeyword.models import SPKeyword, SPCategory -from .utils.html_importer import HTMLImporter @receiver(pre_save, sender=Conversation) def update_timeline_before_save(sender, instance, **kwargs): diff --git a/drf_sp_hub/sp_app/utils/html_importer.py b/drf_sp_hub/sp_app/utils/html_importer.py index 155db2f..1aafc8c 100644 --- a/drf_sp_hub/sp_app/utils/html_importer.py +++ b/drf_sp_hub/sp_app/utils/html_importer.py @@ -27,7 +27,16 @@ def process_file(self): self.update_authors_field() self.associate_editor_keywords() self.associate_author_keywords() - + self.associate_dossier() + + def associate_dossier(self): + # Ontologie du numérique + info_dossier = self.tree.xpath("//span[@property='isPartOf' and @class='titreDossier']") + if info_dossier: + for d in info_dossier: + dossier_title = d.text + dossier_obj = Dossier.objects.get_or_create(title=dossier_title) + self.instance.dossiers.add(dossier_obj) def update_authors_field(self): authors = self.tree.xpath("//div[@vocab='http://xmlns.com/foaf/0.1/' and @typeof='Person' and @class='foaf-author']") diff --git a/drf_sp_hub/sp_hub/settings.py b/drf_sp_hub/sp_hub/settings.py index b2ffd6e..4586b86 100644 --- a/drf_sp_hub/sp_hub/settings.py +++ b/drf_sp_hub/sp_hub/settings.py @@ -33,6 +33,7 @@ INSTALLED_APPS = [ 'spkeyword.apps.SpKeywordConfig', 'article.apps.ArticleConfig', + 'dossier.apps.DossierConfig', 'sp_app.apps.SpAppConfig', 'sp_api.apps.SpApiConfig', 'logging', diff --git a/drf_sp_hub/sp_hub/urls.py b/drf_sp_hub/sp_hub/urls.py index af20eed..b09d76c 100644 --- a/drf_sp_hub/sp_hub/urls.py +++ b/drf_sp_hub/sp_hub/urls.py @@ -33,6 +33,7 @@ url(r'^accounts/', include('allauth.urls')), url(r'^', include('sp_app.urls', namespace='sp_app')), url(r'^', include('article.urls', namespace='article')), + url(r'^', include('dossier.urls', namespace='dossier')), url(r'^', include('spkeyword.urls', namespace='spkeyword')), url(r'^$', homepage_view, name='home'), ]