-# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
-# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+# This file is part of Wolne Lektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Wolne Lektury. See NOTICE for more information.
#
import json
import os.path
+from urllib.request import urlopen
from django.conf import settings
+from django.core.files.base import ContentFile
from django.http import Http404, HttpResponse
from django.utils.decorators import method_decorator
from django.views.decorators.cache import never_cache
from catalogue.models.tag import prefetch_relations
from club.models import Membership
from club.permissions import IsClubMember
+from sortify import sortify
from wolnelektury.utils import re_escape
from .helpers import books_after, order_books
from . import serializers
def get_queryset(self):
category = self.kwargs['category']
tags = Tag.objects.filter(category=category).exclude(items=None).order_by('slug')
- if self.request.query_params.get('book_only') == 'true':
- tags = tags.filter(for_books=True)
- if self.request.GET.get('picture_only') == 'true':
- tags = filter(for_pictures=True)
after = self.request.query_params.get('after')
count = self.request.query_params.get('count')
def post(self, request, **kwargs):
data = json.loads(request.POST.get('data'))
fields = {
+ "name_pl": "name_pl",
"description_pl": "description_pl",
"plural": "plural",
"is_epoch_specific": "genre_epoch_specific",
"collective_noun": "collective_noun",
"adjective_feminine_singular": "adjective_feminine_singular",
"adjective_nonmasculine_plural": "adjective_nonmasculine_plural",
+ "genitive": "genitive",
+ "collective_noun": "collective_noun",
+ "gazeta_link": "gazeta_link",
+ "culturepl_link": "culturepl_link",
+ "wiki_link_pl": "wiki_link_pl",
+ "photo_attribution": "photo_attribution",
}
obj = self.get_object()
+ updated = set()
for data_field, model_field in fields.items():
- setattr(obj, model_field, data.get(data_field, getattr(obj, model_field)))
- obj.save(update_fields=fields.values(), quick=True)
+ value = data.get(data_field)
+ if value:
+ if obj.category == 'author' and model_field == 'name_pl':
+ obj.sort_key = sortify(value.lower())
+ updated.add('sort_key')
+ value = ' '.join(reversed([t.strip() for t in value.split(',', 1)]))
+ setattr(obj, model_field, value)
+ updated.add(model_field)
+ if data.get('photo'):
+ response = urlopen(data['photo'])
+ ext = response.headers.get('Content-Type', '').rsplit('/', 1)[-1]
+ obj.photo.save(
+ "{}.{}".format(self.kwargs['slug'], ext),
+ ContentFile(response.read()),
+ save=False,
+ )
+ updated.add('photo')
+
+ if obj.pk:
+ obj.save(update_fields=updated, quick=True)
+ else:
+ obj.save()
return Response({})