Drop now unused Language model.

This commit is contained in:
Julien Palard 2023-04-21 14:32:45 +02:00
parent bc75975da3
commit 27b9221859
Signed by: mdk
GPG Key ID: 0EFC1AC1006886F8
8 changed files with 61 additions and 61 deletions

View File

@ -1 +0,0 @@
[{"model": "paste.language", "pk": 1, "fields": {"name": "Bash (shell)", "slug": "bash"}}, {"model": "paste.language", "pk": 2, "fields": {"name": "C#", "slug": "csharp"}}, {"model": "paste.language", "pk": 3, "fields": {"name": "C", "slug": "c"}}, {"model": "paste.language", "pk": 4, "fields": {"name": "C++", "slug": "cpp"}}, {"model": "paste.language", "pk": 5, "fields": {"name": "CSS", "slug": "css"}}, {"model": "paste.language", "pk": 6, "fields": {"name": "Diff", "slug": "diff"}}, {"model": "paste.language", "pk": 7, "fields": {"name": "Go", "slug": "go"}}, {"model": "paste.language", "pk": 8, "fields": {"name": "HTML", "slug": "html"}}, {"model": "paste.language", "pk": 9, "fields": {"name": "Java", "slug": "java"}}, {"model": "paste.language", "pk": 10, "fields": {"name": "Javascript", "slug": "javascript"}}, {"model": "paste.language", "pk": 11, "fields": {"name": "Perl", "slug": "perl"}}, {"model": "paste.language", "pk": 12, "fields": {"name": "PHP", "slug": "php"}}, {"model": "paste.language", "pk": 13, "fields": {"name": "Plain text", "slug": "text"}}, {"model": "paste.language", "pk": 14, "fields": {"name": "Python", "slug": "python"}}, {"model": "paste.language", "pk": 15, "fields": {"name": "Ruby", "slug": "ruby"}}, {"model": "paste.language", "pk": 16, "fields": {"name": "SQL", "slug": "sql"}}, {"model": "paste.language", "pk": 17, "fields": {"name": "XML", "slug": "xml"}}, {"model": "paste.language", "pk": 18, "fields": {"name": "YAML", "slug": "yaml"}}]

View File

@ -1,7 +1,7 @@
from webtools import settings from webtools import settings
from django import forms from django import forms
from django.forms import ModelForm, CharField from django.forms import ModelForm, CharField
from .models import Paste, Language from .models import Paste
class PasteForm(ModelForm): class PasteForm(ModelForm):
@ -14,7 +14,7 @@ class PasteForm(ModelForm):
class Meta: class Meta:
model = Paste model = Paste
fields = [ fields = [
"language", "filename",
"content", "content",
] ]

View File

@ -0,0 +1,29 @@
# Generated by Django 4.2 on 2023-04-21 09:18
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("paste", "0006_remove_paste_title"),
]
operations = [
migrations.RemoveField(
model_name="paste",
name="language",
),
migrations.AddField(
model_name="paste",
name="filename",
field=models.CharField(default="", max_length=255),
),
migrations.AlterField(
model_name="paste",
name="paste_time",
field=models.DateTimeField(auto_now_add=True),
),
migrations.DeleteModel(
name="Language",
),
]

View File

@ -7,42 +7,16 @@ from django.utils.translation import gettext_lazy as _
import shortuuid import shortuuid
class Language(models.Model):
"""Language object."""
name = models.CharField(max_length=200, unique=True)
slug = models.SlugField(max_length=200, unique=True)
@classmethod
def by_name(cls, name):
language = cls.objects.filter(name__icontains=name).first()
if not language:
language = cls.objects.filter(
name__iexact=settings.PASTE["default_language"]
).first()
return language
def __unicode__(self):
"""String representation."""
return _(self.name)
def __str__(self):
return str(_(self.name))
class Paste(models.Model): class Paste(models.Model):
"""Paste object.""" """Paste object."""
language = models.ForeignKey( filename = models.CharField(max_length=255, default="")
Language, default=14, on_delete=models.SET_NULL, null=True
)
slug = models.SlugField(unique=True, editable=False) slug = models.SlugField(unique=True, editable=False)
content = models.TextField( content = models.TextField(
validators=[MaxLengthValidator(settings.PASTE["max_characters"])] validators=[MaxLengthValidator(settings.PASTE["max_characters"])]
) )
size = models.IntegerField(default=0, editable=False) size = models.IntegerField(default=0, editable=False)
paste_time = models.DateTimeField(default=datetime.now, editable=False) paste_time = models.DateTimeField(auto_now_add=True)
viewcount = models.IntegerField(default=0, editable=False) viewcount = models.IntegerField(default=0, editable=False)
def compute_size(self): def compute_size(self):

View File

@ -3,18 +3,16 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
{% compress css %} {% compress css %}
<link href="/static/css/font-awesome.min.css" rel="stylesheet"> <link href="/static/css/font-awesome.min.css" rel="stylesheet">
<link href="/static/css/pygments-highlight.css" rel="stylesheet"> <link href="/static/css/pygments-highlight.css" rel="stylesheet">
{% endcompress %} {% endcompress %}
{% block extrastyle %}{% endblock %} {% block extrastyle %}{% endblock %}
<title>{% block title %}{% endblock %} - {{ DISPLAY_NAME }}</title> <title>{% block title %}{{ DISPLAY_NAME }}{% endblock %}</title>
</head> </head>
<body> <body>
<div> <div>
{% block content %}{% endblock %} {% block content %}{% endblock %}
</div> </div>
{% block javascript %}{% endblock %}
</body> </body>
</html> </html>

View File

@ -1,23 +1,21 @@
{% extends "base.html" %}{% load filters %} {% extends "base.html" %}
{% load filters %}
{% load i18n %} {% load i18n %}
{% load compress %} {% load compress %}
{% block title %}{% trans 'Paste something' %}{% endblock %}
{% block content %} {% block content %}
<h1>Paf'Py</h1> <h1>Paf'Py</h1>
Et Paf. <p>Et Paf.</p>
Ce « pastebin-like » ne peut être utilisé qu'en ligne de commande, soit avec <tt>curl</tt> : <p>Ce « pastebin-like » sutilise en ligne de commande, soit avec <tt>curl</tt> :</p>
<div class="highlight"><pre><span></span>curl {{ request.build_absolute_uri }} <span class="o">-F</span>python<span class="o">=</span>@hello.py <div class="highlight"><pre><span></span>curl {{ request.build_absolute_uri }} <span class="o">-F</span>hello.py<span class="o">=</span>@hello.py
</pre></div> </pre></div>
<p>Le nom, entre <tt>-F</tt> et <tt>=</tt> sert à choisir la coloration syntaxique.</p> <p>Mais le mieux est de l'utiliser avec une fonction <tt>bash</tt> :</p>
<p>Le mieux est de l'utiliser avec une fonction <tt>bash</tt> :</p>
<div class="highlight"><pre><span></span>pafpy<span class="o">()</span> <div class="highlight"><pre><span></span>pafpy<span class="o">()</span>
<span class="o">{</span> <span class="o">{</span>
curl {{request.build_absolute_uri}} -F<span class="s2">&quot;</span><span class="si">${</span><span class="nv">1</span><span class="p">##*.</span><span class="si">}</span><span class="s2">=@</span><span class="nv">$1</span><span class="s2">&quot;</span> curl {{request.build_absolute_uri}} -F<span class="s2">&quot;</span><span class="nv">$1</span><span class="s2">=@</span><span class="nv">$1</span><span class="s2">&quot;</span>
<span class="o">}</span> <span class="o">}</span>
</pre></div> </pre></div>

View File

@ -2,9 +2,7 @@
{% block extrastyle %} {% block extrastyle %}
<link href="/static/css/pasteque.css" rel="stylesheet"> <link href="/static/css/pasteque.css" rel="stylesheet">
{% endblock %} {% endblock %}
{% block title %}{{ filename }}{% endblock %}
{% block title %}{{ slug }}{% endblock %}
{% block nav %}{% endblock %}
{% block content %} {% block content %}
{{ highlighted|safe }} {{ highlighted|safe }}
{% endblock %} {% endblock %}

View File

@ -1,18 +1,19 @@
import json import json
from pathlib import Path
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
from pygments import highlight 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 webtools import settings
from paste.forms import PasteForm from paste.forms import PasteForm
from paste.models import Language, Paste from paste.models import Paste
@csrf_exempt @csrf_exempt
@ -22,16 +23,16 @@ def index(request):
return render(request, "paste/index.html") return render(request, "paste/index.html")
paste = Paste() paste = Paste()
paste.choose_slug() paste.choose_slug()
if request.FILES: if not request.FILES:
(language_name, the_file), *_ = request.FILES.items() return HttpResponse(json.dumps({"error": "Please provide a file."}, indent=4))
language = Language.by_name(language_name) (filename, the_file), *_ = request.FILES.items()
form = PasteForm( form = PasteForm(
{ {
"language": language.id, "filename": filename,
"content": the_file.read().decode(), "content": the_file.read().decode(),
}, },
instance=paste, instance=paste,
) )
if not form.is_valid(): if not form.is_valid():
return HttpResponse(json.dumps(form.errors, indent=4)) return HttpResponse(json.dumps(form.errors, indent=4))
form.save() form.save()
@ -58,11 +59,14 @@ def show(request, slug):
def render_pygments(request, paste, data): def render_pygments(request, paste, data):
"""Renders Pygments template.""" """Renders Pygments template."""
lexer = get_lexer_by_name(paste.language.slug) try:
lexer = get_lexer_by_name(Path(paste.filename).suffix.strip("."))
except pygments.util.ClassNotFound:
lexer = get_lexer_by_name(settings.PASTE["default_language"])
formatter = HtmlFormatter(style="emacs") formatter = HtmlFormatter(style="emacs")
highlighted_content = highlight(paste.content, lexer, formatter)
data["paste"] = paste data["paste"] = paste
data["highlighted"] = highlighted_content data["filename"] = paste.filename
data["highlighted"] = pygments.highlight(paste.content, lexer, formatter)
rendered = loader.render_to_string("paste/show-pygments.html", data, request) rendered = loader.render_to_string("paste/show-pygments.html", data, request)
return HttpResponse(rendered) return HttpResponse(rendered)