Merge branch 'main' into production

This commit is contained in:
Mouse Reeve 2021-04-01 18:07:54 -07:00
commit 406c94354f
7 changed files with 51 additions and 4 deletions

View file

@ -3,6 +3,9 @@ import importlib
import re
from urllib.parse import urlparse
from django.dispatch import receiver
from django.db.models import signals
from requests import HTTPError
from bookwyrm import models
@ -44,6 +47,7 @@ def search(query, min_confidence=0.1):
except (HTTPError, ConnectorException):
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]
# `|=` concats two sets. WE ARE GETTING FANCY HERE
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):
""" get the connector related to the author's server """
""" get the connector related to the object's server """
url = urlparse(remote_id)
identifier = url.netloc
if not identifier:
@ -122,3 +126,11 @@ def load_connector(connector_info):
"bookwyrm.connectors.%s" % connector_info.connector_file
)
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))

View file

@ -0,0 +1,21 @@
# Generated by Django 3.1.6 on 2021-04-02 00:14
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0059_user_preferred_timezone"),
]
operations = [
migrations.AddField(
model_name="siteinvite",
name="invitees",
field=models.ManyToManyField(
related_name="invitees", to=settings.AUTH_USER_MODEL
),
),
]

View file

@ -58,6 +58,7 @@ class SiteInvite(models.Model):
use_limit = models.IntegerField(blank=True, null=True)
times_used = models.IntegerField(default=0)
user = models.ForeignKey(User, on_delete=models.CASCADE)
invitees = models.ManyToManyField(User, related_name="invitees")
def valid(self):
""" make sure it hasn't expired or been used """

View file

@ -59,6 +59,8 @@
{% endif %}
</td>
<td class="field is-grouped">
{# no invite OR invite not yet used #}
{% if not req.invite.times_used %}
<form name="send-invite" method="post">
{% csrf_token %}
<input type="hidden" name="invite-request" value="{{ req.id }}">
@ -68,9 +70,16 @@
<button type="submit" class="button is-link is-light is-small">{% trans "Re-send invite" %}</button>
{% endif %}
</form>
{% endif %}
{# invite created but not used #}
{% if req.invite and not req.invite.times_used %}
{# <button class="button is-danger is-light is-small">{% trans "Revoke invite" %}</button> #}
{% elif req.invite %}
{# accepted #}
{% if req.invite.invitees.exists %}
<a href="{{ req.invite.invitees.first.local_path }}">@{{ req.invite.invitees.first.localname }}</a>
{% endif %}
{% else %}
<form name="ignore-request" method="post" action="{% url 'settings-invite-requests-ignore' %}">
{% csrf_token %}
@ -78,7 +87,7 @@
{% if not req.ignored %}
<button type="submit" class="button is-danger is-light is-small">{% trans "Ignore" %}</button>
{% else %}
<button type="submit" class="button is-danger is-light is-small">{% trans "Un-gnore" %}</button>
<button type="submit" class="button is-danger is-light is-small">{% trans "Un-ignore" %}</button>
{% endif %}
</form>
{% endif %}

View file

@ -11,7 +11,10 @@
</span>
</h2>
<form class="hidden mt-3" id="filters" method-"get" action="{{ request.path }}" tabindex="0">
<form class="hidden mt-3" id="filters" method="get" action="{{ request.path }}" tabindex="0">
{% if sort %}
<input type="hidden" name="sort" value="{{ sort }}">
{% endif %}
<div class="columns">
{% block filter_fields %}
{% endblock %}

View file

@ -1,5 +1,5 @@
{% load i18n %}
<a href="{{ url }}?sort={% if sort == field %}-{% endif %}{{ field }}">
<a href="{{ url }}?sort={% if sort == field %}-{% endif %}{{ field }}{% for k, v in request.GET.items %}{% if k != "sort" %}&{{ k }}={{ v }}{% endif %}{% endfor %}">
{{ text }}
{% if sort == field %}
<span class="icon icon-arrow-up">

View file

@ -108,6 +108,7 @@ class Register(View):
)
if invite:
invite.times_used += 1
invite.invitees.add(user)
invite.save()
login(request, user)