kopia lustrzana https://gitlab.com/marnanel/chapeau
Replaced the "requested" flag in Follow with an "offer" field which holds the ID of the follow request.
rodzic
9d8f4613d4
commit
3d38c6618a
|
@ -93,13 +93,13 @@ def on_follow(message):
|
|||
result = trilby_models.Follow(
|
||||
follower = follower,
|
||||
following = following,
|
||||
offer = fields.get('id'),
|
||||
)
|
||||
|
||||
result.save()
|
||||
|
||||
trilby_signals.followed.send(
|
||||
sender = result,
|
||||
id = fields.get('id'),
|
||||
)
|
||||
|
||||
return result
|
||||
|
|
|
@ -51,6 +51,7 @@ KEPI = {
|
|||
'USER_INBOX_LINK': '/users/%(username)s/inbox',
|
||||
'USER_OUTBOX_LINK': '/users/%(username)s/outbox',
|
||||
'USER_FEATURED_LINK': '/users/%(username)s/featured',
|
||||
'FOLLOW_REQUEST_LINK' : '/users/%(username)s/follow/%(number)x',
|
||||
'SHARED_INBOX_LINK': '/inbox',
|
||||
|
||||
'TOMBSTONES': True,
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
# Generated by Django 3.0.9 on 2020-09-28 20:39
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('trilby_api', '0022_auto_20200915_1638'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='follow',
|
||||
name='requested',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='follow',
|
||||
name='offer',
|
||||
field=models.URLField(blank=True, default=None, help_text="If this is an offer, the ID of the offer. If this isn't an offer, None.", max_length=255, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='follow',
|
||||
name='follower',
|
||||
field=models.ForeignKey(help_text="The person who's following.", on_delete=django.db.models.deletion.DO_NOTHING, related_name='rel_following', to='trilby_api.Person'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='follow',
|
||||
name='following',
|
||||
field=models.ForeignKey(help_text="The person who's being followed.", on_delete=django.db.models.deletion.DO_NOTHING, related_name='rel_followers', to='trilby_api.Person'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='follow',
|
||||
name='show_reblogs',
|
||||
field=models.BooleanField(default=True, help_text="True if the following person wants to see reblogs from the follower. False if they only want to see the follower's original posts."),
|
||||
),
|
||||
]
|
|
@ -18,24 +18,38 @@ from django.core.exceptions import ValidationError
|
|||
|
||||
class Follow(models.Model):
|
||||
|
||||
"""
|
||||
A record that someone follows someone else.
|
||||
"""
|
||||
|
||||
follower = models.ForeignKey(
|
||||
'Person',
|
||||
on_delete = models.DO_NOTHING,
|
||||
related_name = 'rel_following',
|
||||
help_text = "The person who's following.",
|
||||
)
|
||||
|
||||
following = models.ForeignKey(
|
||||
'Person',
|
||||
on_delete = models.DO_NOTHING,
|
||||
related_name = 'rel_followers',
|
||||
help_text = "The person who's being followed.",
|
||||
)
|
||||
|
||||
requested = models.BooleanField(
|
||||
default=True,
|
||||
offer = models.URLField(
|
||||
max_length = 255,
|
||||
default = None,
|
||||
null = True,
|
||||
blank = True,
|
||||
help_text = "If this is an offer, the ID of the offer. "+\
|
||||
"If this isn't an offer, None.",
|
||||
)
|
||||
|
||||
show_reblogs = models.BooleanField(
|
||||
default=True,
|
||||
help_text = "True if the following person wants to see "+\
|
||||
"reblogs from the follower. False if they only "+\
|
||||
"want to see the follower's original posts.",
|
||||
)
|
||||
|
||||
class Meta:
|
||||
|
@ -47,7 +61,7 @@ class Follow(models.Model):
|
|||
]
|
||||
|
||||
def __str__(self):
|
||||
if self.requested:
|
||||
if self.offer is not None:
|
||||
return '[%s requests to follow %s]' % (
|
||||
self.follower,
|
||||
self.following,
|
||||
|
|
|
@ -454,7 +454,7 @@ class LocalPerson(Person):
|
|||
|
||||
return trilby_models.Follow.objects.filter(
|
||||
follower = self,
|
||||
requested = False,
|
||||
offer = None,
|
||||
).count()
|
||||
|
||||
@property
|
||||
|
@ -464,7 +464,7 @@ class LocalPerson(Person):
|
|||
|
||||
return trilby_models.Follow.objects.filter(
|
||||
following = self,
|
||||
requested = False,
|
||||
offer = None,
|
||||
).count()
|
||||
|
||||
@property
|
||||
|
|
|
@ -41,7 +41,7 @@ def on_follow(sender, **kwargs):
|
|||
'type': 'Accept',
|
||||
'to': [follow.follower.url],
|
||||
'actor': follow.following.url,
|
||||
'object': kwargs.get('id'),
|
||||
'object': follow.offer,
|
||||
}
|
||||
|
||||
sombrero_delivery.deliver(
|
||||
|
@ -52,7 +52,7 @@ def on_follow(sender, **kwargs):
|
|||
],
|
||||
)
|
||||
|
||||
follow.requested = False
|
||||
follow.offer = None
|
||||
follow.save()
|
||||
else:
|
||||
logger.info(" -- not sending automatic Accept")
|
||||
|
|
|
@ -152,7 +152,7 @@ class TestAccountDetails(TrilbyTestCase):
|
|||
follow = Follow(
|
||||
follower = whom,
|
||||
following = alice,
|
||||
requested = False,
|
||||
offer = None,
|
||||
)
|
||||
follow.save()
|
||||
|
||||
|
@ -173,7 +173,7 @@ class TestAccountDetails(TrilbyTestCase):
|
|||
follow = Follow(
|
||||
follower = alice,
|
||||
following = whom,
|
||||
requested = False,
|
||||
offer = None,
|
||||
)
|
||||
follow.save()
|
||||
|
||||
|
@ -252,8 +252,9 @@ class TestAccountActions(TrilbyTestCase):
|
|||
Follow.objects.filter(
|
||||
following = bob,
|
||||
follower = alice,
|
||||
requested = True,
|
||||
).count(),
|
||||
).exclude(
|
||||
offer = None,
|
||||
).count(),
|
||||
1)
|
||||
|
||||
self.assertEqual(
|
||||
|
@ -277,7 +278,7 @@ class TestAccountActions(TrilbyTestCase):
|
|||
Follow.objects.filter(
|
||||
following = bob,
|
||||
follower = alice,
|
||||
requested = False,
|
||||
offer = None,
|
||||
).count(),
|
||||
1)
|
||||
|
||||
|
@ -285,7 +286,7 @@ class TestAccountActions(TrilbyTestCase):
|
|||
Follow.objects.filter(
|
||||
following = alice,
|
||||
follower = bob,
|
||||
requested = False,
|
||||
offer = None,
|
||||
).count(),
|
||||
1)
|
||||
|
||||
|
|
|
@ -99,7 +99,7 @@ class TestTimelines(TrilbyTestCase):
|
|||
follow = Follow(
|
||||
follower = self._george,
|
||||
following = self._alice,
|
||||
requested = False,
|
||||
offer = None,
|
||||
)
|
||||
follow.save()
|
||||
|
||||
|
|
|
@ -28,9 +28,10 @@ from rest_framework.permissions import IsAuthenticated, \
|
|||
from rest_framework.response import Response
|
||||
from rest_framework.renderers import JSONRenderer
|
||||
import kepi.trilby_api.receivers
|
||||
from kepi.bowler_pub.utils import uri_to_url
|
||||
import json
|
||||
import re
|
||||
|
||||
import random
|
||||
|
||||
###########################
|
||||
|
||||
|
@ -247,23 +248,34 @@ class Follow(DoSomethingWithPerson):
|
|||
def _do_something_with(self, the_person, request):
|
||||
|
||||
try:
|
||||
|
||||
if the_person.auto_follow:
|
||||
offer = None
|
||||
else:
|
||||
number = random.randint(0, 0xffffffff)
|
||||
offer = uri_to_url(settings.KEPI['FOLLOW_REQUEST_LINK'] % {
|
||||
'username': request.user.username,
|
||||
'number': number,
|
||||
})
|
||||
|
||||
follow = trilby_models.Follow(
|
||||
follower = request.user.localperson,
|
||||
following = the_person,
|
||||
requested = not the_person.auto_follow,
|
||||
offer = offer,
|
||||
)
|
||||
|
||||
with transaction.atomic():
|
||||
follow.save()
|
||||
|
||||
logger.info(' -- follow: %s', follow)
|
||||
logger.debug(' -- offer ID: %s', offer)
|
||||
kepi_signals.followed.send(sender=follow)
|
||||
|
||||
if the_person.auto_follow:
|
||||
follow_back = trilby_models.Follow(
|
||||
follower = the_person,
|
||||
following = request.user.localperson,
|
||||
requested = False,
|
||||
offer = None,
|
||||
)
|
||||
|
||||
with transaction.atomic():
|
||||
|
|
Ładowanie…
Reference in New Issue