diff --git a/paste/renderers.py b/paste/renderers.py deleted file mode 100644 index 519a158..0000000 --- a/paste/renderers.py +++ /dev/null @@ -1,22 +0,0 @@ -from django.template import RequestContext -from django.http import HttpResponse -from django.template import loader -from pygments import highlight -from pygments.lexers import get_lexer_by_name -from pygments.formatters import HtmlFormatter - - -def render_pygments(request, paste, data): - """Renders Pygments template.""" - lexer = get_lexer_by_name(paste.language.slug) - formatter = HtmlFormatter(style="emacs") - highlighted_content = highlight(paste.content, lexer, formatter) - data["paste"] = paste - data["highlighted"] = highlighted_content - rendered = loader.render_to_string("paste/show-pygments.html", data, request) - return HttpResponse(rendered) - - -def render_raw(request, paste, data): - """Renders RAW content.""" - return HttpResponse(paste.content, content_type="text/plain") diff --git a/paste/templates/paste/index.html b/paste/templates/paste/index.html index 110dace..b07be2f 100644 --- a/paste/templates/paste/index.html +++ b/paste/templates/paste/index.html @@ -8,7 +8,7 @@ Et Paf. Ce « pastebin-like » ne peut être utilisé qu'en ligne de commande, soit avec curl : -
curl {{ absolute_index_url }} -Fpython=@hello.py
+
curl {{ request.build_absolute_uri }} -Fpython=@hello.py
 

Le nom, entre -F et = sert à choisir la coloration syntaxique.

@@ -17,13 +17,13 @@ Ce « pastebin-like » ne peut être utilisé qu'en ligne de commande, soit av
pafpy()
 {
-    curl {{absolute_index_url}} -F"${1##*.}=@$1"
+    curl {{request.build_absolute_uri}} -F"${1##*.}=@$1"
 }
 
Demo :
$ pafpy test.py
-{{absolute_index_url}}D91F1CA
+{{request.build_absolute_uri}}D91F1CA
 
{% endblock %} diff --git a/paste/templates/paste/show-pygments.html b/paste/templates/paste/show-pygments.html index 038f8f2..c40ec47 100644 --- a/paste/templates/paste/show-pygments.html +++ b/paste/templates/paste/show-pygments.html @@ -1,6 +1,6 @@ {% extends "base.html" %} {% block extrastyle %} - + {% endblock %} {% block title %}{{ slug }}{% endblock %} diff --git a/paste/urls.py b/paste/urls.py index 08b2157..109d940 100644 --- a/paste/urls.py +++ b/paste/urls.py @@ -7,7 +7,5 @@ from webtools import settings urlpatterns = [ path("", views.index, name="index"), path("static/", serve, {"document_root": settings.STATIC_ROOT}), - path("paste//", views.show, name="paste"), - path("paste/", views.show, name="paste"), path("", views.show, name="short_paste"), ] diff --git a/paste/views.py b/paste/views.py index ba15037..1d1f2b9 100644 --- a/paste/views.py +++ b/paste/views.py @@ -1,65 +1,72 @@ -from . import renderers +import json + +from django.http import HttpResponse, HttpResponseRedirect +from django.shortcuts import get_object_or_404, render +from django.template import RequestContext, loader from django.urls import reverse -from django.shortcuts import render, get_object_or_404 -from django.http import HttpResponseRedirect, HttpResponse from django.views.decorators.csrf import csrf_exempt -from .models import Paste, Language -from .forms import PasteForm +from pygments import highlight +from pygments.formatters import HtmlFormatter +from pygments.lexers import get_lexer_by_name from webtools import settings +from paste.forms import PasteForm +from paste.models import Language, Paste + @csrf_exempt def index(request): """Displays form.""" - data = {"menu": "index", "max_characters": settings.PASTE["max_characters"]} - if request.method == "POST": - paste = Paste() - paste.choose_slug() - if request.FILES: - for language_name, any_file in request.FILES.items(): - break - language = Language.by_name(language_name) - form = PasteForm( - { - "language": language.id, - "content": any_file.read().decode(), - }, - instance=paste, - ) - else: - form = PasteForm(request.POST, instance=paste) - if not form.is_valid(): - data["form"] = form - return render(request, "paste/index.html", data) - form.save() # Some logic added to overrided method, see forms.py - location = request.build_absolute_uri( - reverse("short_paste", kwargs={"slug": paste.slug}) + if request.method == "GET": + return render(request, "paste/index.html") + paste = Paste() + paste.choose_slug() + if request.FILES: + (language_name, the_file), *_ = request.FILES.items() + language = Language.by_name(language_name) + form = PasteForm( + { + "language": language.id, + "content": the_file.read().decode(), + }, + instance=paste, ) - return HttpResponseRedirect( - location, content=location + "\n", content_type="text/plain" - ) - data["form"] = PasteForm( - initial={ - "language": Language.by_name(settings.PASTE["default_language"]).id, - } + if not form.is_valid(): + return HttpResponse(json.dumps(form.errors, indent=4)) + form.save() + location = request.build_absolute_uri( + reverse("short_paste", kwargs={"slug": paste.slug}) + ) + return HttpResponseRedirect( + location, content=location + "\n", content_type="text/plain" ) - data["absolute_index_url"] = request.build_absolute_uri(reverse("index")) - return render(request, "paste/index.html", data) -def show(request, slug, renderer="pygments"): +def show(request, slug): """Display paste.""" - # Fetching object + paste = get_object_or_404(Paste, slug=slug) - data = {"slug": slug} - # Handling expiration - # Before rendering actions paste.incr_viewcount() - # Handling rendering modes - if not renderer or renderer not in settings.PASTE["enabled_renderers"]: - renderer = settings.PASTE["default_renderer"] - data["current_renderer"] = renderer - data["renderers"] = settings.PASTE["enabled_renderers"] - render_method = getattr(renderers, "render_%s" % renderer) - return render_method(request, paste, data) + + if "html" in request.headers["accept"]: + render_method = render_pygments + else: + render_method = render_raw + return render_method(request, paste, {"slug": slug}) + + +def render_pygments(request, paste, data): + """Renders Pygments template.""" + lexer = get_lexer_by_name(paste.language.slug) + formatter = HtmlFormatter(style="emacs") + highlighted_content = highlight(paste.content, lexer, formatter) + data["paste"] = paste + data["highlighted"] = highlighted_content + rendered = loader.render_to_string("paste/show-pygments.html", data, request) + return HttpResponse(rendered) + + +def render_raw(request, paste, data): + """Renders RAW content.""" + return HttpResponse(paste.content, content_type="text/plain") diff --git a/webtools/settings.py b/webtools/settings.py index 923bc03..6bee187 100644 --- a/webtools/settings.py +++ b/webtools/settings.py @@ -92,8 +92,6 @@ INSTALLED_APPS = ( PASTE = { "has_meta_table": False, - "enabled_renderers": ["pygments", "raw"], - "default_renderer": "pygments", "max_characters": 100000, "default_language": "Python", }