diff --git a/bookwyrm/activitypub/__init__.py b/bookwyrm/activitypub/__init__.py index 852db345c..3dccc31a4 100644 --- a/bookwyrm/activitypub/__init__.py +++ b/bookwyrm/activitypub/__init__.py @@ -2,11 +2,12 @@ import inspect import sys -from .base_activity import ActivityEncoder, Image, PublicKey, Signature +from .base_activity import ActivityEncoder, PublicKey, Signature from .base_activity import Link, Mention from .base_activity import ActivitySerializerError from .base_activity import tag_formatter from .base_activity import image_formatter, image_attachments_formatter +from .image import Image from .note import Note, GeneratedNote, Article, Comment, Review, Quotation from .note import Tombstone from .interaction import Boost, Like diff --git a/bookwyrm/activitypub/base_activity.py b/bookwyrm/activitypub/base_activity.py index 54c2baea9..3fe44f8b7 100644 --- a/bookwyrm/activitypub/base_activity.py +++ b/bookwyrm/activitypub/base_activity.py @@ -23,13 +23,6 @@ class ActivityEncoder(JSONEncoder): return o.__dict__ -@dataclass -class Image: - ''' image block ''' - url: str - type: str = 'Image' - - @dataclass class Link(): ''' for tagging a book in a status ''' @@ -146,6 +139,7 @@ class ActivityObject: for (model_key, value) in image_fields.items(): if not value: continue + #formatted_value = image_formatter(value) getattr(instance, model_key).save(*value, save=True) # add one to many fields @@ -212,16 +206,9 @@ def tag_formatter(tags, tag_type): def image_formatter(image_json): ''' helper function to load images and format them for a model ''' - if isinstance(image_json, list): - try: - image_json = image_json[0] - except IndexError: - return None - - if not image_json or not hasattr(image_json, 'url'): + url = image.get('url') + if not url: return None - url = image_json.get('url') - try: response = requests.get(url) except ConnectionError: diff --git a/bookwyrm/activitypub/book.py b/bookwyrm/activitypub/book.py index 01bdcca91..02cab2818 100644 --- a/bookwyrm/activitypub/book.py +++ b/bookwyrm/activitypub/book.py @@ -2,7 +2,8 @@ from dataclasses import dataclass, field from typing import List -from .base_activity import ActivityObject, Image +from .base_activity import ActivityObject +from .image import Image @dataclass(init=False) class Book(ActivityObject): @@ -25,7 +26,7 @@ class Book(ActivityObject): librarythingKey: str = '' goodreadsKey: str = '' - attachment: List[Image] = field(default_factory=lambda: []) + cover: Image = field(default_factory=lambda: {}) type: str = 'Book' diff --git a/bookwyrm/activitypub/image.py b/bookwyrm/activitypub/image.py new file mode 100644 index 000000000..c0ad3ea30 --- /dev/null +++ b/bookwyrm/activitypub/image.py @@ -0,0 +1,9 @@ +''' an image, nothing fancy ''' +from dataclasses import dataclass + +@dataclass +class Image: + ''' image block ''' + url: str + name: str = '' + type: str = 'Image' diff --git a/bookwyrm/activitypub/note.py b/bookwyrm/activitypub/note.py index 9eab952d3..aeb078dcc 100644 --- a/bookwyrm/activitypub/note.py +++ b/bookwyrm/activitypub/note.py @@ -2,7 +2,8 @@ from dataclasses import dataclass, field from typing import Dict, List -from .base_activity import ActivityObject, Image, Link +from .base_activity import ActivityObject, Link +from .image import Image @dataclass(init=False) class Tombstone(ActivityObject): diff --git a/bookwyrm/activitypub/person.py b/bookwyrm/activitypub/person.py index 324d68e32..e7d720ecf 100644 --- a/bookwyrm/activitypub/person.py +++ b/bookwyrm/activitypub/person.py @@ -2,7 +2,8 @@ from dataclasses import dataclass, field from typing import Dict -from .base_activity import ActivityObject, Image, PublicKey +from .base_activity import ActivityObject, PublicKey +from .image import Image @dataclass(init=False) class Person(ActivityObject):