mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-11-26 19:41:11 +00:00
Only use get_or_create_book with remote_id
This commit is contained in:
parent
0f579e7d8d
commit
35ca61d7f6
7 changed files with 15 additions and 39 deletions
|
@ -8,28 +8,15 @@ from fedireads import models, settings
|
|||
from fedireads.tasks import app
|
||||
|
||||
|
||||
def get_or_create_book(value, key='id', connector_id=None):
|
||||
def get_or_create_book(remote_id):
|
||||
''' pull up a book record by whatever means possible '''
|
||||
book = models.Book.objects.select_subclasses().filter(
|
||||
**{key: value}
|
||||
).first()
|
||||
book = get_by_absolute_id(remote_id, models.Book)
|
||||
if book:
|
||||
if not isinstance(book, models.Edition):
|
||||
return book.default_edition
|
||||
return book
|
||||
|
||||
if key == 'remote_id':
|
||||
book = get_by_absolute_id(value, models.Book)
|
||||
if book:
|
||||
return book
|
||||
connector = get_or_create_connector(remote_id)
|
||||
|
||||
if connector_id:
|
||||
connector_info = models.Connector.objects.get(id=connector_id)
|
||||
connector = load_connector(connector_info)
|
||||
else:
|
||||
connector = get_or_create_connector(value)
|
||||
|
||||
book = connector.get_or_create_book(value)
|
||||
book = connector.get_or_create_book(remote_id)
|
||||
load_more_data.delay(book.id)
|
||||
return book
|
||||
|
||||
|
@ -51,7 +38,6 @@ def get_or_create_connector(remote_id):
|
|||
books_url='https://%s/book' % identifier,
|
||||
covers_url='https://%s/images/covers' % identifier,
|
||||
search_url='https://%s/search?q=' % identifier,
|
||||
key_name='remote_id',
|
||||
priority=3
|
||||
)
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
''' using a fedireads instance as a source of book data '''
|
||||
from django.contrib.postgres.search import SearchVector
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
|
||||
from fedireads import models
|
||||
from .abstract_connector import AbstractConnector, SearchResult
|
||||
|
@ -48,15 +47,9 @@ class Connector(AbstractConnector):
|
|||
)
|
||||
|
||||
|
||||
def get_or_create_book(self, book_id):
|
||||
''' since this is querying its own data source, it can only
|
||||
get a book, not load one from an external source '''
|
||||
try:
|
||||
return models.Book.objects.select_subclasses().get(
|
||||
id=book_id
|
||||
)
|
||||
except ObjectDoesNotExist:
|
||||
return None
|
||||
def get_or_create_book(self, remote_id):
|
||||
''' this COULD be semi-implemented but I think it shouldn't be used '''
|
||||
pass
|
||||
|
||||
|
||||
def is_work_data(self, data):
|
||||
|
|
|
@ -7,7 +7,7 @@ from django.http import HttpResponseNotFound, JsonResponse
|
|||
from django.views.decorators.csrf import csrf_exempt
|
||||
import requests
|
||||
|
||||
from fedireads import activitypub, books_manager
|
||||
from fedireads import activitypub
|
||||
from fedireads import models
|
||||
from fedireads.broadcast import broadcast
|
||||
from fedireads.status import create_review, create_status
|
||||
|
@ -263,7 +263,7 @@ def handle_comment(user, book, content):
|
|||
def handle_status(user, book_id, \
|
||||
builder, fr_serializer, ap_serializer, *args):
|
||||
''' generic handler for statuses '''
|
||||
book = books_manager.get_or_create_book(book_id)
|
||||
book = models.Book.objects.get(id=book_id)
|
||||
status = builder(user, book, *args)
|
||||
|
||||
activity = fr_serializer(status)
|
||||
|
|
|
@ -9,7 +9,7 @@ from fedireads.sanitize_html import InputHtmlParser
|
|||
def create_review_from_activity(author, activity):
|
||||
''' parse an activity json blob into a status '''
|
||||
book_id = activity['inReplyToBook']
|
||||
book = get_or_create_book(book_id, key='remote_id')
|
||||
book = get_or_create_book(book_id)
|
||||
name = activity.get('name')
|
||||
rating = activity.get('rating')
|
||||
content = activity.get('content')
|
||||
|
@ -57,7 +57,7 @@ def create_review(user, book, name, content, rating):
|
|||
def create_quotation_from_activity(author, activity):
|
||||
''' parse an activity json blob into a status '''
|
||||
book_id = activity['inReplyToBook']
|
||||
book = get_or_create_book(book_id, key='remote_id')
|
||||
book = get_or_create_book(book_id)
|
||||
quote = activity.get('quote')
|
||||
content = activity.get('content')
|
||||
published = activity.get('published')
|
||||
|
@ -87,7 +87,7 @@ def create_quotation(user, book, content, quote):
|
|||
def create_comment_from_activity(author, activity):
|
||||
''' parse an activity json blob into a status '''
|
||||
book_id = activity['inReplyToBook']
|
||||
book = get_or_create_book(book_id, key='remote_id')
|
||||
book = get_or_create_book(book_id)
|
||||
content = activity.get('content')
|
||||
published = activity.get('published')
|
||||
remote_id = activity['id']
|
||||
|
@ -191,7 +191,7 @@ def create_status(user, content, reply_parent=None, mention_books=None,
|
|||
|
||||
def create_tag(user, possible_book, name):
|
||||
''' add a tag to a book '''
|
||||
book = get_or_create_book(possible_book, key='remote_id')
|
||||
book = get_or_create_book(possible_book)
|
||||
|
||||
try:
|
||||
tag = models.Tag.objects.create(name=name, book=book, user=user)
|
||||
|
|
|
@ -118,7 +118,7 @@ def edit_profile(request):
|
|||
def resolve_book(request):
|
||||
''' figure out the local path to a book from a remote_id '''
|
||||
remote_id = request.POST.get('remote_id')
|
||||
book = get_or_create_book(remote_id, key='remote_id')
|
||||
book = get_or_create_book(remote_id)
|
||||
return redirect('/book/%d' % book.id)
|
||||
|
||||
|
||||
|
|
|
@ -12,7 +12,6 @@ from django.views.decorators.csrf import csrf_exempt
|
|||
from fedireads import activitypub, outgoing
|
||||
from fedireads import forms, models, books_manager
|
||||
from fedireads import goodreads_import
|
||||
from fedireads.books_manager import get_or_create_book
|
||||
from fedireads.tasks import app
|
||||
|
||||
|
||||
|
@ -470,7 +469,7 @@ def book_page(request, book_id, tab='friends'):
|
|||
@login_required
|
||||
def edit_book_page(request, book_id):
|
||||
''' info about a book '''
|
||||
book = get_or_create_book(book_id)
|
||||
book = models.Book.objects.get(id=book_id)
|
||||
if not book.description:
|
||||
book.description = book.parent_work.description
|
||||
data = {
|
||||
|
|
|
@ -18,7 +18,6 @@ Connector.objects.create(
|
|||
books_url='https://openlibrary.org',
|
||||
covers_url='https://covers.openlibrary.org',
|
||||
search_url='https://openlibrary.org/search?q=',
|
||||
key_name='openlibrary_key',
|
||||
)
|
||||
|
||||
Connector.objects.create(
|
||||
|
@ -30,6 +29,5 @@ Connector.objects.create(
|
|||
books_url='https://%s/book' % DOMAIN,
|
||||
covers_url='https://%s/images/covers' % DOMAIN,
|
||||
search_url='https://%s/search?q=' % DOMAIN,
|
||||
key_name='id',
|
||||
priority=1,
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue