Runs black
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
''' non-interactive pages '''
|
||||
""" non-interactive pages """
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.core.paginator import Paginator
|
||||
from django.db.models import Q
|
||||
@ -17,48 +17,54 @@ from .helpers import is_api_request, is_bookwyrm_request, object_visible_to_user
|
||||
|
||||
|
||||
# pylint: disable= no-self-use
|
||||
@method_decorator(login_required, name='dispatch')
|
||||
@method_decorator(login_required, name="dispatch")
|
||||
class Feed(View):
|
||||
''' activity stream '''
|
||||
""" activity stream """
|
||||
|
||||
def get(self, request, tab):
|
||||
''' user's homepage with activity feed '''
|
||||
""" user's homepage with activity feed """
|
||||
try:
|
||||
page = int(request.GET.get('page', 1))
|
||||
page = int(request.GET.get("page", 1))
|
||||
except ValueError:
|
||||
page = 1
|
||||
|
||||
if tab == 'home':
|
||||
if tab == "home":
|
||||
activities = get_activity_feed(request.user, following_only=True)
|
||||
tab_title = _("Home")
|
||||
elif tab == "local":
|
||||
activities = get_activity_feed(
|
||||
request.user, following_only=True)
|
||||
tab_title = _('Home')
|
||||
elif tab == 'local':
|
||||
activities = get_activity_feed(
|
||||
request.user, privacy=['public', 'followers'], local_only=True)
|
||||
tab_title = _('Local')
|
||||
request.user, privacy=["public", "followers"], local_only=True
|
||||
)
|
||||
tab_title = _("Local")
|
||||
else:
|
||||
activities = get_activity_feed(
|
||||
request.user, privacy=['public', 'followers'])
|
||||
tab_title = _('Federated')
|
||||
request.user, privacy=["public", "followers"]
|
||||
)
|
||||
tab_title = _("Federated")
|
||||
paginated = Paginator(activities, PAGE_LENGTH)
|
||||
|
||||
data = {**feed_page_data(request.user), **{
|
||||
'user': request.user,
|
||||
'activities': paginated.page(page),
|
||||
'tab': tab,
|
||||
'tab_title': tab_title,
|
||||
'goal_form': forms.GoalForm(),
|
||||
'path': '/%s' % tab,
|
||||
}}
|
||||
return TemplateResponse(request, 'feed/feed.html', data)
|
||||
data = {
|
||||
**feed_page_data(request.user),
|
||||
**{
|
||||
"user": request.user,
|
||||
"activities": paginated.page(page),
|
||||
"tab": tab,
|
||||
"tab_title": tab_title,
|
||||
"goal_form": forms.GoalForm(),
|
||||
"path": "/%s" % tab,
|
||||
},
|
||||
}
|
||||
return TemplateResponse(request, "feed/feed.html", data)
|
||||
|
||||
|
||||
@method_decorator(login_required, name='dispatch')
|
||||
@method_decorator(login_required, name="dispatch")
|
||||
class DirectMessage(View):
|
||||
''' dm view '''
|
||||
""" dm view """
|
||||
|
||||
def get(self, request, username=None):
|
||||
''' like a feed but for dms only '''
|
||||
""" like a feed but for dms only """
|
||||
try:
|
||||
page = int(request.GET.get('page', 1))
|
||||
page = int(request.GET.get("page", 1))
|
||||
except ValueError:
|
||||
page = 1
|
||||
|
||||
@ -74,27 +80,33 @@ class DirectMessage(View):
|
||||
queryset = queryset.filter(Q(user=user) | Q(mention_users=user))
|
||||
|
||||
activities = get_activity_feed(
|
||||
request.user, privacy=['direct'], queryset=queryset)
|
||||
request.user, privacy=["direct"], queryset=queryset
|
||||
)
|
||||
|
||||
paginated = Paginator(activities, PAGE_LENGTH)
|
||||
activity_page = paginated.page(page)
|
||||
data = {**feed_page_data(request.user), **{
|
||||
'user': request.user,
|
||||
'partner': user,
|
||||
'activities': activity_page,
|
||||
'path': '/direct-messages',
|
||||
}}
|
||||
return TemplateResponse(request, 'feed/direct_messages.html', data)
|
||||
data = {
|
||||
**feed_page_data(request.user),
|
||||
**{
|
||||
"user": request.user,
|
||||
"partner": user,
|
||||
"activities": activity_page,
|
||||
"path": "/direct-messages",
|
||||
},
|
||||
}
|
||||
return TemplateResponse(request, "feed/direct_messages.html", data)
|
||||
|
||||
|
||||
class Status(View):
|
||||
''' get posting '''
|
||||
""" get posting """
|
||||
|
||||
def get(self, request, username, status_id):
|
||||
''' display a particular status (and replies, etc) '''
|
||||
""" display a particular status (and replies, etc) """
|
||||
try:
|
||||
user = get_user_from_username(request.user, username)
|
||||
status = models.Status.objects.select_subclasses().get(
|
||||
id=status_id, deleted=False)
|
||||
id=status_id, deleted=False
|
||||
)
|
||||
except ValueError:
|
||||
return HttpResponseNotFound()
|
||||
|
||||
@ -108,18 +120,23 @@ class Status(View):
|
||||
|
||||
if is_api_request(request):
|
||||
return ActivitypubResponse(
|
||||
status.to_activity(pure=not is_bookwyrm_request(request)))
|
||||
status.to_activity(pure=not is_bookwyrm_request(request))
|
||||
)
|
||||
|
||||
data = {**feed_page_data(request.user), **{
|
||||
'status': status,
|
||||
}}
|
||||
return TemplateResponse(request, 'feed/status.html', data)
|
||||
data = {
|
||||
**feed_page_data(request.user),
|
||||
**{
|
||||
"status": status,
|
||||
},
|
||||
}
|
||||
return TemplateResponse(request, "feed/status.html", data)
|
||||
|
||||
|
||||
class Replies(View):
|
||||
''' replies page (a json view of status) '''
|
||||
""" replies page (a json view of status) """
|
||||
|
||||
def get(self, request, username, status_id):
|
||||
''' ordered collection of replies to a status '''
|
||||
""" ordered collection of replies to a status """
|
||||
# the html view is the same as Status
|
||||
if not is_api_request(request):
|
||||
status_view = Status.as_view()
|
||||
@ -134,41 +151,39 @@ class Replies(View):
|
||||
|
||||
|
||||
def feed_page_data(user):
|
||||
''' info we need for every feed page '''
|
||||
""" info we need for every feed page """
|
||||
if not user.is_authenticated:
|
||||
return {}
|
||||
|
||||
goal = models.AnnualGoal.objects.filter(
|
||||
user=user, year=timezone.now().year
|
||||
).first()
|
||||
goal = models.AnnualGoal.objects.filter(user=user, year=timezone.now().year).first()
|
||||
return {
|
||||
'suggested_books': get_suggested_books(user),
|
||||
'goal': goal,
|
||||
'goal_form': forms.GoalForm(),
|
||||
"suggested_books": get_suggested_books(user),
|
||||
"goal": goal,
|
||||
"goal_form": forms.GoalForm(),
|
||||
}
|
||||
|
||||
|
||||
def get_suggested_books(user, max_books=5):
|
||||
''' helper to get a user's recent books '''
|
||||
""" helper to get a user's recent books """
|
||||
book_count = 0
|
||||
preset_shelves = [
|
||||
('reading', max_books), ('read', 2), ('to-read', max_books)
|
||||
]
|
||||
preset_shelves = [("reading", max_books), ("read", 2), ("to-read", max_books)]
|
||||
suggested_books = []
|
||||
for (preset, shelf_max) in preset_shelves:
|
||||
limit = shelf_max if shelf_max < (max_books - book_count) \
|
||||
else max_books - book_count
|
||||
limit = (
|
||||
shelf_max
|
||||
if shelf_max < (max_books - book_count)
|
||||
else max_books - book_count
|
||||
)
|
||||
shelf = user.shelf_set.get(identifier=preset)
|
||||
|
||||
shelf_books = shelf.shelfbook_set.order_by(
|
||||
'-updated_date'
|
||||
).all()[:limit]
|
||||
shelf_books = shelf.shelfbook_set.order_by("-updated_date").all()[:limit]
|
||||
if not shelf_books:
|
||||
continue
|
||||
shelf_preview = {
|
||||
'name': shelf.name,
|
||||
'identifier': shelf.identifier,
|
||||
'books': [s.book for s in shelf_books]
|
||||
"name": shelf.name,
|
||||
"identifier": shelf.identifier,
|
||||
"books": [s.book for s in shelf_books],
|
||||
}
|
||||
suggested_books.append(shelf_preview)
|
||||
book_count += len(shelf_preview['books'])
|
||||
book_count += len(shelf_preview["books"])
|
||||
return suggested_books
|
||||
|
Reference in New Issue
Block a user