From db426d71eed978fdb80a692a22a5feef5ec795fd Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 17 Mar 2021 09:22:45 -0700 Subject: [PATCH 1/3] Fixes failed serialization of empty avatar field --- bookwyrm/activitypub/base_activity.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/activitypub/base_activity.py b/bookwyrm/activitypub/base_activity.py index 170bdfb9..791502d0 100644 --- a/bookwyrm/activitypub/base_activity.py +++ b/bookwyrm/activitypub/base_activity.py @@ -75,7 +75,7 @@ class ActivityObject: for field in fields(self): try: value = kwargs[field.name] - if value in (None, MISSING): + if value in (None, MISSING, {}): raise KeyError() try: is_subclass = issubclass(field.type, ActivityObject) From 0d8e1f0ae26dee88c180a1ea12634d2af7232ffa Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 17 Mar 2021 09:34:20 -0700 Subject: [PATCH 2/3] Makes endponts a default field --- bookwyrm/activitypub/person.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/activitypub/person.py b/bookwyrm/activitypub/person.py index ba86b036..f2cacc15 100644 --- a/bookwyrm/activitypub/person.py +++ b/bookwyrm/activitypub/person.py @@ -24,7 +24,7 @@ class Person(ActivityObject): outbox: str followers: str publicKey: PublicKey - endpoints: Dict + endpoints: Dict = field(default_factory=lambda: {}) name: str = None summary: str = None icon: Image = field(default_factory=lambda: {}) From ba09377041b8a772c86f9a71b045dac68755cff0 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 17 Mar 2021 13:59:16 -0700 Subject: [PATCH 3/3] Use None instead of empty dict for endpoint default value --- bookwyrm/activitypub/person.py | 2 +- bookwyrm/models/fields.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bookwyrm/activitypub/person.py b/bookwyrm/activitypub/person.py index f2cacc15..f1298b92 100644 --- a/bookwyrm/activitypub/person.py +++ b/bookwyrm/activitypub/person.py @@ -24,7 +24,7 @@ class Person(ActivityObject): outbox: str followers: str publicKey: PublicKey - endpoints: Dict = field(default_factory=lambda: {}) + endpoints: Dict = None name: str = None summary: str = None icon: Image = field(default_factory=lambda: {}) diff --git a/bookwyrm/models/fields.py b/bookwyrm/models/fields.py index 1ca0b377..1bdc6c45 100644 --- a/bookwyrm/models/fields.py +++ b/bookwyrm/models/fields.py @@ -73,7 +73,7 @@ class ActivitypubFieldMixin: raise value = getattr(data, "actor") formatted = self.field_from_activity(value) - if formatted is None or formatted is MISSING: + if formatted is None or formatted is MISSING or formatted == {}: return setattr(instance, self.name, formatted) @@ -101,7 +101,7 @@ class ActivitypubFieldMixin: def field_from_activity(self, value): """ formatter to convert activitypub into a model value """ - if hasattr(self, "activitypub_wrapper"): + if value and hasattr(self, "activitypub_wrapper"): value = value.get(self.activitypub_wrapper) return value