From 71ddb42b67c08cdc6dbabf7fc92a5e9889a0c3bc Mon Sep 17 00:00:00 2001 From: Stefano Rivera Date: Thu, 28 Dec 2017 13:52:11 +0100 Subject: [PATCH 1/6] django.core.urlresolvers was moved to django.urls The legacy path isn't useable in Django 2.0 --- markitup/templatetags/markitup_tags.py | 7 ++++++- markitup/widgets.py | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/markitup/templatetags/markitup_tags.py b/markitup/templatetags/markitup_tags.py index 185f860..f895bc5 100644 --- a/markitup/templatetags/markitup_tags.py +++ b/markitup/templatetags/markitup_tags.py @@ -1,11 +1,16 @@ from __future__ import unicode_literals from django import template -from django.core.urlresolvers import reverse, NoReverseMatch from markitup import settings from markitup.util import absolute_url from markitup.fields import render_func +try: + from django.urls import NoReverseMatch, reverse +except ImportError: + # pre-Django 1.10 + from django.core.urlresolvers import NoReverseMatch, reverse + register = template.Library() diff --git a/markitup/widgets.py b/markitup/widgets.py index 876c6f2..2d8da6f 100644 --- a/markitup/widgets.py +++ b/markitup/widgets.py @@ -3,12 +3,17 @@ import posixpath from django import forms from django.contrib.admin.widgets import AdminTextareaWidget -from django.core.urlresolvers import NoReverseMatch, reverse from django.template.loader import render_to_string from django.utils.safestring import mark_safe from markitup import settings from markitup.util import absolute_url +try: + from django.urls import NoReverseMatch, reverse +except ImportError: + # pre-Django 1.10 + from django.core.urlresolvers import NoReverseMatch, reverse + class MarkupInput(forms.Widget): def render(self, name, value, attrs=None): From d2fe33c47b91755872129181e520ef9d5534b655 Mon Sep 17 00:00:00 2001 From: Stefano Rivera Date: Thu, 28 Dec 2017 15:06:40 +0100 Subject: [PATCH 2/6] build_attrs() now requires explicit base attrs As of Django 1.11. Previously, it pulled them off the widget, itself. Django 1.11's template-based widget rendering rewrote this code. For compatibility with Django pre-1.11, we pass the base_attrs as a kwarg, this will be treated as an extra attr named "base_attrs", in old Django. --- markitup/widgets.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/markitup/widgets.py b/markitup/widgets.py index 2d8da6f..f4255c9 100644 --- a/markitup/widgets.py +++ b/markitup/widgets.py @@ -76,7 +76,10 @@ def _media(self): def render(self, name, value, attrs=None): html = super(MarkItUpWidget, self).render(name, value, attrs) - final_attrs = self.build_attrs(attrs) + # Passing base_attrs as a kwarg for compatibility with Django < 1.11 + # (where it will be treated as an innocuous attr named base_attrs) + final_attrs = self.build_attrs( + base_attrs=self.attrs, extra_attrs=attrs) try: preview_url = reverse('markitup_preview') From d415ffdeee747f22a66ded3b6e289a1caa9c32d2 Mon Sep 17 00:00:00 2001 From: Stefano Rivera Date: Thu, 28 Dec 2017 15:42:28 +0100 Subject: [PATCH 3/6] value_from_object is a public method with the same effect The private method _get_val_from_obj was removed in 2.0 --- markitup/fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markitup/fields.py b/markitup/fields.py index e4373d3..3a22c61 100644 --- a/markitup/fields.py +++ b/markitup/fields.py @@ -99,7 +99,7 @@ def pre_save(self, model_instance, add): return value.raw def value_to_string(self, obj): - value = self._get_val_from_obj(obj) + value = self.value_from_object(obj) return value.raw def to_python(self, value): From 7deb0f7e5e02a7af1dc1e194483866c67eea88d1 Mon Sep 17 00:00:00 2001 From: Stefano Rivera Date: Thu, 28 Dec 2017 13:52:32 +0100 Subject: [PATCH 4/6] Add Django 1.11 and 2.0 to tox.ini --- tox.ini | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tox.ini b/tox.ini index 2072ea0..0d19d7e 100644 --- a/tox.ini +++ b/tox.ini @@ -1,16 +1,22 @@ [tox] envlist= - py27-1.{8,9,10}, - py34-1.{8,9,10}, - py35-1.{9,10} + py27-1.{8,9,10,11}, + py34-1.{8,9,10,11}, + py34-2.0, + py35-1.{9,10,11}, + py35-2.0, + py36-{1.11,2.0} [testenv] basepython = py27: python2.7 py34: python3.4 py35: python3.5 + py36: python3.6 commands=python setup.py test deps = 1.8: Django>=1.8,<1.9 1.9: Django>=1.9,<1.10 1.10: Django>=1.10,<1.11 + 1.11: Django>=1.11,<2.0 + 2.0: Django>=2.0,<2.1 From 40aa7c4cdc7e298afdc7552c7cc0e1cd32df4e61 Mon Sep 17 00:00:00 2001 From: Stefano Rivera Date: Thu, 28 Dec 2017 15:46:22 +0100 Subject: [PATCH 5/6] Document changes --- AUTHORS.rst | 1 + CHANGES.rst | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index 3cd74d7..0e89a3b 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -12,4 +12,5 @@ Mikhael Korneev Neil Muller Roman Akinfold Sebastian Brandt +Stefano Rivera Zbigniew Siciarz diff --git a/CHANGES.rst b/CHANGES.rst index d33050f..14b1493 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,7 @@ CHANGES master (unreleased) ------------------- -* none yet +* Add support for Django 1.11 and 2.0. 3.0.0 (2016.09.04) ------------------ From 92f05a8c52bdd77ceb610ae47528638466d56a0f Mon Sep 17 00:00:00 2001 From: Stefano Rivera Date: Thu, 28 Dec 2017 15:58:25 +0100 Subject: [PATCH 6/6] Add Django 1.11 and 2.0 to Travis CI config --- .travis.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.travis.yml b/.travis.yml index ca885b0..efdfad4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,15 +7,23 @@ addons: packages: - python3.5 - python3.5-dev + - python3.6 + - python3.6-dev env: - TOXENV=py27-1.8 - TOXENV=py27-1.9 - TOXENV=py27-1.10 + - TOXENV=py27-1.11 - TOXENV=py34-1.8 - TOXENV=py34-1.9 - TOXENV=py34-1.10 + - TOXENV=py34-1.11 - TOXENV=py35-1.9 - TOXENV=py35-1.10 + - TOXENV=py35-1.11 + - TOXENV=py35-2.0 + - TOXENV=py36-1.11 + - TOXENV=py36-2.0 install: - pip install tox script: