Got api work import working

This commit is contained in:
Tris Forster
2023-03-02 07:09:38 +11:00
parent f1757be96e
commit a892b0bc41
2 changed files with 31 additions and 10 deletions
+8 -4
View File
@@ -41,8 +41,9 @@ from library.models import Collection, Work, Document, Section, WorkMeta
import requests
from io import BytesIO
import tempfile
import urllib
import shutil
import os.path
from django.db import transaction
from django.core.files.uploadedfile import TemporaryUploadedFile
@@ -70,7 +71,7 @@ class SectionSerializer(serializers.ModelSerializer):
return f"{instance.tag}:{start}:{end}"
def to_internal_value(self, data):
tag, section_type, start, end = data.split(":")
tag, start, end = data.split(":")
try:
start = int(start)
except:
@@ -134,8 +135,11 @@ class WorkSerializer(serializers.ModelSerializer):
for d in docs:
sections = d.pop('sections', [])
url = urllib.parse.urlparse(d['upload'])
filename = os.path.basename(url.path)
r = requests.get(d['upload'], stream=True)
f = TemporaryUploadedFile(d['upload'], r.headers['content-type'], r.headers['content-length'], r.encoding)
f = TemporaryUploadedFile(filename, r.headers['content-type'], r.headers['content-length'], r.encoding)
shutil.copyfileobj(r.raw, f.file)
r.close()
d['upload'] = f
@@ -186,7 +190,7 @@ class WorkImportView(AuthorizedResourceMixin, generics.CreateAPIView):
serializer_class = WorkSerializer
def perform_create(self, serializer):
serializer.save(collection_id=self.kwargs['pk'])
serializer.save(collection_id=self.kwargs['collection'])
class CollectionImportView(AuthorizedResourceMixin, generics.CreateAPIView):
serializer_class = CollectionSerializer