Merge branch 'main' into suggestions-redis
This commit is contained in:
@ -59,7 +59,7 @@ class Book(View):
|
||||
queryset = book.comment_set
|
||||
else:
|
||||
queryset = book.quotation_set
|
||||
queryset = queryset.filter(user=request.user)
|
||||
queryset = queryset.filter(user=request.user, deleted=False)
|
||||
else:
|
||||
queryset = reviews.exclude(Q(content__isnull=True) | Q(content=""))
|
||||
queryset = queryset.select_related("user")
|
||||
@ -102,10 +102,11 @@ class Book(View):
|
||||
book__parent_work=book.parent_work,
|
||||
).select_related("shelf", "book")
|
||||
|
||||
filters = {"user": request.user, "deleted": False}
|
||||
data["user_statuses"] = {
|
||||
"review_count": book.review_set.filter(user=request.user).count(),
|
||||
"comment_count": book.comment_set.filter(user=request.user).count(),
|
||||
"quotation_count": book.quotation_set.filter(user=request.user).count(),
|
||||
"review_count": book.review_set.filter(**filters).count(),
|
||||
"comment_count": book.comment_set.filter(**filters).count(),
|
||||
"quotation_count": book.quotation_set.filter(**filters).count(),
|
||||
}
|
||||
|
||||
return TemplateResponse(request, "book/book.html", data)
|
||||
|
@ -32,8 +32,12 @@ class Directory(View):
|
||||
|
||||
paginated = Paginator(users, 12)
|
||||
|
||||
page = paginated.get_page(request.GET.get("page"))
|
||||
data = {
|
||||
"users": paginated.get_page(request.GET.get("page")),
|
||||
"page_range": paginated.get_elided_page_range(
|
||||
page.number, on_each_side=2, on_ends=1
|
||||
),
|
||||
"users": page,
|
||||
}
|
||||
return TemplateResponse(request, "directory/directory.html", data)
|
||||
|
||||
|
@ -84,7 +84,9 @@ class ImportStatus(View):
|
||||
|
||||
try:
|
||||
task = app.AsyncResult(job.task_id)
|
||||
except ValueError:
|
||||
# triggers attribute error if the task won't load
|
||||
task.status # pylint: disable=pointless-statement
|
||||
except (ValueError, AttributeError):
|
||||
task = None
|
||||
|
||||
items = job.items.order_by("index").all()
|
||||
|
@ -23,7 +23,7 @@ class Search(View):
|
||||
def get(self, request):
|
||||
"""that search bar up top"""
|
||||
query = request.GET.get("q")
|
||||
min_confidence = request.GET.get("min_confidence", 0.1)
|
||||
min_confidence = request.GET.get("min_confidence", 0)
|
||||
search_type = request.GET.get("type")
|
||||
search_remote = (
|
||||
request.GET.get("remote", False) and request.user.is_authenticated
|
||||
@ -53,7 +53,7 @@ class Search(View):
|
||||
"remote": search_remote,
|
||||
}
|
||||
if query:
|
||||
results = endpoints[search_type](
|
||||
results, search_remote = endpoints[search_type](
|
||||
query, request.user, min_confidence, search_remote
|
||||
)
|
||||
if results:
|
||||
@ -61,25 +61,28 @@ class Search(View):
|
||||
request.GET.get("page")
|
||||
)
|
||||
data["results"] = paginated
|
||||
data["remote"] = search_remote
|
||||
|
||||
return TemplateResponse(request, "search/{:s}.html".format(search_type), data)
|
||||
|
||||
|
||||
def book_search(query, _, min_confidence, search_remote=False):
|
||||
"""the real business is elsewhere"""
|
||||
if search_remote:
|
||||
return connector_manager.search(query, min_confidence=min_confidence)
|
||||
results = connector_manager.local_search(query, min_confidence=min_confidence)
|
||||
if not results:
|
||||
return None
|
||||
return [{"results": results}]
|
||||
# try a local-only search
|
||||
if not search_remote:
|
||||
results = connector_manager.local_search(query, min_confidence=min_confidence)
|
||||
if results:
|
||||
# gret, we found something
|
||||
return [{"results": results}], False
|
||||
# if there weere no local results, or the request was for remote, search all sources
|
||||
return connector_manager.search(query, min_confidence=min_confidence), True
|
||||
|
||||
|
||||
def user_search(query, viewer, *_):
|
||||
"""cool kids members only user search"""
|
||||
# logged out viewers can't search users
|
||||
if not viewer.is_authenticated:
|
||||
return models.User.objects.none()
|
||||
return models.User.objects.none(), None
|
||||
|
||||
# use webfinger for mastodon style account@domain.com username to load the user if
|
||||
# they don't exist locally (handle_remote_webfinger will check the db)
|
||||
@ -98,7 +101,7 @@ def user_search(query, viewer, *_):
|
||||
similarity__gt=0.5,
|
||||
)
|
||||
.order_by("-similarity")[:10]
|
||||
)
|
||||
), None
|
||||
|
||||
|
||||
def list_search(query, viewer, *_):
|
||||
@ -119,4 +122,4 @@ def list_search(query, viewer, *_):
|
||||
similarity__gt=0.1,
|
||||
)
|
||||
.order_by("-similarity")[:10]
|
||||
)
|
||||
), None
|
||||
|
@ -2,7 +2,7 @@
|
||||
from collections import namedtuple
|
||||
|
||||
from django.db import IntegrityError
|
||||
from django.db.models import OuterRef, Subquery
|
||||
from django.db.models import OuterRef, Subquery, F
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.core.paginator import Paginator
|
||||
from django.http import HttpResponseBadRequest, HttpResponseNotFound
|
||||
@ -69,7 +69,8 @@ class Shelf(View):
|
||||
reviews = privacy_filter(request.user, reviews)
|
||||
|
||||
books = books.annotate(
|
||||
rating=Subquery(reviews.values("rating")[:1])
|
||||
rating=Subquery(reviews.values("rating")[:1]),
|
||||
shelved_date=F("shelfbook__shelved_date"),
|
||||
).prefetch_related("authors")
|
||||
|
||||
paginated = Paginator(
|
||||
|
@ -150,7 +150,7 @@ def find_mentions(content):
|
||||
def format_links(content):
|
||||
"""detect and format links"""
|
||||
return re.sub(
|
||||
r'([^(href=")]|^|\()(https?:\/\/(%s([\w\.\-_\/+&\?=:;,])*))' % regex.DOMAIN,
|
||||
r'([^(href=")]|^|\()(https?:\/\/(%s([\w\.\-_\/+&\?=:;,@#])*))' % regex.DOMAIN,
|
||||
r'\g<1><a href="\g<2>">\g<3></a>',
|
||||
content,
|
||||
)
|
||||
|
Reference in New Issue
Block a user