mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-11-26 03:21:05 +00:00
Adds thread id to status model
This commit is contained in:
parent
7d03bfd2f6
commit
b8fd909fe3
2 changed files with 61 additions and 0 deletions
53
bookwyrm/migrations/0104_auto_20211001_2012.py
Normal file
53
bookwyrm/migrations/0104_auto_20211001_2012.py
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
# Generated by Django 3.2.5 on 2021-10-01 20:12
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
def set_thread_id(app_registry, schema_editor):
|
||||||
|
"""set thread ids"""
|
||||||
|
db_alias = schema_editor.connection.alias
|
||||||
|
# set the thread id on parent nodes
|
||||||
|
model = app_registry.get_model("bookwyrm", "Status")
|
||||||
|
model.objects.using(db_alias).filter(reply_parent__isnull=True).update(
|
||||||
|
thread_id=models.F("id")
|
||||||
|
)
|
||||||
|
|
||||||
|
queryset = model.objects.using(db_alias).filter(
|
||||||
|
reply_parent__isnull=False,
|
||||||
|
reply_parent__thread_id__isnull=False,
|
||||||
|
thread_id__isnull=True,
|
||||||
|
)
|
||||||
|
iters = 0
|
||||||
|
while queryset.exists():
|
||||||
|
queryset.update(
|
||||||
|
thread_id=models.Subquery(
|
||||||
|
model.objects.filter(id=models.OuterRef("reply_parent")).values_list(
|
||||||
|
"thread_id"
|
||||||
|
)[:1]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
print(iters)
|
||||||
|
iters += 1
|
||||||
|
if iters > 50:
|
||||||
|
print("exceeded query depth")
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
def reverse(*_):
|
||||||
|
"""do nothing"""
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("bookwyrm", "0103_remove_connector_local"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="status",
|
||||||
|
name="thread_id",
|
||||||
|
field=models.IntegerField(blank=True, null=True),
|
||||||
|
),
|
||||||
|
migrations.RunPython(set_thread_id, reverse),
|
||||||
|
]
|
|
@ -57,6 +57,7 @@ class Status(OrderedCollectionPageMixin, BookWyrmModel):
|
||||||
on_delete=models.PROTECT,
|
on_delete=models.PROTECT,
|
||||||
activitypub_field="inReplyTo",
|
activitypub_field="inReplyTo",
|
||||||
)
|
)
|
||||||
|
thread_id = models.IntegerField(blank=True, null=True)
|
||||||
objects = InheritanceManager()
|
objects = InheritanceManager()
|
||||||
|
|
||||||
activity_serializer = activitypub.Note
|
activity_serializer = activitypub.Note
|
||||||
|
@ -68,6 +69,13 @@ class Status(OrderedCollectionPageMixin, BookWyrmModel):
|
||||||
|
|
||||||
ordering = ("-published_date",)
|
ordering = ("-published_date",)
|
||||||
|
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
"""save and notify"""
|
||||||
|
if self.reply_parent:
|
||||||
|
self.thread_id = self.reply_parent.thread_id or self.reply_parent.id
|
||||||
|
|
||||||
|
super().save(*args, **kwargs)
|
||||||
|
|
||||||
def delete(self, *args, **kwargs): # pylint: disable=unused-argument
|
def delete(self, *args, **kwargs): # pylint: disable=unused-argument
|
||||||
""" "delete" a status"""
|
""" "delete" a status"""
|
||||||
if hasattr(self, "boosted_status"):
|
if hasattr(self, "boosted_status"):
|
||||||
|
|
Loading…
Reference in a new issue