def new_screenshot(request, review_request_id): review_request = get_object_or_404(ReviewRequest, pk=review_request_id) if not review_request.is_mutable_by(request.user): return WebAPIResponseError(request, PERMISSION_DENIED) form_data = request.POST.copy() form = UploadScreenshotForm(form_data, request.FILES) if not form.is_valid(): return WebAPIResponseFormError(request, form) try: screenshot = form.create(request.FILES["path"], review_request) except ValueError, e: return WebAPIResponseError(request, INVALID_FORM_DATA, {"fields": {"path": [str(e)]}})
def create(self, request, *args, **kwargs): """Creates a new screenshot from an uploaded file. This accepts any standard image format (PNG, GIF, JPEG) and associates it with a draft of a review request. It is expected that the client will send the data as part of a :mimetype:`multipart/form-data` mimetype. The screenshot's name and content should be stored in the ``path`` field. A typical request may look like:: -- SoMe BoUnDaRy Content-Disposition: form-data; name=path; filename="foo.png" <PNG content here> -- SoMe BoUnDaRy -- """ try: review_request = \ resources.review_request.get_object(request, *args, **kwargs) except ObjectDoesNotExist: return DOES_NOT_EXIST if not review_request.is_mutable_by(request.user): return self._no_access_error(request.user) form_data = request.POST.copy() form = UploadScreenshotForm(form_data, request.FILES) if not form.is_valid(): return INVALID_FORM_DATA, { 'fields': self._get_form_errors(form), } try: screenshot = form.create(request.FILES['path'], review_request) except ValueError as e: return INVALID_FORM_DATA, { 'fields': { 'path': [six.text_type(e)], }, } return 201, { self.item_result_key: screenshot, }
def create(self, request, *args, **kwargs): """Creates a new screenshot from an uploaded file. This accepts any standard image format (PNG, GIF, JPEG) and associates it with a draft of a review request. It is expected that the client will send the data as part of a :mimetype:`multipart/form-data` mimetype. The screenshot's name and content should be stored in the ``path`` field. A typical request may look like:: -- SoMe BoUnDaRy Content-Disposition: form-data; name=path; filename="foo.png" <PNG content here> -- SoMe BoUnDaRy -- """ try: review_request = \ resources.review_request.get_object(request, *args, **kwargs) except ObjectDoesNotExist: return DOES_NOT_EXIST if not review_request.is_mutable_by(request.user): return self.get_no_access_error(request) form_data = request.POST.copy() form = UploadScreenshotForm(form_data, request.FILES) if not form.is_valid(): return INVALID_FORM_DATA, { 'fields': self._get_form_errors(form), } try: screenshot = form.create(request.FILES['path'], review_request) except ValueError as e: return INVALID_FORM_DATA, { 'fields': { 'path': [six.text_type(e)], }, } return 201, { self.item_result_key: screenshot, }