From 4841929b30beb2cd94f7eb1fe486e094b0704bef Mon Sep 17 00:00:00 2001 From: florimondmanca <florimond.manca@gmail.com> Date: Sat, 12 May 2018 15:51:41 +0100 Subject: [PATCH] fix editable article published date, quick improvements --- project/showcase_site/factory.py | 1 - .../migrations/0002_auto_20180512_1643.py | 24 ++++++++++++++ project/showcase_site/models.py | 31 ++----------------- project/showcase_site/serializers.py | 5 --- .../tests/test_showcase_site/test_article.py | 6 ---- .../test_showcase_site/test_article_api.py | 8 ----- .../tests/test_showcase_site/test_partner.py | 3 -- 7 files changed, 27 insertions(+), 51 deletions(-) create mode 100644 project/showcase_site/migrations/0002_auto_20180512_1643.py diff --git a/project/showcase_site/factory.py b/project/showcase_site/factory.py index 121e6dc..c58be2a 100644 --- a/project/showcase_site/factory.py +++ b/project/showcase_site/factory.py @@ -20,7 +20,6 @@ class ArticleFactory(factory.DjangoModelFactory): title = factory.Faker('sentence', locale='fr') content = factory.Faker('text', max_nb_chars=2000, locale='fr') introduction = factory.Faker('text', max_nb_chars=200, locale='fr') - published = factory.Faker('date') pinned = factory.Iterator((True, False, False, False)) diff --git a/project/showcase_site/migrations/0002_auto_20180512_1643.py b/project/showcase_site/migrations/0002_auto_20180512_1643.py new file mode 100644 index 0000000..0f59d5f --- /dev/null +++ b/project/showcase_site/migrations/0002_auto_20180512_1643.py @@ -0,0 +1,24 @@ +# Generated by Django 2.0.5 on 2018-05-12 14:43 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('showcase_site', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='article', + name='published', + field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='publié le'), + ), + migrations.AlterField( + model_name='partner', + name='start_date', + field=models.DateField(blank=True, help_text='Laisser vide si inconnu. (Cette information est stockée pour historique uniquement.)', null=True, verbose_name='début du partenariat'), + ), + ] diff --git a/project/showcase_site/models.py b/project/showcase_site/models.py index 1db8bdd..2782764 100644 --- a/project/showcase_site/models.py +++ b/project/showcase_site/models.py @@ -1,11 +1,9 @@ """Showcase site models.""" -from datetime import timedelta from django.db import models from django.shortcuts import reverse from django.utils.text import slugify from django.utils.timezone import now -from dry_rest_permissions.generics import authenticated_users from markdownx.models import MarkdownxField @@ -32,24 +30,7 @@ class Category(models.Model): class Article(models.Model): - """Represents a piece of news. - - Fields - ------ - title : str - Title of the news. - slug : str - A brief label identifying the article. - It is generated from the title on creation. - However, it is not used for the article's API URL. - content : str - Full content of the news. - published : date - Date the article was published. Today's date by default. - image : Image - An image to illustrate the article. - pinned : bool - """ + """Represents a piece of news.""" title = models.CharField('titre', max_length=300, help_text="Titre de l'article") @@ -68,7 +49,7 @@ class Article(models.Model): content = MarkdownxField( 'contenu', help_text="Contenu complet de l'article (Markdown est supporté).") - published = models.DateTimeField('publié le', auto_now_add=True) + published = models.DateTimeField('publié le', default=now) modified = models.DateTimeField( 'modifié le', auto_now=True) image = models.ImageField('illustration', blank=True, null=True, @@ -112,12 +93,6 @@ class Article(models.Model): """Return the article's absolute url.""" return reverse('api:article-detail', args=[str(self.slug)]) - @property - def was_modified(self): - """Return whether the article has been modified at least once.""" - return self.modified - self.published > timedelta(seconds=1) - was_modified.fget.short_description = 'Modifié' - # Permissions @staticmethod @@ -265,7 +240,7 @@ class Partner(models.Model): ) ) start_date = models.DateField( - 'début du partenariat', default=now, blank=True, null=True, + 'début du partenariat', blank=True, null=True, help_text=( "Laisser vide si inconnu. " "(Cette information est stockée pour historique uniquement.)" diff --git a/project/showcase_site/serializers.py b/project/showcase_site/serializers.py index dbf2e6f..7bfd0ff 100644 --- a/project/showcase_site/serializers.py +++ b/project/showcase_site/serializers.py @@ -48,11 +48,6 @@ class ArticleSerializer(serializers.HyperlinkedModelSerializer): content = MarkdownField() categories = CategoryField(many=True, required=False) - modified = serializers.SerializerMethodField() - - def get_modified(self, obj: Article): - """Only expose modified if article has already been modified.""" - return obj.was_modified and obj.modified or None class Meta: # noqa model = Article diff --git a/project/tests/test_showcase_site/test_article.py b/project/tests/test_showcase_site/test_article.py index 7be08db..d77151f 100644 --- a/project/tests/test_showcase_site/test_article.py +++ b/project/tests/test_showcase_site/test_article.py @@ -84,12 +84,6 @@ class ArticleTest(ModelTestCase): ArticleFactory.create(title='first article') ArticleFactory.create(title='second article') - def test_was_modified(self): - self.assertFalse(self.obj.was_modified) - sleep(1) - self.obj.save() - self.assertTrue(self.obj.was_modified) - class CleanCategoriesTest(TestCase): """Test the clean_categories pre_delete signal on Article.""" diff --git a/project/tests/test_showcase_site/test_article_api.py b/project/tests/test_showcase_site/test_article_api.py index ffcef74..0f45963 100644 --- a/project/tests/test_showcase_site/test_article_api.py +++ b/project/tests/test_showcase_site/test_article_api.py @@ -66,11 +66,3 @@ class TestArticleSerializer(SerializerTestCaseMixin, TestCase): expected = set(self.serializer.data['categories']) actual = set(c.title for c in self.obj.categories.all()) self.assertEqual(actual, expected) - - def test_modified_only_contained_if_was_modified(self): - obj = self.get_object() - self.assertIsNone(self.serializer.data['modified']) - sleep(1) - obj.save() - serializer = self.get_serializer(obj) - self.assertIsNotNone(serializer.data['modified']) diff --git a/project/tests/test_showcase_site/test_partner.py b/project/tests/test_showcase_site/test_partner.py index 1f0cea1..1064401 100644 --- a/project/tests/test_showcase_site/test_partner.py +++ b/project/tests/test_showcase_site/test_partner.py @@ -1,7 +1,5 @@ """Partner model tests.""" -from django.utils.timezone import now - from showcase_site.factory import PartnerFactory from showcase_site.models import Partner from tests.utils import ModelTestCase @@ -33,7 +31,6 @@ class PartnerTest(ModelTestCase): }, 'start_date': { 'verbose_name': 'début du partenariat', - 'default': now, } } model_tests = { -- GitLab