mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-11-29 13:01:08 +00:00
Serialize activitypub authors from data in connector
This commit is contained in:
parent
f593970332
commit
7b6035898b
5 changed files with 61 additions and 51 deletions
|
@ -56,10 +56,10 @@ class Work(Book):
|
||||||
class Author(ActivityObject):
|
class Author(ActivityObject):
|
||||||
''' author of a book '''
|
''' author of a book '''
|
||||||
name: str
|
name: str
|
||||||
born: str
|
born: str = ''
|
||||||
died: str
|
died: str = ''
|
||||||
aliases: str
|
aliases: str = ''
|
||||||
bio: str
|
bio: str = ''
|
||||||
openlibrary_key: str
|
openlibraryKey: str = ''
|
||||||
wikipedia_link: str
|
wikipediaLink: str = ''
|
||||||
type: str = 'Person'
|
type: str = 'Person'
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
''' using another bookwyrm instance as a source of book data '''
|
''' using another bookwyrm instance as a source of book data '''
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
|
||||||
from bookwyrm import activitypub, models
|
from bookwyrm import activitypub, models
|
||||||
|
@ -43,10 +42,11 @@ class Connector(AbstractConnector):
|
||||||
try:
|
try:
|
||||||
yield models.Author.objects.get(origin_id=author_id)
|
yield models.Author.objects.get(origin_id=author_id)
|
||||||
except models.Author.DoesNotExist:
|
except models.Author.DoesNotExist:
|
||||||
continue
|
pass
|
||||||
data = get_data(author_id)
|
data = get_data(author_id)
|
||||||
author_data = activitypub.Author(**data)
|
author_data = activitypub.Author(**data)
|
||||||
yield author_data.to_model(models.Author)
|
author = author_data.to_model(models.Author)
|
||||||
|
yield author
|
||||||
|
|
||||||
|
|
||||||
def get_cover_from_data(self, data):
|
def get_cover_from_data(self, data):
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
import inspect
|
import inspect
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from .book import Book, Work, Edition, Author
|
from .book import Book, Work, Edition
|
||||||
|
from .author import Author
|
||||||
from .connector import Connector
|
from .connector import Connector
|
||||||
from .relationship import UserFollows, UserFollowRequest, UserBlocks
|
from .relationship import UserFollows, UserFollowRequest, UserBlocks
|
||||||
from .shelf import Shelf, ShelfBook
|
from .shelf import Shelf, ShelfBook
|
||||||
|
|
50
bookwyrm/models/author.py
Normal file
50
bookwyrm/models/author.py
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
''' database schema for info about authors '''
|
||||||
|
from django.db import models
|
||||||
|
from django.utils import timezone
|
||||||
|
|
||||||
|
from bookwyrm import activitypub
|
||||||
|
from bookwyrm.utils.fields import ArrayField
|
||||||
|
|
||||||
|
from .base_model import ActivitypubMixin, ActivityMapping, BookWyrmModel
|
||||||
|
|
||||||
|
|
||||||
|
class Author(ActivitypubMixin, BookWyrmModel):
|
||||||
|
''' basic biographic info '''
|
||||||
|
origin_id = models.CharField(max_length=255, null=True)
|
||||||
|
''' copy of an author from OL '''
|
||||||
|
openlibrary_key = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
sync = models.BooleanField(default=True)
|
||||||
|
last_sync_date = models.DateTimeField(default=timezone.now)
|
||||||
|
wikipedia_link = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
# idk probably other keys would be useful here?
|
||||||
|
born = models.DateTimeField(blank=True, null=True)
|
||||||
|
died = models.DateTimeField(blank=True, null=True)
|
||||||
|
name = models.CharField(max_length=255)
|
||||||
|
last_name = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
first_name = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
aliases = ArrayField(
|
||||||
|
models.CharField(max_length=255), blank=True, default=list
|
||||||
|
)
|
||||||
|
bio = models.TextField(null=True, blank=True)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def display_name(self):
|
||||||
|
''' Helper to return a displayable name'''
|
||||||
|
if self.name:
|
||||||
|
return self.name
|
||||||
|
# don't want to return a spurious space if all of these are None
|
||||||
|
if self.first_name and self.last_name:
|
||||||
|
return self.first_name + ' ' + self.last_name
|
||||||
|
return self.last_name or self.first_name
|
||||||
|
|
||||||
|
activity_mappings = [
|
||||||
|
ActivityMapping('id', 'remote_id'),
|
||||||
|
ActivityMapping('name', 'name'),
|
||||||
|
ActivityMapping('born', 'born'),
|
||||||
|
ActivityMapping('died', 'died'),
|
||||||
|
ActivityMapping('aliases', 'aliases'),
|
||||||
|
ActivityMapping('bio', 'bio'),
|
||||||
|
ActivityMapping('openlibraryKey', 'openlibrary_key'),
|
||||||
|
ActivityMapping('wikipediaLink', 'wikipedia_link'),
|
||||||
|
]
|
||||||
|
activity_serializer = activitypub.Author
|
|
@ -234,44 +234,3 @@ def isbn_13_to_10(isbn_13):
|
||||||
if checkdigit == 10:
|
if checkdigit == 10:
|
||||||
checkdigit = 'X'
|
checkdigit = 'X'
|
||||||
return converted + str(checkdigit)
|
return converted + str(checkdigit)
|
||||||
|
|
||||||
|
|
||||||
class Author(ActivitypubMixin, BookWyrmModel):
|
|
||||||
origin_id = models.CharField(max_length=255, null=True)
|
|
||||||
''' copy of an author from OL '''
|
|
||||||
openlibrary_key = models.CharField(max_length=255, blank=True, null=True)
|
|
||||||
sync = models.BooleanField(default=True)
|
|
||||||
last_sync_date = models.DateTimeField(default=timezone.now)
|
|
||||||
wikipedia_link = models.CharField(max_length=255, blank=True, null=True)
|
|
||||||
# idk probably other keys would be useful here?
|
|
||||||
born = models.DateTimeField(blank=True, null=True)
|
|
||||||
died = models.DateTimeField(blank=True, null=True)
|
|
||||||
name = models.CharField(max_length=255)
|
|
||||||
last_name = models.CharField(max_length=255, blank=True, null=True)
|
|
||||||
first_name = models.CharField(max_length=255, blank=True, null=True)
|
|
||||||
aliases = ArrayField(
|
|
||||||
models.CharField(max_length=255), blank=True, default=list
|
|
||||||
)
|
|
||||||
bio = models.TextField(null=True, blank=True)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def display_name(self):
|
|
||||||
''' Helper to return a displayable name'''
|
|
||||||
if self.name:
|
|
||||||
return self.name
|
|
||||||
# don't want to return a spurious space if all of these are None
|
|
||||||
if self.first_name and self.last_name:
|
|
||||||
return self.first_name + ' ' + self.last_name
|
|
||||||
return self.last_name or self.first_name
|
|
||||||
|
|
||||||
activity_mappings = [
|
|
||||||
ActivityMapping('id', 'remote_id'),
|
|
||||||
ActivityMapping('name', 'display_name'),
|
|
||||||
ActivityMapping('born', 'born'),
|
|
||||||
ActivityMapping('died', 'died'),
|
|
||||||
ActivityMapping('aliases', 'aliases'),
|
|
||||||
ActivityMapping('bio', 'bio'),
|
|
||||||
ActivityMapping('openlibrary_key', 'openlibrary_key'),
|
|
||||||
ActivityMapping('wikipedia_link', 'wikipedia_link'),
|
|
||||||
]
|
|
||||||
activity_serializer = activitypub.Author
|
|
||||||
|
|
Loading…
Reference in a new issue