Create connectors to federated bookwyrm servers

This got messed up when I refactored how connectors work! Poor
bookwyrm.social doesn't have a wyrms.de connector, but this will fix
that.
This commit is contained in:
Mouse Reeve 2021-04-01 17:02:45 -07:00
parent ec8eb01a0f
commit 8ea60c66a3

View file

@ -3,6 +3,9 @@ import importlib
import re import re
from urllib.parse import urlparse from urllib.parse import urlparse
from django.dispatch import receiver
from django.db.models import signals
from requests import HTTPError from requests import HTTPError
from bookwyrm import models from bookwyrm import models
@ -44,6 +47,7 @@ def search(query, min_confidence=0.1):
except (HTTPError, ConnectorException): except (HTTPError, ConnectorException):
continue continue
# if the search results look the same, ignore them
result_set = [r for r in result_set if dedup_slug(r) not in result_index] result_set = [r for r in result_set if dedup_slug(r) not in result_index]
# `|=` concats two sets. WE ARE GETTING FANCY HERE # `|=` concats two sets. WE ARE GETTING FANCY HERE
result_index |= set(dedup_slug(r) for r in result_set) result_index |= set(dedup_slug(r) for r in result_set)
@ -85,7 +89,7 @@ def get_connectors():
def get_or_create_connector(remote_id): def get_or_create_connector(remote_id):
""" get the connector related to the author's server """ """ get the connector related to the object's server """
url = urlparse(remote_id) url = urlparse(remote_id)
identifier = url.netloc identifier = url.netloc
if not identifier: if not identifier:
@ -122,3 +126,11 @@ def load_connector(connector_info):
"bookwyrm.connectors.%s" % connector_info.connector_file "bookwyrm.connectors.%s" % connector_info.connector_file
) )
return connector.Connector(connector_info.identifier) return connector.Connector(connector_info.identifier)
@receiver(signals.post_save, sender="bookwyrm.FederatedServer")
# pylint: disable=unused-argument
def create_connector(sender, instance, created, *args, **kwargs):
""" create a connector to an external bookwyrm server """
if instance.application_type == "bookwyrm":
get_or_create_connector("https://{:s}".format(instance.server_name))