Hello lru_cache.

This commit is contained in:
Julien Palard 2023-04-21 14:47:30 +02:00
parent 27b9221859
commit 5fb85fb674
Signed by: mdk
GPG Key ID: 0EFC1AC1006886F8
4 changed files with 24 additions and 28 deletions

View File

@ -1,6 +1,8 @@
from webtools import settings
from django import forms
from django.forms import ModelForm, CharField
from django.forms import CharField, ModelForm
from webtools import settings
from .models import Paste

View File

@ -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 webtools import settings
from django.utils.translation import gettext_lazy as _
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):

View File

@ -1,9 +1,9 @@
from django.urls import path
from django.views.static import serve
from paste import views
from webtools import settings
urlpatterns = [
path("", views.index, name="index"),
path("static/<path>", serve, {"document_root": settings.STATIC_ROOT}),

View File

@ -1,19 +1,18 @@
import json
from pathlib import Path
from functools import lru_cache
import pygments
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.views.decorators.csrf import csrf_exempt
import pygments
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 Paste
from webtools import settings
@csrf_exempt
@ -51,26 +50,19 @@ def show(request, slug):
paste.incr_viewcount()
if "html" in request.headers["accept"]:
render_method = render_pygments
return HttpResponse(pygmentize(paste.filename, paste.content))
else:
render_method = render_raw
return render_method(request, paste, {"slug": slug})
return HttpResponse(paste.content, content_type="text/plain")
def render_pygments(request, paste, data):
"""Renders Pygments template."""
@lru_cache(1024)
def pygmentize(filename, filecontents):
try:
lexer = get_lexer_by_name(Path(paste.filename).suffix.strip("."))
lexer = get_lexer_by_name(filename.split(".")[-1])
except pygments.util.ClassNotFound:
lexer = get_lexer_by_name(settings.PASTE["default_language"])
formatter = HtmlFormatter(style="emacs")
data["paste"] = paste
data["filename"] = paste.filename
data["highlighted"] = pygments.highlight(paste.content, lexer, formatter)
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")
data = {}
data["filename"] = filename
data["highlighted"] = pygments.highlight(filecontents, lexer, formatter)
return loader.render_to_string("paste/show-pygments.html", data)