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",
}