def file(self, request, **kwargs): obj = self.get_object() if request.method == 'GET': fmt = self.format_kwarg or request.query_params.get('format') return download_translation_file(obj, fmt) if (not can_upload_translation(request.user, obj) or obj.is_locked(request.user)): raise PermissionDenied() if 'file' not in request.data: raise ParseError('Missing file parameter') not_found, skipped, accepted, total = obj.merge_upload( request, request.data['file'], False) return Response( data={ 'not_found': not_found, 'skipped': skipped, 'accepted': accepted, 'total': total, # Compatibility with older less detailed API 'result': accepted > 0, 'count': total, })
def file(self, request, **kwargs): obj = self.get_object() project = obj.subproject.project if request.method == 'GET': fmt = self.format_kwarg or request.query_params.get('format') return download_translation_file(obj, fmt) if (not can_upload_translation(request.user, obj) or obj.subproject.locked): raise PermissionDenied() if 'file' not in request.data: raise ParseError('Missing file parameter') serializer = UploadRequestSerializer(data=request.data) serializer.is_valid(raise_exception=True) if (serializer.validated_data['overwrite'] and not can_overwrite_translation(request.user, project)): raise PermissionDenied() not_found, skipped, accepted, total = obj.merge_upload( request, request.data['file'], serializer.validated_data['overwrite'], ) return Response( data={ 'not_found': not_found, 'skipped': skipped, 'accepted': accepted, 'total': total, # Compatibility with older less detailed API 'result': accepted > 0, 'count': total, })
def file(self, request, **kwargs): obj = self.get_object() project = obj.subproject.project if request.method == 'GET': fmt = self.format_kwarg or request.query_params.get('format') return download_translation_file(obj, fmt) if (not can_upload_translation(request.user, obj) or obj.is_locked(request.user)): raise PermissionDenied() if 'file' not in request.data: raise ParseError('Missing file parameter') serializer = UploadRequestSerializer(data=request.data) serializer.is_valid(raise_exception=True) if (serializer.validated_data['overwrite'] and not can_overwrite_translation(request.user, project)): raise PermissionDenied() not_found, skipped, accepted, total = obj.merge_upload( request, request.data['file'], serializer.validated_data['overwrite'], ) return Response(data={ 'not_found': not_found, 'skipped': skipped, 'accepted': accepted, 'total': total, # Compatibility with older less detailed API 'result': accepted > 0, 'count': total, })
def upload_translation(request, project, component, lang): """Handling of translation uploads.""" obj = get_translation(request, project, component, lang) if not can_upload_translation(request.user, obj): raise PermissionDenied() # Check method and lock if obj.component.locked: messages.error(request, _('Access denied.')) return redirect(obj) # Get correct form handler based on permissions form = get_upload_form(request.user, obj, request.POST, request.FILES) # Check form validity if not form.is_valid(): messages.error(request, _('Please fix errors in the form.')) show_form_errors(request, form) return redirect(obj) # Create author name author = None if (can_author_translation(request.user, obj.component.project) and form.cleaned_data['author_name'] != '' and form.cleaned_data['author_email'] != ''): author = '{0} <{1}>'.format(form.cleaned_data['author_name'], form.cleaned_data['author_email']) # Check for overwriting overwrite = False if can_overwrite_translation(request.user, obj.component.project): overwrite = form.cleaned_data['upload_overwrite'] # Do actual import try: not_found, skipped, accepted, total = obj.merge_upload( request, request.FILES['file'], overwrite, author, merge_header=form.cleaned_data['merge_header'], method=form.cleaned_data['method'], fuzzy=form.cleaned_data['fuzzy'], ) if total == 0: message = _('No strings were imported from the uploaded file.') else: message = ungettext( 'Processed {0} string from the uploaded files ' '(skipped: {1}, not found: {2}, updated: {3}).', 'Processed {0} strings from the uploaded files ' '(skipped: {1}, not found: {2}, updated: {3}).', total).format(total, skipped, not_found, accepted) if accepted == 0: messages.warning(request, message) else: messages.success(request, message) except Exception as error: messages.error(request, _('File content merge failed: %s') % force_text(error)) report_error(error, sys.exc_info(), request) return redirect(obj)
def upload_translation(request, project, subproject, lang): """Handling of translation uploads.""" obj = get_translation(request, project, subproject, lang) if not can_upload_translation(request.user, obj): raise PermissionDenied() # Check method and lock if obj.is_locked(request.user): messages.error(request, _('Access denied.')) return redirect(obj) # Get correct form handler based on permissions form = get_upload_form( request.user, obj, request.POST, request.FILES ) # Check form validity if not form.is_valid(): messages.error(request, _('Please fix errors in the form.')) show_form_errors(request, form) return redirect(obj) # Create author name author = None if (can_author_translation(request.user, obj.subproject.project) and form.cleaned_data['author_name'] != '' and form.cleaned_data['author_email'] != ''): author = '{0} <{1}>'.format( form.cleaned_data['author_name'], form.cleaned_data['author_email'] ) # Check for overwriting overwrite = False if can_overwrite_translation(request.user, obj.subproject.project): overwrite = form.cleaned_data['upload_overwrite'] # Do actual import try: not_found, skipped, accepted, total = obj.merge_upload( request, request.FILES['file'], overwrite, author, merge_header=form.cleaned_data['merge_header'], method=form.cleaned_data['method'], fuzzy=form.cleaned_data['fuzzy'], ) if total == 0: message = _('No strings were imported from the uploaded file.') else: message = ungettext( 'Processed {0} string from the uploaded files ' '(skipped: {1}, not found: {2}, updated: {3}).', 'Processed {0} strings from the uploaded files ' '(skipped: {1}, not found: {2}, updated: {3}).', total ).format(total, skipped, not_found, accepted) if accepted == 0: messages.warning(request, message) else: messages.success(request, message) except Exception as error: messages.error( request, _('File content merge failed: %s') % force_text(error) ) report_error(error, sys.exc_info(), request) return redirect(obj)