From 27b9221859c109bb9491017fab500ee1e0fc458d Mon Sep 17 00:00:00 2001 From: Julien Palard Date: Fri, 21 Apr 2023 14:32:45 +0200 Subject: [PATCH] Drop now unused Language model. --- paste/fixtures/initial.json | 1 - paste/forms.py | 4 +-- ..._paste_language_paste_filename_and_more.py | 29 ++++++++++++++++ paste/models.py | 30 ++-------------- paste/templates/base.html | 4 +-- paste/templates/paste/index.html | 16 ++++----- paste/templates/paste/show-pygments.html | 4 +-- paste/views.py | 34 +++++++++++-------- 8 files changed, 61 insertions(+), 61 deletions(-) delete mode 100644 paste/fixtures/initial.json create mode 100644 paste/migrations/0007_remove_paste_language_paste_filename_and_more.py diff --git a/paste/fixtures/initial.json b/paste/fixtures/initial.json deleted file mode 100644 index 332a4e4..0000000 --- a/paste/fixtures/initial.json +++ /dev/null @@ -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"}}] \ No newline at end of file diff --git a/paste/forms.py b/paste/forms.py index 423dfea..795fc38 100644 --- a/paste/forms.py +++ b/paste/forms.py @@ -1,7 +1,7 @@ from webtools import settings from django import forms from django.forms import ModelForm, CharField -from .models import Paste, Language +from .models import Paste class PasteForm(ModelForm): @@ -14,7 +14,7 @@ class PasteForm(ModelForm): class Meta: model = Paste fields = [ - "language", + "filename", "content", ] diff --git a/paste/migrations/0007_remove_paste_language_paste_filename_and_more.py b/paste/migrations/0007_remove_paste_language_paste_filename_and_more.py new file mode 100644 index 0000000..b34d824 --- /dev/null +++ b/paste/migrations/0007_remove_paste_language_paste_filename_and_more.py @@ -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", + ), + ] diff --git a/paste/models.py b/paste/models.py index 13b391d..8cb079e 100644 --- a/paste/models.py +++ b/paste/models.py @@ -7,42 +7,16 @@ from django.utils.translation import gettext_lazy as _ 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): """Paste object.""" - language = models.ForeignKey( - Language, default=14, on_delete=models.SET_NULL, null=True - ) + filename = models.CharField(max_length=255, default="") slug = models.SlugField(unique=True, editable=False) content = models.TextField( validators=[MaxLengthValidator(settings.PASTE["max_characters"])] ) 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) def compute_size(self): diff --git a/paste/templates/base.html b/paste/templates/base.html index a9fbffd..9694da1 100644 --- a/paste/templates/base.html +++ b/paste/templates/base.html @@ -3,18 +3,16 @@ - {% compress css %} {% endcompress %} {% block extrastyle %}{% endblock %} - {% block title %}{% endblock %} - {{ DISPLAY_NAME }} + {% block title %}{{ DISPLAY_NAME }}{% endblock %}
{% block content %}{% endblock %}
- {% block javascript %}{% endblock %} diff --git a/paste/templates/paste/index.html b/paste/templates/paste/index.html index b07be2f..71ad21a 100644 --- a/paste/templates/paste/index.html +++ b/paste/templates/paste/index.html @@ -1,23 +1,21 @@ -{% extends "base.html" %}{% load filters %} +{% extends "base.html" %} +{% load filters %} {% load i18n %} {% load compress %} -{% block title %}{% trans 'Paste something' %}{% endblock %} {% block content %}

Paf'Py

-Et Paf. +

Et Paf.

-Ce « pastebin-like » ne peut être utilisé qu'en ligne de commande, soit avec curl : +

Ce « pastebin-like » s’utilise en ligne de commande, soit avec curl :

-
curl {{ request.build_absolute_uri }} -Fpython=@hello.py
+
curl {{ request.build_absolute_uri }} -Fhello.py=@hello.py
 
-

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

- -

Le mieux est de l'utiliser avec une fonction bash :

+

Mais le mieux est de l'utiliser avec une fonction bash :

pafpy()
 {
-    curl {{request.build_absolute_uri}} -F"${1##*.}=@$1"
+    curl {{request.build_absolute_uri}} -F"$1=@$1"
 }
 
diff --git a/paste/templates/paste/show-pygments.html b/paste/templates/paste/show-pygments.html index c40ec47..7c77675 100644 --- a/paste/templates/paste/show-pygments.html +++ b/paste/templates/paste/show-pygments.html @@ -2,9 +2,7 @@ {% block extrastyle %} {% endblock %} - -{% block title %}{{ slug }}{% endblock %} -{% block nav %}{% endblock %} +{% block title %}{{ filename }}{% endblock %} {% block content %} {{ highlighted|safe }} {% endblock %} diff --git a/paste/views.py b/paste/views.py index 1d1f2b9..9884283 100644 --- a/paste/views.py +++ b/paste/views.py @@ -1,18 +1,19 @@ import json +from pathlib import Path 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 -from pygments import highlight +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 Language, Paste +from paste.models import Paste @csrf_exempt @@ -22,16 +23,16 @@ def index(request): 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, - ) + if not request.FILES: + return HttpResponse(json.dumps({"error": "Please provide a file."}, indent=4)) + (filename, the_file), *_ = request.FILES.items() + form = PasteForm( + { + "filename": filename, + "content": the_file.read().decode(), + }, + instance=paste, + ) if not form.is_valid(): return HttpResponse(json.dumps(form.errors, indent=4)) form.save() @@ -58,11 +59,14 @@ def show(request, slug): def render_pygments(request, paste, data): """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") - highlighted_content = highlight(paste.content, lexer, formatter) 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) return HttpResponse(rendered)