2022-12-15 17:29:35 -05:00
|
|
|
import logging
|
|
|
|
from django.shortcuts import render, get_object_or_404, redirect, reverse
|
|
|
|
from django.contrib.auth.decorators import login_required, permission_required
|
|
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from django.http import HttpResponseBadRequest, HttpResponseServerError, HttpResponse
|
|
|
|
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
|
|
|
|
from django.db import IntegrityError, transaction
|
|
|
|
from django.db.models import Count
|
|
|
|
from django.utils import timezone
|
|
|
|
from django.core.paginator import Paginator
|
|
|
|
from mastodon import mastodon_request_included
|
|
|
|
from mastodon.models import MastodonApplication
|
|
|
|
from mastodon.api import share_mark, share_review
|
|
|
|
from .models import *
|
|
|
|
# from .forms import *
|
|
|
|
# from .forms import BookMarkStatusTranslator
|
|
|
|
from django.conf import settings
|
|
|
|
from collection.models import CollectionItem
|
|
|
|
from common.scraper import get_scraper_by_url, get_normalized_url
|
|
|
|
from django.utils.baseconv import base62
|
|
|
|
from journal.models import Mark
|
2022-12-23 00:08:42 -05:00
|
|
|
from journal.models import query_visible
|
2022-12-07 19:09:05 -05:00
|
|
|
|
2022-12-15 17:29:35 -05:00
|
|
|
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
2022-12-17 02:04:12 -05:00
|
|
|
def retrieve_by_uuid(request, item_uuid):
|
|
|
|
item = get_object_or_404(Item, uid=item_uuid)
|
|
|
|
return redirect(item.url)
|
|
|
|
|
|
|
|
|
2022-12-16 01:08:10 -05:00
|
|
|
def retrieve(request, item_path, item_uid):
|
2022-12-15 17:29:35 -05:00
|
|
|
if request.method == 'GET':
|
2022-12-16 01:08:10 -05:00
|
|
|
item = get_object_or_404(Item, uid=base62.decode(item_uid))
|
|
|
|
item_url = f'/{item_path}/{item_uid}/'
|
|
|
|
if item.url != item_url:
|
|
|
|
return redirect(item.url)
|
2022-12-15 17:29:35 -05:00
|
|
|
mark = None
|
|
|
|
review = None
|
|
|
|
mark_list = None
|
|
|
|
review_list = None
|
|
|
|
mark_list_more = None
|
|
|
|
review_list_more = None
|
|
|
|
collection_list = []
|
|
|
|
mark_form = None
|
|
|
|
if request.user.is_authenticated:
|
|
|
|
mark = Mark(request.user, item)
|
2022-12-23 00:08:42 -05:00
|
|
|
_logger.info(mark.rating)
|
2022-12-15 17:29:35 -05:00
|
|
|
review = mark.review
|
2022-12-23 00:08:42 -05:00
|
|
|
collection_list = item.collections.all().filter(query_visible(request.user)).annotate(like_counts=Count('likes')).order_by('-like_counts')
|
2022-12-15 17:29:35 -05:00
|
|
|
|
|
|
|
return render(request, item.class_name + '.html', {
|
|
|
|
'item': item,
|
|
|
|
'mark': mark,
|
|
|
|
'review': review,
|
|
|
|
'mark_form': mark_form,
|
|
|
|
'mark_list': mark_list,
|
|
|
|
'mark_list_more': mark_list_more,
|
|
|
|
'review_list': review_list,
|
|
|
|
'review_list_more': review_list_more,
|
|
|
|
'collection_list': collection_list,
|
|
|
|
}
|
|
|
|
)
|
|
|
|
else:
|
|
|
|
logger.warning('non-GET method at /book/<id>')
|
|
|
|
return HttpResponseBadRequest()
|