From b67aea22fc707c2b06ee59a49d69aadd3794dda3 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 13 Dec 2020 11:16:12 -0800 Subject: [PATCH] Aggregates (de)serializable model fields --- bookwyrm/models/base_model.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/bookwyrm/models/base_model.py b/bookwyrm/models/base_model.py index dd3065c9..d9aafcce 100644 --- a/bookwyrm/models/base_model.py +++ b/bookwyrm/models/base_model.py @@ -10,6 +10,8 @@ from Crypto.Hash import SHA256 from django.core.paginator import Paginator from django.db import models from django.db.models import Q +from django.db.models.fields.files import ImageFileDescriptor +from django.db.models.fields.related_descriptors import ManyToManyDescriptor from django.dispatch import receiver from bookwyrm import activitypub @@ -68,6 +70,30 @@ class ActivitypubMixin: activity_serializer = lambda: {} reverse_unfurl = False + def __init__(self, *args, **kwargs): + ''' collect some info on model fields ''' + self.image_fields = [] + self.many_to_many_fields = [] + self.simple_fields = [] # "simple" + for field in self._meta.get_fields(): + if not hasattr(field, 'field_to_activity'): + continue + + if isinstance(field, ImageFileDescriptor): + self.image_fields.append(field) + elif isinstance(field, ManyToManyDescriptor): + self.many_to_many_fields.append(field) + else: + self.simple_fields.append(field) + + self.deserialize_reverse_fields = self.deserialize_reverse_fields \ + if hasattr(self, 'deserialize_reverse_fields') else [] + self.serialize_reverse_fields = self.serialize_reverse_fields \ + if hasattr(self, 'serialize_reverse_fields') else [] + + super().__init__(*args, **kwargs) + + @classmethod def find_existing_by_remote_id(cls, remote_id): ''' look up a remote id in the db '''