def problem_init_view(request, problem): problem = get_object_or_404(Problem, code=problem) if not request.user.is_superuser and not problem.is_editable_by(request.user): raise Http404() try: with problem_data_storage.open(os.path.join(problem.code, 'init.yml'), 'rb') as f: data = utf8text(f.read()).rstrip('\n') except IOError: raise Http404() return render(request, 'problem/yaml.html', { 'raw_source': data, 'highlighted_source': highlight_code(data, 'yaml'), 'title': _('Generated init.yml for %s') % problem.name, 'content_title': mark_safe(escape(_('Generated init.yml for %s')) % ( format_html('<a href="{1}">{0}</a>', problem.name, reverse('problem_detail', args=[problem.code])))) })
def problem_data_file(request, problem, path): object = get_object_or_404(Problem, code=problem) if not object.is_editable_by(request.user): raise Http404() response = HttpResponse() if hasattr(settings, 'DMOJ_PROBLEM_DATA_INTERNAL') and request.META.get('SERVER_SOFTWARE', '').startswith('nginx/'): response['X-Accel-Redirect'] = '%s/%s/%s' % (settings.DMOJ_PROBLEM_DATA_INTERNAL, problem, path) else: try: with problem_data_storage.open(os.path.join(problem, path), 'rb') as f: response.content = f.read() except IOError: raise Http404() type, encoding = mimetypes.guess_type(path) response['Content-Type'] = type or 'application/octet-stream' if encoding is not None: response['Content-Encoding'] = encoding return response