Hello lru_cache.
This commit is contained in:
parent
27b9221859
commit
5fb85fb674
|
@ -1,6 +1,8 @@
|
||||||
from webtools import settings
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.forms import ModelForm, CharField
|
from django.forms import CharField, ModelForm
|
||||||
|
|
||||||
|
from webtools import settings
|
||||||
|
|
||||||
from .models import Paste
|
from .models import Paste
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
from django.db import models
|
|
||||||
from django.core.validators import MaxLengthValidator
|
|
||||||
from django.utils import timezone
|
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from webtools import settings
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
import shortuuid
|
import shortuuid
|
||||||
|
from django.core.validators import MaxLengthValidator
|
||||||
|
from django.db import models
|
||||||
|
from django.utils import timezone
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
from webtools import settings
|
||||||
|
|
||||||
|
|
||||||
class Paste(models.Model):
|
class Paste(models.Model):
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
from django.urls import path
|
from django.urls import path
|
||||||
from django.views.static import serve
|
from django.views.static import serve
|
||||||
|
|
||||||
from paste import views
|
from paste import views
|
||||||
from webtools import settings
|
from webtools import settings
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("", views.index, name="index"),
|
path("", views.index, name="index"),
|
||||||
path("static/<path>", serve, {"document_root": settings.STATIC_ROOT}),
|
path("static/<path>", serve, {"document_root": settings.STATIC_ROOT}),
|
||||||
|
|
|
@ -1,19 +1,18 @@
|
||||||
import json
|
import json
|
||||||
from pathlib import Path
|
from functools import lru_cache
|
||||||
|
|
||||||
|
import pygments
|
||||||
from django.http import HttpResponse, HttpResponseRedirect
|
from django.http import HttpResponse, HttpResponseRedirect
|
||||||
from django.shortcuts import get_object_or_404, render
|
from django.shortcuts import get_object_or_404, render
|
||||||
from django.template import RequestContext, loader
|
from django.template import RequestContext, loader
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
import pygments
|
|
||||||
from pygments.formatters import HtmlFormatter
|
from pygments.formatters import HtmlFormatter
|
||||||
from pygments.lexers import get_lexer_by_name
|
from pygments.lexers import get_lexer_by_name
|
||||||
|
|
||||||
from webtools import settings
|
|
||||||
|
|
||||||
from paste.forms import PasteForm
|
from paste.forms import PasteForm
|
||||||
from paste.models import Paste
|
from paste.models import Paste
|
||||||
|
from webtools import settings
|
||||||
|
|
||||||
|
|
||||||
@csrf_exempt
|
@csrf_exempt
|
||||||
|
@ -51,26 +50,19 @@ def show(request, slug):
|
||||||
paste.incr_viewcount()
|
paste.incr_viewcount()
|
||||||
|
|
||||||
if "html" in request.headers["accept"]:
|
if "html" in request.headers["accept"]:
|
||||||
render_method = render_pygments
|
return HttpResponse(pygmentize(paste.filename, paste.content))
|
||||||
else:
|
else:
|
||||||
render_method = render_raw
|
return HttpResponse(paste.content, content_type="text/plain")
|
||||||
return render_method(request, paste, {"slug": slug})
|
|
||||||
|
|
||||||
|
|
||||||
def render_pygments(request, paste, data):
|
@lru_cache(1024)
|
||||||
"""Renders Pygments template."""
|
def pygmentize(filename, filecontents):
|
||||||
try:
|
try:
|
||||||
lexer = get_lexer_by_name(Path(paste.filename).suffix.strip("."))
|
lexer = get_lexer_by_name(filename.split(".")[-1])
|
||||||
except pygments.util.ClassNotFound:
|
except pygments.util.ClassNotFound:
|
||||||
lexer = get_lexer_by_name(settings.PASTE["default_language"])
|
lexer = get_lexer_by_name(settings.PASTE["default_language"])
|
||||||
formatter = HtmlFormatter(style="emacs")
|
formatter = HtmlFormatter(style="emacs")
|
||||||
data["paste"] = paste
|
data = {}
|
||||||
data["filename"] = paste.filename
|
data["filename"] = filename
|
||||||
data["highlighted"] = pygments.highlight(paste.content, lexer, formatter)
|
data["highlighted"] = pygments.highlight(filecontents, lexer, formatter)
|
||||||
rendered = loader.render_to_string("paste/show-pygments.html", data, request)
|
return loader.render_to_string("paste/show-pygments.html", data)
|
||||||
return HttpResponse(rendered)
|
|
||||||
|
|
||||||
|
|
||||||
def render_raw(request, paste, data):
|
|
||||||
"""Renders RAW content."""
|
|
||||||
return HttpResponse(paste.content, content_type="text/plain")
|
|
||||||
|
|
Loading…
Reference in New Issue