From e45b04f22ec4d77909efb56b993fb0a76cd22a87 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 6 Mar 2020 16:35:56 -0800 Subject: [PATCH] Adds published date separate from created date --- fedireads/activitypub/status.py | 2 +- fedireads/incoming.py | 3 ++- .../migrations/0009_status_published_date.py | 19 +++++++++++++++++++ fedireads/models/status.py | 5 +++-- fedireads/status.py | 3 ++- .../templates/snippets/status_banner.html | 2 +- fedireads/utils/models.py | 2 +- 7 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 fedireads/migrations/0009_status_published_date.py diff --git a/fedireads/activitypub/status.py b/fedireads/activitypub/status.py index 5e89638e8..4fff94588 100644 --- a/fedireads/activitypub/status.py +++ b/fedireads/activitypub/status.py @@ -34,7 +34,7 @@ def get_status(status): 'id': uri, 'url': uri, 'inReplyTo': reply_parent_id, - 'published': status.created_date.isoformat(), + 'published': status.published_date.isoformat(), 'attributedTo': user.actor, # TODO: assuming all posts are public -- should check privacy db field 'to': ['https://www.w3.org/ns/activitystreams#Public'], diff --git a/fedireads/incoming.py b/fedireads/incoming.py index 40c2deb51..1962ba43e 100644 --- a/fedireads/incoming.py +++ b/fedireads/incoming.py @@ -260,12 +260,13 @@ def handle_incoming_create(activity): book = book.split('/')[-1] name = activity['object'].get('name') rating = activity['object'].get('rating') + published = activity['object'].get('published') if user.local: review_id = activity['object']['id'].split('/')[-1] models.Review.objects.get(id=review_id) else: try: - create_review(user, book, name, content, rating) + create_review(user, book, name, content, rating, published) except ValueError: return HttpResponseBadRequest() elif not user.local: diff --git a/fedireads/migrations/0009_status_published_date.py b/fedireads/migrations/0009_status_published_date.py new file mode 100644 index 000000000..428e6036f --- /dev/null +++ b/fedireads/migrations/0009_status_published_date.py @@ -0,0 +1,19 @@ +# Generated by Django 3.0.3 on 2020-03-07 00:28 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('fedireads', '0008_auto_20200224_1504'), + ] + + operations = [ + migrations.AddField( + model_name='status', + name='published_date', + field=models.DateTimeField(default=datetime.datetime.now), + ), + ] diff --git a/fedireads/models/status.py b/fedireads/models/status.py index 809c08f3f..486ac2388 100644 --- a/fedireads/models/status.py +++ b/fedireads/models/status.py @@ -1,4 +1,5 @@ ''' models for storing different kinds of Activities ''' +from datetime import datetime from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models from django.dispatch import receiver @@ -7,8 +8,6 @@ import re from fedireads.utils.models import FedireadsModel -# TODO: quote, comment, poll, recommendation, content warning, image - class Status(FedireadsModel): ''' any post, like a reply to a review, etc ''' @@ -21,6 +20,8 @@ class Status(FedireadsModel): local = models.BooleanField(default=True) privacy = models.CharField(max_length=255, default='public') sensitive = models.BooleanField(default=False) + # the created date can't double as this, because of receiving federated posts + published_date = models.DateTimeField(default=datetime.now) favorites = models.ManyToManyField( 'User', symmetrical=False, diff --git a/fedireads/status.py b/fedireads/status.py index c5969289e..0fe38b405 100644 --- a/fedireads/status.py +++ b/fedireads/status.py @@ -5,7 +5,7 @@ from fedireads.sanitize_html import InputHtmlParser from django.db import IntegrityError -def create_review(user, possible_book, name, content, rating): +def create_review(user, possible_book, name, content, rating, published): ''' a book review has been added ''' # throws a value error if the book is not found book = get_or_create_book(possible_book) @@ -21,6 +21,7 @@ def create_review(user, possible_book, name, content, rating): name=name, rating=rating, content=content, + published_date=published, ) diff --git a/fedireads/templates/snippets/status_banner.html b/fedireads/templates/snippets/status_banner.html index fac1e532d..1b99ed1fb 100644 --- a/fedireads/templates/snippets/status_banner.html +++ b/fedireads/templates/snippets/status_banner.html @@ -4,7 +4,7 @@ {% include 'snippets/username.html' with user=activity.user %} {{ content | safe }} - {{ activity.created_date | naturaltime }} + {{ activity.published_date | naturaltime }} diff --git a/fedireads/utils/models.py b/fedireads/utils/models.py index f7cb8e955..dfb491e2d 100644 --- a/fedireads/utils/models.py +++ b/fedireads/utils/models.py @@ -2,7 +2,7 @@ from django.db import models from fedireads.settings import DOMAIN - +# TODO maybe this should be in /models? class FedireadsModel(models.Model): created_date = models.DateTimeField(auto_now_add=True) updated_date = models.DateTimeField(auto_now=True)