def post(self, request, *args, **kwargs): if not request.FILES: return Response( {"message": "You must supply at least one file to upload"}, status=status.HTTP_400_BAD_REQUEST ) response = [] current_user = User.objects.get(pk=request.user.id) start_seq = request.DATA.get("page_order", None) if not start_seq: return Response( {"message": "The start sequence for the page ordering may not be empty."}, status=status.HTTP_400_BAD_REQUEST, ) project = request.DATA.get("project", None) if not project: return Response( {"message": "You must supply a project identifier for the pages."}, status=status.HTTP_400_BAD_REQUEST ) value = urlparse.urlparse(project).path try: p = resolve(value) except: return Response({"message": "Could not resolve {0} to a Project"}, status=status.HTTP_400_BAD_REQUEST) try: project = Project.objects.get(pk=p.kwargs.get("pk")) except: return Response( {"message": "You must specify an existing project for this page"}, status=status.HTTP_400_BAD_REQUEST ) for seq, fileobj in enumerate(request.FILES.getlist("files"), start=int(start_seq)): page_obj = Page() page_obj.name = fileobj.name page_obj.project = project page_obj.page_order = seq page_obj.creator = current_user page_obj.save() page_obj.page_image.save(upload_path(page_obj, fileobj.name), fileobj) # Create a chain that will first ensure the # file is converted to PNG and then create the thumbnails. # The ensure_compatible() method returns the page_object # as the first (invisible) argument to the create_thumbnails # method. res = celery.chain(ensure_compatible.s(page_obj), create_thumbnails.s(), processed.s()) res.apply_async() try: d = PageSerializer(page_obj).data response.append(d) except: return Response({"message": "Could not serialize page object"}, status=status.HTTP_400_BAD_REQUEST) return Response({"pages": response}, status=status.HTTP_201_CREATED)
def default_on_success(self, retval, task_id, args, kwargs): # create thumbnails and set runjob status to HAS_FINISHED after successfully processing an image object. result = Result.objects.get(pk=retval) result.run_job.status = RunJobStatus.HAS_FINISHED result.run_job.error_summary = "" result.run_job.error_details = "" save_instance(result.run_job) res = create_thumbnails.s(result) res.link(processed.s()) res.apply_async()
def post(self, request, *args, **kwargs): if not request.FILES: return Response( {'message': "You must supply at least one file to upload"}, status=status.HTTP_400_BAD_REQUEST) response = [] current_user = User.objects.get(pk=request.user.id) start_seq = request.DATA.get('page_order', None) if not start_seq: return Response( { 'message': "The start sequence for the page ordering may not be empty." }, status=status.HTTP_400_BAD_REQUEST) project = request.DATA.get('project', None) if not project: return Response( { "message": "You must supply a project identifier for the pages." }, status=status.HTTP_400_BAD_REQUEST) value = urlparse.urlparse(project).path try: p = resolve(value) except: return Response({"message": "Could not resolve {0} to a Project"}, status=status.HTTP_400_BAD_REQUEST) try: project = Project.objects.get(pk=p.kwargs.get("pk")) except: return Response( { "message": "You must specify an existing project for this page" }, status=status.HTTP_400_BAD_REQUEST) for seq, fileobj in enumerate(request.FILES.getlist('files'), start=int(start_seq)): page_obj = Page() page_obj.name = fileobj.name page_obj.project = project page_obj.page_order = seq page_obj.creator = current_user page_obj.save() page_obj.page_image.save(upload_path(page_obj, fileobj.name), fileobj) # Create a chain that will first ensure the # file is converted to PNG and then create the thumbnails. # The ensure_compatible() method returns the page_object # as the first (invisible) argument to the create_thumbnails # method. res = celery.chain(ensure_compatible.s(page_obj), create_thumbnails.s(), processed.s()) res.apply_async() try: d = PageSerializer(page_obj).data response.append(d) except: return Response({"message": "Could not serialize page object"}, status=status.HTTP_400_BAD_REQUEST) return Response({"pages": response}, status=status.HTTP_201_CREATED)