From e80f2f10dd954c9e2ce4fc61d28883e4a7a21b9a Mon Sep 17 00:00:00 2001 From: Julien Palard Date: Sun, 6 May 2018 23:19:49 +0200 Subject: [PATCH] Bump to Python 3 and Django 2. --- paste/forms.py | 11 ++++------- paste/models.py | 7 +++++-- paste/renderers.py | 9 +++------ paste/templates/base.html | 16 ++++++++-------- paste/tools.py | 2 +- paste/urls.py | 9 +++++---- paste/views.py | 16 ++++++++-------- share/requirements.pip | 12 ++++++------ webtools/settings.py | 22 ++++++++++++++++++---- webtools/urls.py | 8 ++++---- 10 files changed, 62 insertions(+), 50 deletions(-) diff --git a/paste/forms.py b/paste/forms.py index 29fe0a8..06713a3 100644 --- a/paste/forms.py +++ b/paste/forms.py @@ -1,17 +1,14 @@ from django.forms import ModelForm -from models import Paste, Language - - -class LanguageForm(ModelForm): - """Language model form.""" - class Meta: - model = Language +from .models import Paste, Language class PasteForm(ModelForm): """Paste model form.""" class Meta: model = Paste + fields = ['language', 'title', 'password', 'content', 'lifetime', + 'lifecount', 'private'] + def save(self, commit=True): """Overwrites save method.""" diff --git a/paste/models.py b/paste/models.py index b1a1aa9..56aff2b 100644 --- a/paste/models.py +++ b/paste/models.py @@ -27,16 +27,19 @@ class Language(models.Model): """String representation.""" return _(self.name) + def __str__(self): + return str(_(self.name)) + class Paste(models.Model): """Paste object.""" - language = models.ForeignKey(Language, default=13) + language = models.ForeignKey(Language, default=13, on_delete=models.SET_NULL, null=True) slug = models.SlugField(unique=True, editable=False) title = models.CharField(max_length=200, blank=True) content = models.TextField(validators=[MaxLengthValidator(settings.MAX_CHARACTERS)]) size = models.IntegerField(default=0, editable=False) paste_time = models.DateTimeField(default=datetime.now, editable=False) - paste_ip = models.IPAddressField(editable=False) + paste_ip = models.GenericIPAddressField(editable=False) paste_agent = models.CharField(max_length=200, editable=False) lifetime = models.IntegerField(default=0, choices=EXPIRE_CHOICES) lifecount = models.IntegerField(default=0) diff --git a/paste/renderers.py b/paste/renderers.py index 387447b..d1dfc45 100644 --- a/paste/renderers.py +++ b/paste/renderers.py @@ -18,19 +18,16 @@ def render_pygments(request, paste, data): cache_store(key, highlighted_content) data['paste'] = paste data['highlighted'] = highlighted_content - context = RequestContext(request, data) - return get_template('paste/show-pygments.html').render(context) + return get_template('paste/show-pygments.html').render(data) def render_form(request, paste, data): """Renders Form template.""" data['paste'] = paste - context = RequestContext(request, data) - return get_template('paste/show-form.html').render(context) + return get_template('paste/show-form.html').render(data) def render_raw(request, paste, data): """Renders RAW content.""" data['paste'] = paste - context = RequestContext(request, data) - return get_template('paste/show-raw.html').render(context) + return get_template('paste/show-raw.html').render(data) diff --git a/paste/templates/base.html b/paste/templates/base.html index 8336d2a..c7641d2 100644 --- a/paste/templates/base.html +++ b/paste/templates/base.html @@ -1,4 +1,4 @@ -{% load i18n %} +{% load i18n %} {% load compress %} @@ -6,10 +6,10 @@ {% block title %}{% endblock %} - {{ DISPLAY_NAME }} {% compress css %} - - - - + + + + {% endcompress %} @@ -38,9 +38,9 @@ {% block content %}{% endblock %} {% compress js %} - - - + + + {% endcompress %} {% block javascript %}{% endblock %} diff --git a/paste/tools.py b/paste/tools.py index 45b91a3..8c12136 100644 --- a/paste/tools.py +++ b/paste/tools.py @@ -35,7 +35,7 @@ def cache_exists(key): def cache_store(key, value): """Store cache value for key.""" with open(cache_get_filepath(key), 'w') as cache_file: - cache_file.write(value.encode('utf-8')) + cache_file.write(value) def cache_fetch(key): diff --git a/paste/urls.py b/paste/urls.py index 149819b..04de19d 100644 --- a/paste/urls.py +++ b/paste/urls.py @@ -1,11 +1,12 @@ -from django.conf.urls import patterns, url +from django.conf.urls import url +from django.views.static import serve from paste import views from webtools import settings -urlpatterns = patterns('', +urlpatterns = [ url(r'^$', views.index, name='index'), url(r'^paste/(?P[A-z0-9]+)/(?P[a-z]+)?$', views.show, name='paste'), url(r'^history$', views.history, name='history'), - url(r'^static/(?P.*)', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}), -) + url(r'^static/(?P.*)', serve, {'document_root': settings.STATIC_ROOT}), +] diff --git a/paste/views.py b/paste/views.py index 0f5f263..3efcc51 100644 --- a/paste/views.py +++ b/paste/views.py @@ -1,10 +1,10 @@ -import renderers +from . import renderers from django.http import HttpResponse -from django.core.urlresolvers import reverse +from django.urls import reverse from django.shortcuts import redirect, render, get_object_or_404 -from models import Paste -from forms import PasteForm -from tools import random_id +from .models import Paste +from .forms import PasteForm +from .tools import random_id from webtools import settings @@ -13,8 +13,8 @@ def index(request): data = {'menu': 'index', 'max_characters': settings.MAX_CHARACTERS} if request.method == 'POST': - paste = Paste(slug=random_id(), - paste_ip=request.META['REMOTE_ADDR'], + paste = Paste(slug=random_id(), + paste_ip=request.META['REMOTE_ADDR'], paste_agent=request.META['HTTP_USER_AGENT']) form = PasteForm(request.POST, instance=paste) if not form.is_valid(): @@ -34,7 +34,7 @@ def show(request, slug, renderer): # Handling expiration if paste.is_expired(): return render(request, 'paste/expired.html') - # Handling passwords + # Handling passwords if paste.password: if 'password' in request.POST: password = request.POST['password'] diff --git a/share/requirements.pip b/share/requirements.pip index 8c79eef..aae97fb 100644 --- a/share/requirements.pip +++ b/share/requirements.pip @@ -1,6 +1,6 @@ -Django==1.5.1 -uWSGI==1.9.4 -Pygments==1.6 -shortuuid==0.3 -django_compressor==1.3 -beautifulsoup==3.2.1 +Django==2.0.5 +uWSGI==2.0.17 +Pygments==2.2.0 +shortuuid==0.5.0 +django_compressor==2.2 +beautifulsoup4==4.6.0 diff --git a/webtools/settings.py b/webtools/settings.py index 365991d..eddeed7 100644 --- a/webtools/settings.py +++ b/webtools/settings.py @@ -38,10 +38,6 @@ DATABASES = { APP_NAME = 'Pasteque' APP_VERSION = 'v0.1' -TEMPLATE_CONTEXT_PROCESSORS = ( - "paste.context_processors.app_details", - "django.core.context_processors.static", -) SITE_ID = 1 MANAGERS = ADMINS USE_I18N = True @@ -62,6 +58,23 @@ TEMPLATE_LOADERS = ( 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', ) + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.messages.context_processors.messages', + "paste.context_processors.app_details", + ], + }, + }, +] + MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', @@ -72,6 +85,7 @@ ROOT_URLCONF = 'webtools.urls' WSGI_APPLICATION = 'webtools.wsgi.application' INSTALLED_APPS = ( 'django.contrib.staticfiles', + 'django.contrib.contenttypes', 'compressor', 'paste', ) diff --git a/webtools/urls.py b/webtools/urls.py index ab1587a..7b4c0f2 100644 --- a/webtools/urls.py +++ b/webtools/urls.py @@ -1,5 +1,5 @@ -from django.conf.urls import patterns, include, url +from django.urls import path, include -urlpatterns = patterns('', - url(r'', include('paste.urls')), -) +urlpatterns = [ + path('', include('paste.urls')), +]