diff --git a/Pipfile b/Pipfile index 1ce5a6908..e1b5ace59 100644 --- a/Pipfile +++ b/Pipfile @@ -4,7 +4,7 @@ verify_ssl = true name = "pypi" [packages] -django = "<2.0,>=1.11" +django = "<2.1,>=2.0" pillow = "*" coveralls = "*" dateparser = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 0b6afe9f1..63e9883ea 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "f38e72c2d07bd711cf7b3dd168e4fa39df3e8b86f790bda8c2c27a762c6f7447" + "sha256": "f349fa350cdef16f1b8673d7a317516c0682a801e2039d1d7dc25d90ea2aed38" }, "pipfile-spec": 6, "requires": {}, @@ -106,11 +106,11 @@ }, "django": { "hashes": [ - "sha256:8176ac7985fe6737ce3d6b2531b4a2453cb7c3377c9db00bacb2b3320f4a1311", - "sha256:b18235d82426f09733d2de9910cee975cf52ff05e5f836681eb957d105a05a40" + "sha256:0c5b65847d00845ee404bbc0b4a85686f15eb3001ffddda3db4e9baa265bf136", + "sha256:68aeea369a8130259354b6ba1fa9babe0c5ee6bced505dea4afcd00f765ae38b" ], "index": "pypi", - "version": "==1.11.15" + "version": "==2.0.8" }, "django-cors-headers": { "hashes": [ diff --git a/requirements.txt b/requirements.txt index d1b27923f..9fc0c6b76 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,7 @@ django-crispy-forms==1.7.2 django-extensions==2.1.2 django-filter==2.0.0 django-flat-responsive==2.0 -django==1.11.15 +django==2.0.8 djangorestframework==3.8.2 docopt==0.6.2 execnet==1.5.0; python_version != '3.1.*' diff --git a/src/documents/admin.py b/src/documents/admin.py index d996b24cf..36154b6ba 100644 --- a/src/documents/admin.py +++ b/src/documents/admin.py @@ -3,8 +3,13 @@ from datetime import datetime from django.conf import settings from django.contrib import admin from django.contrib.auth.models import User, Group -from django.core.urlresolvers import reverse +try: + from django.core.urlresolvers import reverse +except ImportError: + from django.urls import reverse from django.templatetags.static import static +from django.utils.safestring import mark_safe +from django.utils.html import format_html, format_html_join from .models import Correspondent, Tag, Document, Log @@ -178,7 +183,7 @@ class DocumentAdmin(CommonAdmin): ) } ) - return r + return mark_safe(r) tags_.allow_tags = True def document(self, obj): @@ -198,16 +203,13 @@ class DocumentAdmin(CommonAdmin): @staticmethod def _html_tag(kind, inside=None, **kwargs): - - attributes = [] - for lft, rgt in kwargs.items(): - attributes.append('{}="{}"'.format(lft, rgt)) + attributes = format_html_join(' ', '{}="{}"', kwargs.items()) if inside is not None: - return "<{kind} {attributes}>{inside}".format( - kind=kind, attributes=" ".join(attributes), inside=inside) + return format_html("<{kind} {attributes}>{inside}", + kind=kind, attributes=attributes, inside=inside) - return "<{} {}/>".format(kind, " ".join(attributes)) + return format_html("<{} {}/>", kind, attributes) class LogAdmin(CommonAdmin): diff --git a/src/documents/migrations/0003_sender.py b/src/documents/migrations/0003_sender.py index ce2508994..27eead032 100644 --- a/src/documents/migrations/0003_sender.py +++ b/src/documents/migrations/0003_sender.py @@ -32,7 +32,6 @@ def realign_senders(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('documents', '0002_auto_20151226_1316'), ] diff --git a/src/documents/migrations/0011_auto_20160303_1929.py b/src/documents/migrations/0011_auto_20160303_1929.py index af4ee4c66..7b77a8835 100644 --- a/src/documents/migrations/0011_auto_20160303_1929.py +++ b/src/documents/migrations/0011_auto_20160303_1929.py @@ -6,7 +6,7 @@ from django.db import migrations class Migration(migrations.Migration): - + atomic = False dependencies = [ ('documents', '0010_log'), ] diff --git a/src/documents/migrations/0012_auto_20160305_0040.py b/src/documents/migrations/0012_auto_20160305_0040.py index 5168c9206..a0b4b27af 100644 --- a/src/documents/migrations/0012_auto_20160305_0040.py +++ b/src/documents/migrations/0012_auto_20160305_0040.py @@ -112,7 +112,6 @@ def move_documents_and_create_thumbnails(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('documents', '0011_auto_20160303_1929'), ] diff --git a/src/documents/migrations/0014_document_checksum.py b/src/documents/migrations/0014_document_checksum.py index 167245dea..bc563cf86 100644 --- a/src/documents/migrations/0014_document_checksum.py +++ b/src/documents/migrations/0014_document_checksum.py @@ -128,7 +128,6 @@ def do_nothing(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('documents', '0013_auto_20160325_2111'), ] diff --git a/src/documents/migrations/0019_add_consumer_user.py b/src/documents/migrations/0019_add_consumer_user.py index a3d7d787e..bc52ae7f6 100644 --- a/src/documents/migrations/0019_add_consumer_user.py +++ b/src/documents/migrations/0019_add_consumer_user.py @@ -15,7 +15,6 @@ def reverse_func(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('documents', '0018_auto_20170715_1712'), ] diff --git a/src/documents/migrations/0020_document_added.py b/src/documents/migrations/0020_document_added.py index dbddf80ae..d5b53a051 100644 --- a/src/documents/migrations/0020_document_added.py +++ b/src/documents/migrations/0020_document_added.py @@ -12,7 +12,6 @@ def set_added_time_to_created_time(apps, schema_editor): doc.save() class Migration(migrations.Migration): - dependencies = [ ('documents', '0019_add_consumer_user'), ] diff --git a/src/documents/models.py b/src/documents/models.py index 2ee446ae6..36466bbac 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -10,7 +10,10 @@ from collections import OrderedDict from fuzzywuzzy import fuzz from django.conf import settings -from django.core.urlresolvers import reverse +try: + from django.core.urlresolvers import reverse +except ImportError: + from django.urls import reverse from django.db import models from django.template.defaultfilters import slugify from django.utils import timezone diff --git a/src/paperless/settings.py b/src/paperless/settings.py index e40af01d1..dec20ec3c 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -82,14 +82,13 @@ if os.getenv("PAPERLESS_INSTALLED_APPS"): -MIDDLEWARE_CLASSES = [ +MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] @@ -99,9 +98,9 @@ CORS_ORIGIN_WHITELIST = tuple(os.getenv("PAPERLESS_CORS_ALLOWED_HOSTS", "localho # If auth is disabled, we just use our "bypass" authentication middleware if bool(os.getenv("PAPERLESS_DISABLE_LOGIN", "false").lower() in ("yes", "y", "1", "t", "true")): - _index = MIDDLEWARE_CLASSES.index("django.contrib.auth.middleware.AuthenticationMiddleware") - MIDDLEWARE_CLASSES[_index] = "paperless.middleware.Middleware" - MIDDLEWARE_CLASSES.remove("django.contrib.auth.middleware.SessionAuthenticationMiddleware") + _index = MIDDLEWARE.index("django.contrib.auth.middleware.AuthenticationMiddleware") + MIDDLEWARE[_index] = "paperless.middleware.Middleware" + MIDDLEWARE.remove("django.contrib.auth.middleware.SessionAuthenticationMiddleware") ROOT_URLCONF = 'paperless.urls' diff --git a/src/paperless/urls.py b/src/paperless/urls.py index e5e559f12..f66ce6664 100644 --- a/src/paperless/urls.py +++ b/src/paperless/urls.py @@ -28,9 +28,11 @@ urlpatterns = [ # API url( r"^api/auth/", - include('rest_framework.urls', namespace="rest_framework") + include( + ('rest_framework.urls', 'rest_framework'), + namespace="rest_framework") ), - url(r"^api/", include(router.urls, namespace="drf")), + url(r"^api/", include((router.urls, 'drf'), namespace="drf")), # File downloads url( diff --git a/src/reminders/models.py b/src/reminders/models.py index d6fb744f7..77d872afb 100644 --- a/src/reminders/models.py +++ b/src/reminders/models.py @@ -3,6 +3,8 @@ from django.db import models class Reminder(models.Model): - document = models.ForeignKey("documents.Document") + document = models.ForeignKey( + "documents.Document", on_delete=models.PROTECT + ) date = models.DateTimeField() note = models.TextField(blank=True)