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 _make_review_request_context(review_request, extra_context): """Returns a dictionary for template contexts used for review requests. The dictionary will contain the common data that is used for all review request-related pages (the review request detail page, the diff viewer, and the screenshot pages). For convenience, extra data can be passed to this dictionary. """ if review_request.repository: upload_diff_form = UploadDiffForm(review_request) scmtool = review_request.repository.get_scmtool() else: upload_diff_form = None scmtool = None return dict( { 'review_request': review_request, 'upload_diff_form': upload_diff_form, 'upload_screenshot_form': UploadScreenshotForm(), 'file_attachment_form': UploadFileForm(), 'comment_file_form': CommentFileForm(), 'scmtool': scmtool, }, **extra_context)
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, }
def make_review_request_context(request, review_request, extra_context={}): """Returns a dictionary for template contexts used for review requests. The dictionary will contain the common data that is used for all review request-related pages (the review request detail page, the diff viewer, and the screenshot pages). For convenience, extra data can be passed to this dictionary. """ if review_request.repository: upload_diff_form = UploadDiffForm(review_request, request=request) scmtool = review_request.repository.get_scmtool() else: upload_diff_form = None scmtool = None if 'blocks' not in extra_context: extra_context['blocks'] = list(review_request.blocks.all()) return dict( { 'mutable_by_user': review_request.is_mutable_by(request.user), 'status_mutable_by_user': review_request.is_status_mutable_by(request.user), 'review_request': review_request, 'upload_diff_form': upload_diff_form, 'upload_screenshot_form': UploadScreenshotForm(), 'file_attachment_form': UploadFileForm(), 'comment_file_form': CommentFileForm(), 'scmtool': scmtool, }, **extra_context)