From ccfc544a870e7c40aeb2f921d1e38b90f6c8cbd8 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sat, 6 Jul 2013 00:02:17 +0200 Subject: [PATCH 01/43] Add django-trunk to build matrix --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 756a55371b6..5e3dd8126af 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,9 @@ env: - DJANGO=1.5 DATABASE_URL='sqlite://localhost/:memory:' - DJANGO=1.5 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' - DJANGO=1.5 DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' + - DJANGO=trunk DATABASE_URL='sqlite://localhost/:memory:' + - DJANGO=trunk DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' + - DJANGO=trunk DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' before_script: - sh -c "if [ '$DATABASE_URL' = 'postgres://postgres@127.0.0.1/djangocms_test' ]; then psql -c 'DROP DATABASE IF EXISTS djangocms_test;' -U postgres; fi" From d45aeec89d2c5d2f63640d30414c310d74116899 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sat, 6 Jul 2013 00:04:28 +0200 Subject: [PATCH 02/43] Fix django 1.6 incompatible `exclude` attribute in `stacks` forms --- cms/stacks/forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cms/stacks/forms.py b/cms/stacks/forms.py index 820b1ff7477..9deaf8ad2a5 100644 --- a/cms/stacks/forms.py +++ b/cms/stacks/forms.py @@ -20,4 +20,4 @@ class StackInsertionForm(forms.Form): class StackCreationForm(forms.ModelForm): class Meta: model = Stack - exclude = 'content' + exclude = ('content',) From 7f7bd4d4f43b8e568295547fe5ddd2d1146ef178 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sat, 6 Jul 2013 00:05:09 +0200 Subject: [PATCH 03/43] Fix django 1.6-incompatible changelist queryset attribute naming --- cms/admin/change_list.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cms/admin/change_list.py b/cms/admin/change_list.py index a5707c7232e..5ddfadbe5f2 100644 --- a/cms/admin/change_list.py +++ b/cms/admin/change_list.py @@ -51,7 +51,7 @@ def __init__(self, request, *args, **kwargs): self._current_site = current_site(request) super(CMSChangeList, self).__init__(request, *args, **kwargs) try: - self.query_set = self.get_query_set(request) + self.queryset = self.get_query_set(request) except: raise self.get_results(request) @@ -59,7 +59,7 @@ def __init__(self, request, *args, **kwargs): if self._current_site: request.session['cms_admin_site'] = self._current_site.pk self.set_sites(request) - + def get_query_set(self, request=None): if COPY_VAR in self.params: del self.params[COPY_VAR] From e5965cb48f1bce6de71590203c433b4b13ff39a1 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sat, 6 Jul 2013 00:05:43 +0200 Subject: [PATCH 04/43] Added django 1.6 compat fix for ModelAdmin metaclass --- cms/plugin_base.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cms/plugin_base.py b/cms/plugin_base.py index 7b823b3c563..f6c8ebfdf06 100644 --- a/cms/plugin_base.py +++ b/cms/plugin_base.py @@ -1,6 +1,11 @@ # -*- coding: utf-8 -*- from distutils.version import LooseVersion from cms.constants import PLUGIN_MOVE_ACTION, PLUGIN_COPY_ACTION +try: + from django.contrib.admin.options import (RenameBaseModelAdminMethods as + ModelAdminMetaClass) +except: + from django.forms.widgets import (MediaDefiningClass as ModelAdminMetaClass) from cms.utils.compat.metaclasses import with_metaclass import re @@ -20,7 +25,7 @@ DJANGO_1_4 = LooseVersion(django.get_version()) < LooseVersion('1.5') -class CMSPluginBaseMetaclass(forms.MediaDefiningClass): +class CMSPluginBaseMetaclass(ModelAdminMetaClass): """ Ensure the CMSPlugin subclasses have sane values and set some defaults if they're not given. From eac4b371d2613436d2e67bd93829ad59c2452e32 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sat, 6 Jul 2013 00:08:40 +0200 Subject: [PATCH 05/43] Fix django 1.6 urls imports --- cms/test_utils/project/cms_urls_for_apphook_tests.py | 2 +- cms/test_utils/project/noadmin_urls.py | 2 +- cms/test_utils/project/nonroot_urls.py | 2 +- cms/test_utils/project/second_urls_for_apphook_tests.py | 2 +- cms/test_utils/project/third_cms_urls_for_apphook_tests.py | 2 +- cms/test_utils/project/third_urls_for_apphook_tests.py | 2 +- cms/test_utils/project/urls_for_apphook_tests.py | 2 +- cms/test_utils/project/urls_no18n.py | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cms/test_utils/project/cms_urls_for_apphook_tests.py b/cms/test_utils/project/cms_urls_for_apphook_tests.py index ca18106e529..c2879b9c066 100644 --- a/cms/test_utils/project/cms_urls_for_apphook_tests.py +++ b/cms/test_utils/project/cms_urls_for_apphook_tests.py @@ -1,7 +1,7 @@ from cms.apphook_pool import apphook_pool from cms.views import details from django.conf import settings -from django.conf.urls.defaults import url, patterns +from django.conf.urls import url, patterns if settings.APPEND_SLASH: reg = url(r'^(?P[0-9A-Za-z-_.//]+)/$', details, name='pages-details-by-slug') diff --git a/cms/test_utils/project/noadmin_urls.py b/cms/test_utils/project/noadmin_urls.py index 40a82eead74..b278d5cff6f 100644 --- a/cms/test_utils/project/noadmin_urls.py +++ b/cms/test_utils/project/noadmin_urls.py @@ -1,6 +1,6 @@ from cms.utils.conf import get_cms_setting from django.conf import settings -from django.conf.urls.defaults import handler500, handler404, patterns, include, \ +from django.conf.urls import handler500, handler404, patterns, include, \ url diff --git a/cms/test_utils/project/nonroot_urls.py b/cms/test_utils/project/nonroot_urls.py index 23cb0d78169..fbd9586e8ef 100644 --- a/cms/test_utils/project/nonroot_urls.py +++ b/cms/test_utils/project/nonroot_urls.py @@ -1,6 +1,6 @@ from cms.utils import get_cms_setting from django.conf import settings -from django.conf.urls.defaults import handler500, handler404, patterns, include, \ +from django.conf.urls import handler500, handler404, patterns, include, \ url try: from django.conf.urls.i18n import i18n_patterns diff --git a/cms/test_utils/project/second_urls_for_apphook_tests.py b/cms/test_utils/project/second_urls_for_apphook_tests.py index aefcd206eeb..e35130dfefb 100644 --- a/cms/test_utils/project/second_urls_for_apphook_tests.py +++ b/cms/test_utils/project/second_urls_for_apphook_tests.py @@ -1,6 +1,6 @@ from cms.utils.conf import get_cms_setting from django.conf import settings -from django.conf.urls.defaults import handler500, handler404, patterns, include, \ +from django.conf.urls import handler500, handler404, patterns, include, \ url try: from django.conf.urls.i18n import i18n_patterns diff --git a/cms/test_utils/project/third_cms_urls_for_apphook_tests.py b/cms/test_utils/project/third_cms_urls_for_apphook_tests.py index ca18106e529..c2879b9c066 100644 --- a/cms/test_utils/project/third_cms_urls_for_apphook_tests.py +++ b/cms/test_utils/project/third_cms_urls_for_apphook_tests.py @@ -1,7 +1,7 @@ from cms.apphook_pool import apphook_pool from cms.views import details from django.conf import settings -from django.conf.urls.defaults import url, patterns +from django.conf.urls import url, patterns if settings.APPEND_SLASH: reg = url(r'^(?P[0-9A-Za-z-_.//]+)/$', details, name='pages-details-by-slug') diff --git a/cms/test_utils/project/third_urls_for_apphook_tests.py b/cms/test_utils/project/third_urls_for_apphook_tests.py index 2bda8495ccf..130ade1926b 100644 --- a/cms/test_utils/project/third_urls_for_apphook_tests.py +++ b/cms/test_utils/project/third_urls_for_apphook_tests.py @@ -1,5 +1,5 @@ from django.conf import settings -from django.conf.urls.defaults import handler500, handler404, patterns, include, \ +from django.conf.urls import handler500, handler404, patterns, include, \ url try: from django.conf.urls.i18n import i18n_patterns diff --git a/cms/test_utils/project/urls_for_apphook_tests.py b/cms/test_utils/project/urls_for_apphook_tests.py index 1d8448e9156..abd0eb42756 100644 --- a/cms/test_utils/project/urls_for_apphook_tests.py +++ b/cms/test_utils/project/urls_for_apphook_tests.py @@ -1,6 +1,6 @@ from cms.utils.conf import get_cms_setting from django.conf import settings -from django.conf.urls.defaults import handler500, handler404, patterns, include, \ +from django.conf.urls import handler500, handler404, patterns, include, \ url try: from django.conf.urls.i18n import i18n_patterns diff --git a/cms/test_utils/project/urls_no18n.py b/cms/test_utils/project/urls_no18n.py index 45f9537f0d4..232d667ea52 100644 --- a/cms/test_utils/project/urls_no18n.py +++ b/cms/test_utils/project/urls_no18n.py @@ -1,6 +1,6 @@ from cms.utils.conf import get_cms_setting from django.conf import settings -from django.conf.urls.defaults import patterns, include, \ +from django.conf.urls import patterns, include, \ url from django.contrib import admin From 8db357bd618c8e9bc7f5f25b53453b1b5f7a19f5 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sat, 6 Jul 2013 00:09:22 +0200 Subject: [PATCH 06/43] Fix BooleanField default value as per django 1.6 changes --- cms/models/pagemodel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cms/models/pagemodel.py b/cms/models/pagemodel.py index 5e1c108632c..733be7dc2fa 100644 --- a/cms/models/pagemodel.py +++ b/cms/models/pagemodel.py @@ -62,7 +62,7 @@ class Page(with_metaclass(PageMetaClass, MPTTModel)): reverse_id = models.CharField(_("id"), max_length=40, db_index=True, blank=True, null=True, help_text=_( "An unique identifier that is used with the page_url templatetag for linking to this page")) navigation_extenders = models.CharField(_("attached menu"), max_length=80, db_index=True, blank=True, null=True) - published = models.BooleanField(_("is published"), blank=True) + published = models.BooleanField(_("is published"), blank=True, default=False) template = models.CharField(_("template"), max_length=100, choices=template_choices, help_text=_('The template used to render the content.'), From 0491eed1e9d52db358c2fd97cb144c3c933be8e1 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sat, 6 Jul 2013 00:10:13 +0200 Subject: [PATCH 07/43] Use django 1.6 compatible json --- cms/admin/placeholderadmin.py | 2 +- cms/models/pluginmodel.py | 3 ++- cms/test_utils/cli.py | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/cms/admin/placeholderadmin.py b/cms/admin/placeholderadmin.py index 198a09e4910..e52ecebf1cc 100644 --- a/cms/admin/placeholderadmin.py +++ b/cms/admin/placeholderadmin.py @@ -3,7 +3,7 @@ from django.contrib.admin.helpers import AdminForm from django.utils.decorators import method_decorator from django.db import transaction -from django.utils import simplejson +import json as simplejson from django.views.decorators.clickjacking import xframe_options_sameorigin from cms.constants import PLUGIN_COPY_ACTION, PLUGIN_MOVE_ACTION diff --git a/cms/models/pluginmodel.py b/cms/models/pluginmodel.py index d8053c09922..63ab4bd06ca 100644 --- a/cms/models/pluginmodel.py +++ b/cms/models/pluginmodel.py @@ -10,7 +10,8 @@ from django.db import models from django.db.models.base import model_unpickle from django.db.models.query_utils import DeferredAttribute -from django.utils import timezone, simplejson +from django.utils import timezone +import json as simplejson from django.utils.translation import ugettext_lazy as _ from cms.exceptions import DontUsePageAttributeWarning from cms.models.placeholdermodel import Placeholder diff --git a/cms/test_utils/cli.py b/cms/test_utils/cli.py index 8378157356d..da7cebbe0e2 100644 --- a/cms/test_utils/cli.py +++ b/cms/test_utils/cli.py @@ -302,7 +302,7 @@ def configure(db_url, **extra): # add data from env extra_settings = os.environ.get("DJANGO_EXTRA_SETTINGS", None) if extra_settings: - from django.utils.simplejson import load, loads + from json import load, loads if os.path.exists(extra_settings): with open(extra_settings) as fobj: From 12beaadc206a455ee34e5877762e776253074fec Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sat, 6 Jul 2013 00:18:51 +0200 Subject: [PATCH 08/43] Take into account the new django branch model --- .travis.yml | 6 +++--- test_requirements/django-1.6.txt | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 test_requirements/django-1.6.txt diff --git a/.travis.yml b/.travis.yml index 5e3dd8126af..551578bfd05 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,9 +10,9 @@ env: - DJANGO=1.5 DATABASE_URL='sqlite://localhost/:memory:' - DJANGO=1.5 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' - DJANGO=1.5 DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' - - DJANGO=trunk DATABASE_URL='sqlite://localhost/:memory:' - - DJANGO=trunk DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' - - DJANGO=trunk DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' + - DJANGO=1.6 DATABASE_URL='sqlite://localhost/:memory:' + - DJANGO=1.6 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' + - DJANGO=1.6 DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' before_script: - sh -c "if [ '$DATABASE_URL' = 'postgres://postgres@127.0.0.1/djangocms_test' ]; then psql -c 'DROP DATABASE IF EXISTS djangocms_test;' -U postgres; fi" diff --git a/test_requirements/django-1.6.txt b/test_requirements/django-1.6.txt new file mode 100644 index 00000000000..04940333dd3 --- /dev/null +++ b/test_requirements/django-1.6.txt @@ -0,0 +1,4 @@ +-r requirements_base.txt +https://github.com/django/django/archive/stable/1.6.x.zip#egg=django +django-reversion==1.6.2 + From 7895a70d6e9cddeb3726a950bd0a3262c6aca5d1 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sat, 6 Jul 2013 00:49:43 +0200 Subject: [PATCH 09/43] Update django-reversion version in requirements --- test_requirements/django-1.6.txt | 2 +- test_requirements/django-trunk.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test_requirements/django-1.6.txt b/test_requirements/django-1.6.txt index 04940333dd3..cdbe3d17bf9 100644 --- a/test_requirements/django-1.6.txt +++ b/test_requirements/django-1.6.txt @@ -1,4 +1,4 @@ -r requirements_base.txt https://github.com/django/django/archive/stable/1.6.x.zip#egg=django -django-reversion==1.6.2 +django-reversion>=1.7,<1.8 diff --git a/test_requirements/django-trunk.txt b/test_requirements/django-trunk.txt index ddbcdf2ffac..ce8081a4142 100644 --- a/test_requirements/django-trunk.txt +++ b/test_requirements/django-trunk.txt @@ -1,4 +1,4 @@ -r requirements_base.txt https://github.com/django/django/tarball/master/django.tar.gz#egg=django -django-reversion==1.6.2 +django-reversion>=1.7,<1.8 From bfeb20cfc0a0ef7b1b48c6ccbed739e64fc0a6d0 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sat, 6 Jul 2013 00:50:56 +0200 Subject: [PATCH 10/43] Restore Django 1.4 compatibility --- cms/utils/admin.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/cms/utils/admin.py b/cms/utils/admin.py index e30331a4982..5fdeedb57cc 100644 --- a/cms/utils/admin.py +++ b/cms/utils/admin.py @@ -1,6 +1,8 @@ # -*- coding: utf-8 -*- +from distutils.version import LooseVersion import json +import django from django.http import HttpResponse from django.shortcuts import render_to_response from django.template.context import RequestContext @@ -12,7 +14,7 @@ from django.utils.encoding import smart_str NOT_FOUND_RESPONSE = "NotFound" - +DJANGO_1_4 = LooseVersion(django.get_version()) < LooseVersion('1.5') def jsonify_request(response): """ Turn any response in a 200 response to let jQuery code handle it nicely. @@ -112,4 +114,7 @@ def render_admin_menu_item(request, page, template=None): filtered = 'filtered' in request.REQUEST context.update(get_admin_menu_item_context(request, page, filtered)) # add mimetype to help out IE - return render_to_response(template, context, mimetype="text/html; charset=utf-8") + if DJANGO_1_4: + return render_to_response(template, context, mimetype="text/html; charset=utf-8") + else: + return render_to_response(template, context, content_type="text/html; charset=utf-8") From 640b1ed8491a5398d5b5bea254ed44917125e183 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sat, 6 Jul 2013 00:57:57 +0200 Subject: [PATCH 11/43] Allow failures on django 1.6 tests --- .travis.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.travis.yml b/.travis.yml index 551578bfd05..e6e1edeb820 100644 --- a/.travis.yml +++ b/.travis.yml @@ -52,3 +52,22 @@ matrix: env: DJANGO=1.4 DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' - python: 3.3 env: DJANGO=1.5 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' + allow_failures: + - python: 3.3 + env: DJANGO=1.6 DATABASE_URL='sqlite://localhost/:memory:' + - python: 3.3 + env: DJANGO=1.6 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' + - python: 3.3 + env: DJANGO=1.6 DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' + - python: 2.7 + env: DJANGO=1.6 DATABASE_URL='sqlite://localhost/:memory:' + - python: 2.7 + env: DJANGO=1.6 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' + - python: 2.7 + env: DJANGO=1.6 DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' + - python: 2.6 + env: DJANGO=1.6 DATABASE_URL='sqlite://localhost/:memory:' + - python: 2.6 + env: DJANGO=1.6 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' + - python: 2.6 + env: DJANGO=1.6 DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' From 3c7dedd8d18e9b6acb5236ccf1f43bf9005e70ae Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sat, 6 Jul 2013 01:24:45 +0200 Subject: [PATCH 12/43] Always use Page as revision-ed object --- cms/admin/pageadmin.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cms/admin/pageadmin.py b/cms/admin/pageadmin.py index 1f3fe954afb..172a1079f85 100644 --- a/cms/admin/pageadmin.py +++ b/cms/admin/pageadmin.py @@ -142,6 +142,8 @@ def redirect_jsi18n(self, request): def get_revision_instances(self, request, object): """Returns all the instances to be used in the object's revision.""" + if isinstance(object, Title): + object = object.page placeholder_relation = find_placeholder_relation(object) data = [object] filters = {'placeholder__%s' % placeholder_relation: object} From 8d5c5015146a0ea229f6bf9805690ea34020bcec Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sat, 6 Jul 2013 01:30:14 +0200 Subject: [PATCH 13/43] Added requirements for selenium+django 1.6 --- test_requirements/selenium-1.6.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 test_requirements/selenium-1.6.txt diff --git a/test_requirements/selenium-1.6.txt b/test_requirements/selenium-1.6.txt new file mode 100644 index 00000000000..3e364948cd3 --- /dev/null +++ b/test_requirements/selenium-1.6.txt @@ -0,0 +1,2 @@ +-r django-1.6.txt +selenium From b4138e38af6c60257d88257388ffcaae44b225b3 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Fri, 13 Sep 2013 00:35:54 +0200 Subject: [PATCH 14/43] Django 1.6 compatible requirements --- test_requirements/django-1.6.txt | 2 +- test_requirements/requirements_base.txt | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/test_requirements/django-1.6.txt b/test_requirements/django-1.6.txt index cdbe3d17bf9..af6fe71838e 100644 --- a/test_requirements/django-1.6.txt +++ b/test_requirements/django-1.6.txt @@ -1,4 +1,4 @@ -r requirements_base.txt https://github.com/django/django/archive/stable/1.6.x.zip#egg=django -django-reversion>=1.7,<1.8 +-e git+https://github.com/etianen/django-reversion/tree/django-1.6#egg=django-reversion diff --git a/test_requirements/requirements_base.txt b/test_requirements/requirements_base.txt index 001bbebef58..b3756e21d67 100644 --- a/test_requirements/requirements_base.txt +++ b/test_requirements/requirements_base.txt @@ -7,12 +7,11 @@ Pillow==2.0 django-classy-tags>=0.3.4.1 South>=0.7.2 html5lib>=0.90 --e git+git://github.com/django-mptt/django-mptt.git#egg=django-mptt +django-mptt>=0.6 django-sekizai>=0.7 argparse dj-database-url --e git+https://github.com/divio/djangocms-admin-style.git#egg=djangocms-admin-style +-e git+git://github.com/divio/djangocms-admin-style.git#egg=djangocms-admin-style -e git+git://github.com/divio/djangocms-text-ckeditor.git#egg=djangocms-text-ckeditor --e git+git://github.com/KristianOellegaard/django-hvad.git#egg=hvad -e git+git://github.com/divio/djangocms-column.git#egg=djangocms-column -e git+git://github.com/divio/djangocms-style.git#egg=djangocms-style From ff0ac1858e04d41b1f5e2f4958913944d65ccab0 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Fri, 13 Sep 2013 00:36:33 +0200 Subject: [PATCH 15/43] Import fixes --- cms/plugin_pool.py | 2 +- cms/test_utils/project/placeholderapp_urls.py | 3 +-- cms/tests/plugins.py | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/cms/plugin_pool.py b/cms/plugin_pool.py index e1509e4ab2e..00d0cd9424c 100644 --- a/cms/plugin_pool.py +++ b/cms/plugin_pool.py @@ -7,7 +7,7 @@ from cms.utils.compat.dj import force_unicode from django.conf import settings from django.core.exceptions import ImproperlyConfigured -from django.conf.urls.defaults import url, patterns, include +from django.conf.urls import url, patterns, include from django.contrib.formtools.wizard.views import normalize_name from django.template.defaultfilters import slugify from django.utils.translation import get_language, deactivate_all, activate diff --git a/cms/test_utils/project/placeholderapp_urls.py b/cms/test_utils/project/placeholderapp_urls.py index 7311240592a..05000539101 100644 --- a/cms/test_utils/project/placeholderapp_urls.py +++ b/cms/test_utils/project/placeholderapp_urls.py @@ -1,7 +1,6 @@ from cms.utils.conf import get_cms_setting from django.conf import settings -from django.conf.urls.defaults import handler500, handler404, patterns, include, \ - url +from django.conf.urls import patterns, include, url try: from django.conf.urls.i18n import i18n_patterns except ImportError: diff --git a/cms/tests/plugins.py b/cms/tests/plugins.py index 97d2623ee34..616956f5a13 100644 --- a/cms/tests/plugins.py +++ b/cms/tests/plugins.py @@ -60,7 +60,7 @@ def _test_view(self, request): return http.HttpResponse("It works") def get_plugin_urls(self): - from django.conf.urls.defaults import patterns, url + from django.conf.urls import patterns, url return patterns('', url(r'^testview/$', admin.site.admin_view(self._test_view), name='dumbfixtureplugin'), ) From a85c262532f27cff17021d083a07c6ab300e9686 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Fri, 13 Sep 2013 00:59:11 +0200 Subject: [PATCH 16/43] Fix new Model.save_base() signature --- cms/models/pagemodel.py | 11 ++++++++++- cms/models/pluginmodel.py | 8 +++++++- cms/templatetags/cms_admin.py | 3 ++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/cms/models/pagemodel.py b/cms/models/pagemodel.py index 733be7dc2fa..6d57842bbe5 100644 --- a/cms/models/pagemodel.py +++ b/cms/models/pagemodel.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- from datetime import timedelta +from distutils.version import LooseVersion +import django from cms import constants from cms.constants import TEMPLATE_INHERITANCE_MAGIC @@ -27,6 +29,8 @@ from mptt.models import MPTTModel from os.path import join +DJANGO_1_5 = LooseVersion(django.get_version()) < LooseVersion('1.6') + @python_2_unicode_compatible class Page(with_metaclass(PageMetaClass, MPTTModel)): @@ -373,7 +377,10 @@ def save(self, no_signals=False, commit=True, **kwargs): if commit: if no_signals: # ugly hack because of mptt - self.save_base(cls=self.__class__, **kwargs) + if DJANGO_1_5: + self.save_base(cls=self.__class__, **kwargs) + else: + self.save_base(**kwargs) else: super(Page, self).save(**kwargs) @@ -392,6 +399,8 @@ def save_base(self, *args, **kwargs): if keep_state: delattr(self, '_publisher_keep_state') + if not DJANGO_1_5 and 'cls' in kwargs: + del(kwargs['cls']) ret = super(Page, self).save_base(*args, **kwargs) return ret diff --git a/cms/models/pluginmodel.py b/cms/models/pluginmodel.py index 63ab4bd06ca..15d865e6652 100644 --- a/cms/models/pluginmodel.py +++ b/cms/models/pluginmodel.py @@ -1,11 +1,13 @@ # -*- coding: utf-8 -*- from datetime import date +from distutils.version import LooseVersion from cms.utils.compat.metaclasses import with_metaclass from django.core.urlresolvers import reverse, NoReverseMatch from django.utils.safestring import mark_safe import os import warnings +import django from django.core.exceptions import ValidationError, ObjectDoesNotExist from django.db import models from django.db.models.base import model_unpickle @@ -21,6 +23,7 @@ from cms.utils import get_cms_setting from mptt.models import MPTTModel, MPTTModelBase +DJANGO_1_5 = LooseVersion(django.get_version()) < LooseVersion('1.6') class BoundRenderMeta(object): def __init__(self, meta): @@ -244,7 +247,10 @@ def get_instance_icon_alt(self): def save(self, no_signals=False, *args, **kwargs): if no_signals: # ugly hack because of mptt - super(CMSPlugin, self).save_base(cls=self.__class__) + if DJANGO_1_5: + super(CMSPlugin, self).save_base(cls=self.__class__) + else: + super(CMSPlugin, self).save_base() else: super(CMSPlugin, self).save() diff --git a/cms/templatetags/cms_admin.py b/cms/templatetags/cms_admin.py index e5a8010bf3d..b1c05e7d584 100644 --- a/cms/templatetags/cms_admin.py +++ b/cms/templatetags/cms_admin.py @@ -188,7 +188,8 @@ def get_context(self, context): advanced_settings = context.get('basic_info', False) language = context['language'] return { - 'onclick_attrib': (opts.get_ordered_objects() and change + # TODO check this (old code: opts.get_ordered_objects() ) + 'onclick_attrib': (opts and change and 'onclick="submitOrderForm();"' or ''), 'show_delete_link': False, 'show_save_as_new': not is_popup and change and save_as, From 2446619a128a7fff3ac44987e2e9f517a7c46801 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Fri, 13 Sep 2013 01:05:26 +0200 Subject: [PATCH 17/43] Move Django version checking to cms.utils.compat module --- cms/admin/pageadmin.py | 4 +--- cms/models/pagemodel.py | 5 +---- cms/models/pluginmodel.py | 5 +---- cms/plugin_base.py | 5 +---- cms/templatetags/cms_js_tags.py | 5 +---- cms/tests/admin.py | 5 +---- cms/utils/compat/__init__.py | 6 ++++++ 7 files changed, 12 insertions(+), 23 deletions(-) diff --git a/cms/admin/pageadmin.py b/cms/admin/pageadmin.py index 172a1079f85..1136d2596ff 100644 --- a/cms/admin/pageadmin.py +++ b/cms/admin/pageadmin.py @@ -1,12 +1,10 @@ # -*- coding: utf-8 -*- -from distutils.version import LooseVersion from functools import wraps import sys from cms.admin.placeholderadmin import PlaceholderAdmin from cms.plugin_pool import plugin_pool from django.contrib.admin.helpers import AdminForm -import django from django.conf import settings from django.contrib import admin, messages from django.contrib.admin.models import LogEntry, CHANGE @@ -44,8 +42,8 @@ from cms.utils.permissions import has_global_page_permission, has_generic_permission from cms.utils.plugins import current_site +from cms.utils.compat import DJANGO_1_4 -DJANGO_1_4 = LooseVersion(django.get_version()) < LooseVersion('1.5') require_POST = method_decorator(require_POST) if 'reversion' in settings.INSTALLED_APPS: diff --git a/cms/models/pagemodel.py b/cms/models/pagemodel.py index 6d57842bbe5..1947914887d 100644 --- a/cms/models/pagemodel.py +++ b/cms/models/pagemodel.py @@ -1,8 +1,5 @@ # -*- coding: utf-8 -*- from datetime import timedelta -from distutils.version import LooseVersion -import django - from cms import constants from cms.constants import TEMPLATE_INHERITANCE_MAGIC from cms.utils.compat.metaclasses import with_metaclass @@ -18,6 +15,7 @@ from cms.utils.copy_plugins import copy_plugins_to from cms.utils.helpers import reversion_register from cms.utils.compat.dj import force_unicode, python_2_unicode_compatible +from cms.utils.compat import DJANGO_1_5 from django.contrib.sites.models import Site from django.core.urlresolvers import reverse from django.db import models @@ -29,7 +27,6 @@ from mptt.models import MPTTModel from os.path import join -DJANGO_1_5 = LooseVersion(django.get_version()) < LooseVersion('1.6') @python_2_unicode_compatible diff --git a/cms/models/pluginmodel.py b/cms/models/pluginmodel.py index 15d865e6652..31db214ab8e 100644 --- a/cms/models/pluginmodel.py +++ b/cms/models/pluginmodel.py @@ -1,18 +1,17 @@ # -*- coding: utf-8 -*- from datetime import date -from distutils.version import LooseVersion from cms.utils.compat.metaclasses import with_metaclass from django.core.urlresolvers import reverse, NoReverseMatch from django.utils.safestring import mark_safe import os import warnings -import django from django.core.exceptions import ValidationError, ObjectDoesNotExist from django.db import models from django.db.models.base import model_unpickle from django.db.models.query_utils import DeferredAttribute from django.utils import timezone +from django.utils.compat import DJANGO_1_5 import json as simplejson from django.utils.translation import ugettext_lazy as _ from cms.exceptions import DontUsePageAttributeWarning @@ -23,8 +22,6 @@ from cms.utils import get_cms_setting from mptt.models import MPTTModel, MPTTModelBase -DJANGO_1_5 = LooseVersion(django.get_version()) < LooseVersion('1.6') - class BoundRenderMeta(object): def __init__(self, meta): self.index = 0 diff --git a/cms/plugin_base.py b/cms/plugin_base.py index f6c8ebfdf06..44c4e2502cd 100644 --- a/cms/plugin_base.py +++ b/cms/plugin_base.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -from distutils.version import LooseVersion from cms.constants import PLUGIN_MOVE_ACTION, PLUGIN_COPY_ACTION try: from django.contrib.admin.options import (RenameBaseModelAdminMethods as @@ -14,7 +13,6 @@ from cms.utils.compat.dj import force_unicode, python_2_unicode_compatible from cms.exceptions import SubClassNeededError, Deprecated from cms.models import CMSPlugin -import django from django import forms from django.core.urlresolvers import reverse from django.contrib import admin @@ -22,8 +20,7 @@ from django.forms.models import ModelForm from django.utils.encoding import smart_str from django.utils.translation import ugettext_lazy as _ - -DJANGO_1_4 = LooseVersion(django.get_version()) < LooseVersion('1.5') +from cms.utils.compat import DJANGO_1_4 class CMSPluginBaseMetaclass(ModelAdminMetaClass): """ diff --git a/cms/templatetags/cms_js_tags.py b/cms/templatetags/cms_js_tags.py index 198e7ef8427..ac997d5a516 100644 --- a/cms/templatetags/cms_js_tags.py +++ b/cms/templatetags/cms_js_tags.py @@ -1,13 +1,10 @@ # -*- coding: utf-8 -*- -from distutils.version import LooseVersion - from classytags.core import Tag, Options -import django from django import template from django.core.serializers.json import DjangoJSONEncoder from django.utils.text import javascript_quote +from cms.utils.compat import DJANGO_1_4 -DJANGO_1_4 = LooseVersion(django.get_version()) < LooseVersion('1.5') if DJANGO_1_4: from django.utils import simplejson as json diff --git a/cms/tests/admin.py b/cms/tests/admin.py index 15a5d239964..8cc31f45f63 100644 --- a/cms/tests/admin.py +++ b/cms/tests/admin.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- from __future__ import with_statement -from distutils.version import LooseVersion import json from cms.admin.change_list import CMSChangeList from cms.admin.forms import PageForm, AdvancedSettingsForm @@ -18,7 +17,7 @@ from cms.test_utils.testcases import CMSTestCase, URL_CMS_PAGE_DELETE, URL_CMS_PAGE, URL_CMS_TRANSLATION_DELETE from cms.test_utils.util.context_managers import SettingsOverride from cms.utils import get_cms_setting -import django +from cms.utils.compat import DJANGO_1_4 from django.contrib import admin from django.contrib.admin.models import LogEntry from django.contrib.admin.sites import site @@ -29,8 +28,6 @@ from django.utils.datastructures import MultiValueDictKeyError from django.utils.encoding import smart_str -DJANGO_1_4 = LooseVersion(django.get_version()) < LooseVersion('1.5') - class AdminTestsBase(CMSTestCase): @property diff --git a/cms/utils/compat/__init__.py b/cms/utils/compat/__init__.py index 4cbebd5ea8e..c6dd88d27a3 100644 --- a/cms/utils/compat/__init__.py +++ b/cms/utils/compat/__init__.py @@ -1,3 +1,9 @@ import sys +from distutils.version import LooseVersion +import django + +DJANGO_1_3 = LooseVersion(django.get_version()) < LooseVersion('1.4') +DJANGO_1_4 = LooseVersion(django.get_version()) < LooseVersion('1.5') +DJANGO_1_5 = LooseVersion(django.get_version()) < LooseVersion('1.6') PY2 = sys.version_info[0] == 2 \ No newline at end of file From 346352bcc93c98469693ebb682b1b33e2502710b Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Fri, 13 Sep 2013 01:17:40 +0200 Subject: [PATCH 18/43] Temporary switch test requirements --- test_requirements/django-1.4.txt | 2 +- test_requirements/django-1.5.txt | 2 +- test_requirements/django-1.6.txt | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/test_requirements/django-1.4.txt b/test_requirements/django-1.4.txt index 3fc3ca0aecc..92a8af06593 100644 --- a/test_requirements/django-1.4.txt +++ b/test_requirements/django-1.4.txt @@ -1,3 +1,3 @@ -r requirements_base.txt Django>=1.4.5,<1.5 -django-reversion>=1.6.6,<1.7 \ No newline at end of file +django-reversion>=1.6.6,<1.7 diff --git a/test_requirements/django-1.5.txt b/test_requirements/django-1.5.txt index 47ee73c8cd3..2607ecb0c2f 100644 --- a/test_requirements/django-1.5.txt +++ b/test_requirements/django-1.5.txt @@ -1,3 +1,3 @@ -r requirements_base.txt Django>=1.5,<1.6 -django-reversion>=1.7,<1.8 \ No newline at end of file +django-reversion>=1.7,<1.8 diff --git a/test_requirements/django-1.6.txt b/test_requirements/django-1.6.txt index af6fe71838e..38d32edac8d 100644 --- a/test_requirements/django-1.6.txt +++ b/test_requirements/django-1.6.txt @@ -1,4 +1,6 @@ -r requirements_base.txt https://github.com/django/django/archive/stable/1.6.x.zip#egg=django -e git+https://github.com/etianen/django-reversion/tree/django-1.6#egg=django-reversion +-e git+https://github.com/meshy/django-hvad/tree/python3.3-django1.6#egg=hvad + From c7b87a308b5401bcdcdf029d497449d6a5c01ced Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Fri, 13 Sep 2013 10:32:55 +0200 Subject: [PATCH 19/43] Fix typo --- cms/models/pluginmodel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cms/models/pluginmodel.py b/cms/models/pluginmodel.py index 31db214ab8e..0ab90279e58 100644 --- a/cms/models/pluginmodel.py +++ b/cms/models/pluginmodel.py @@ -11,7 +11,7 @@ from django.db.models.base import model_unpickle from django.db.models.query_utils import DeferredAttribute from django.utils import timezone -from django.utils.compat import DJANGO_1_5 +from cms.utils.compat import DJANGO_1_5 import json as simplejson from django.utils.translation import ugettext_lazy as _ from cms.exceptions import DontUsePageAttributeWarning From e0f204495e17dc18cb367a83279b6de045ad4780 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Fri, 13 Sep 2013 11:15:48 +0200 Subject: [PATCH 20/43] Fix requirements --- test_requirements/django-1.6.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test_requirements/django-1.6.txt b/test_requirements/django-1.6.txt index 38d32edac8d..e92a087d20f 100644 --- a/test_requirements/django-1.6.txt +++ b/test_requirements/django-1.6.txt @@ -1,6 +1,6 @@ -r requirements_base.txt https://github.com/django/django/archive/stable/1.6.x.zip#egg=django --e git+https://github.com/etianen/django-reversion/tree/django-1.6#egg=django-reversion --e git+https://github.com/meshy/django-hvad/tree/python3.3-django1.6#egg=hvad +-e git+git://github.com/etianen/django-reversion.git@django-1.6#egg=django-reversion +-e git+git://github.com/meshy/django-hvad.git@python3.3-django1.6#egg=hvad From ea2f2df95d392e89d53e8d9478cc5dc33398d558 Mon Sep 17 00:00:00 2001 From: Charlie Denton Date: Wed, 25 Sep 2013 20:34:01 +0100 Subject: [PATCH 21/43] Fix query counting tests for django 1.6. --- cms/tests/menu.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/cms/tests/menu.py b/cms/tests/menu.py index 1e98478a02e..840a52bfd09 100644 --- a/cms/tests/menu.py +++ b/cms/tests/menu.py @@ -13,6 +13,7 @@ LanguageOverride) from cms.test_utils.util.mock import AttributeObject from cms.utils import get_cms_setting +from cms.utils.compat import DJANGO_1_5 from cms.utils.i18n import force_language from django.conf import settings from django.contrib.auth.models import AnonymousUser, User, Permission, Group @@ -180,14 +181,16 @@ def test_show_menu(self): def test_show_menu_num_queries(self): context = self.get_context() # test standard show_menu - with self.assertNumQueries(5): + with self.assertNumQueries(5 if DJANGO_1_5 else 7): """ The queries should be: get all pages get all page permissions get all titles get the menu cache key + create a savepoint (in django>=1.6) set the menu cache key + release the savepoint (in django>=1.6) """ tpl = Template("{% load menu_tags %}{% show_menu %}") tpl.render(context) @@ -797,15 +800,18 @@ def test_show_submenu(self): def test_show_submenu_num_queries(self): page = self.get_page(6) context = self.get_context(page.get_absolute_url()) + # test standard show_menu - with self.assertNumQueries(5): + with self.assertNumQueries(5 if DJANGO_1_5 else 7): """ The queries should be: get all pages get all page permissions get all titles get the menu cache key + create a savepoint (in django>=1.6) set the menu cache key + release the savepoint (in django>=1.6) """ tpl = Template("{% load menu_tags %}{% show_sub_menu %}") tpl.render(context) @@ -865,14 +871,16 @@ def test_not_in_navigation_num_queries(self): with LanguageOverride('en'): context = self.get_context(a.get_absolute_url()) - with self.assertNumQueries(5): + with self.assertNumQueries(5 if DJANGO_1_5 else 7): """ The queries should be: get all pages get all page permissions get all titles get the menu cache key + create a savepoint (in django>=1.6) set the menu cache key + release the savepoint (in django>=1.6) """ # Actually seems to run: tpl = Template("{% load menu_tags %}{% show_menu_below_id 'a' 0 100 100 100 %}") From 31f81ad542bdd97c194da4c81d3ddbc47f8f674b Mon Sep 17 00:00:00 2001 From: Charlie Denton Date: Wed, 25 Sep 2013 20:48:22 +0100 Subject: [PATCH 22/43] Fix typo introduced in 7715bc7. This was stopping kwargs from being passed correctly to a superclass. --- cms/admin/permissionadmin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cms/admin/permissionadmin.py b/cms/admin/permissionadmin.py index 11961d13197..19e9642c9a0 100644 --- a/cms/admin/permissionadmin.py +++ b/cms/admin/permissionadmin.py @@ -70,7 +70,7 @@ def get_formset(self, request, obj=None, **kwargs): if not obj.has_move_page_permission(request): exclude.append('can_move_page') formset_cls = super(PagePermissionInlineAdmin, self - ).get_formset(request, obj=None, exclude=exclude, *kwargs) + ).get_formset(request, obj=None, exclude=exclude, **kwargs) qs = self.queryset(request) if obj is not None: qs = qs.filter(page=obj) From 113be1069e60758da51c8f1f3cf484a8a4e687c0 Mon Sep 17 00:00:00 2001 From: Charlie Denton Date: Wed, 25 Sep 2013 23:00:53 +0100 Subject: [PATCH 23/43] Add psycopg2 to django 1.6 test requirements. --- test_requirements/django-1.6.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test_requirements/django-1.6.txt b/test_requirements/django-1.6.txt index e92a087d20f..8a691e7a8bf 100644 --- a/test_requirements/django-1.6.txt +++ b/test_requirements/django-1.6.txt @@ -1,6 +1,5 @@ -r requirements_base.txt https://github.com/django/django/archive/stable/1.6.x.zip#egg=django -e git+git://github.com/etianen/django-reversion.git@django-1.6#egg=django-reversion +psycopg2==2.4 -e git+git://github.com/meshy/django-hvad.git@python3.3-django1.6#egg=hvad - - From 4e4aa2035ead4f914b01eb2c4576abec30b1fb10 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Fri, 27 Sep 2013 15:56:42 +0200 Subject: [PATCH 24/43] Switch to mainline hvad --- test_requirements/django-1.6.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_requirements/django-1.6.txt b/test_requirements/django-1.6.txt index 8a691e7a8bf..6ee527ee360 100644 --- a/test_requirements/django-1.6.txt +++ b/test_requirements/django-1.6.txt @@ -2,4 +2,4 @@ https://github.com/django/django/archive/stable/1.6.x.zip#egg=django -e git+git://github.com/etianen/django-reversion.git@django-1.6#egg=django-reversion psycopg2==2.4 --e git+git://github.com/meshy/django-hvad.git@python3.3-django1.6#egg=hvad +https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad From 2984330c2b20f76288e6966185527b5a22d1879a Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Fri, 27 Sep 2013 23:57:50 +0200 Subject: [PATCH 25/43] Exclude Python 3.3 / Django 1.6 / MySQL from build matrix as mysql-python doesn't support Python 3 ATM. --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index e6e1edeb820..0af5e90aebe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -52,6 +52,8 @@ matrix: env: DJANGO=1.4 DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' - python: 3.3 env: DJANGO=1.5 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' + - python: 3.3 + env: DJANGO=1.6 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' allow_failures: - python: 3.3 env: DJANGO=1.6 DATABASE_URL='sqlite://localhost/:memory:' From 3668e5dc866f9d149138405779ad5a7bb9cafa4c Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Wed, 13 Nov 2013 09:57:01 +0100 Subject: [PATCH 26/43] Switch to stable django 1.6 --- test_requirements/django-1.6.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_requirements/django-1.6.txt b/test_requirements/django-1.6.txt index 6ee527ee360..732a7aa43e9 100644 --- a/test_requirements/django-1.6.txt +++ b/test_requirements/django-1.6.txt @@ -1,5 +1,5 @@ -r requirements_base.txt -https://github.com/django/django/archive/stable/1.6.x.zip#egg=django +django>=1.6 -e git+git://github.com/etianen/django-reversion.git@django-1.6#egg=django-reversion psycopg2==2.4 https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad From 85a8e18255f2ae0322a296bc112227d9241ca74e Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sat, 16 Nov 2013 12:34:31 +0100 Subject: [PATCH 27/43] Remove Django 1.6 from allow failures --- .travis.yml | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0af5e90aebe..bf069f90674 100644 --- a/.travis.yml +++ b/.travis.yml @@ -41,7 +41,6 @@ notifications: - "irc.freenode.org#django-cms" - "irc.freenode.org#django-cms-sprint" - matrix: exclude: - python: 3.3 @@ -54,22 +53,3 @@ matrix: env: DJANGO=1.5 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' - python: 3.3 env: DJANGO=1.6 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' - allow_failures: - - python: 3.3 - env: DJANGO=1.6 DATABASE_URL='sqlite://localhost/:memory:' - - python: 3.3 - env: DJANGO=1.6 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' - - python: 3.3 - env: DJANGO=1.6 DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' - - python: 2.7 - env: DJANGO=1.6 DATABASE_URL='sqlite://localhost/:memory:' - - python: 2.7 - env: DJANGO=1.6 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' - - python: 2.7 - env: DJANGO=1.6 DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' - - python: 2.6 - env: DJANGO=1.6 DATABASE_URL='sqlite://localhost/:memory:' - - python: 2.6 - env: DJANGO=1.6 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' - - python: 2.6 - env: DJANGO=1.6 DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' From 1fefae13c4087c6295176b2b86d8b159cbb52a00 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sat, 16 Nov 2013 12:42:49 +0100 Subject: [PATCH 28/43] Allow Django trunk to build matrix (failures allowed) --- .travis.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/.travis.yml b/.travis.yml index bf069f90674..7699cf63042 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,6 +13,9 @@ env: - DJANGO=1.6 DATABASE_URL='sqlite://localhost/:memory:' - DJANGO=1.6 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' - DJANGO=1.6 DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' + - DJANGO=trunk DATABASE_URL='sqlite://localhost/:memory:' + - DJANGO=trunk DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' + - DJANGO=trunk DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' before_script: - sh -c "if [ '$DATABASE_URL' = 'postgres://postgres@127.0.0.1/djangocms_test' ]; then psql -c 'DROP DATABASE IF EXISTS djangocms_test;' -U postgres; fi" @@ -53,3 +56,22 @@ matrix: env: DJANGO=1.5 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' - python: 3.3 env: DJANGO=1.6 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' + allow_failures: + - python: 3.3 + env: DJANGO=trunk DATABASE_URL='sqlite://localhost/:memory:' + - python: 3.3 + env: DJANGO=trunk DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' + - python: 3.3 + env: DJANGO=trunk DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' + - python: 2.7 + env: DJANGO=trunk DATABASE_URL='sqlite://localhost/:memory:' + - python: 2.7 + env: DJANGO=trunk DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' + - python: 2.7 + env: DJANGO=trunk DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' + - python: 2.6 + env: DJANGO=trunk DATABASE_URL='sqlite://localhost/:memory:' + - python: 2.6 + env: DJANGO=trunk DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' + - python: 2.6 + env: DJANGO=trunk DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' \ No newline at end of file From 554c82980f54aa81d421816f74dac360759c0584 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sat, 16 Nov 2013 12:43:05 +0100 Subject: [PATCH 29/43] Update test requirements --- test_requirements/django-1.6.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_requirements/django-1.6.txt b/test_requirements/django-1.6.txt index 732a7aa43e9..a58d24c4ffa 100644 --- a/test_requirements/django-1.6.txt +++ b/test_requirements/django-1.6.txt @@ -1,5 +1,5 @@ -r requirements_base.txt django>=1.6 --e git+git://github.com/etianen/django-reversion.git@django-1.6#egg=django-reversion +django-reversion>=1.8 psycopg2==2.4 https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad From 010f5a9b55a7c54a5d0589bf53a01c32273107b0 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Tue, 19 Nov 2013 21:03:41 +0100 Subject: [PATCH 30/43] Remove python 2.6 / django trunk from build matrix --- .travis.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7699cf63042..8cb4ac7e89f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -56,6 +56,12 @@ matrix: env: DJANGO=1.5 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' - python: 3.3 env: DJANGO=1.6 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' + - python: 2.6 + env: DJANGO=trunk DATABASE_URL='sqlite://localhost/:memory:' + - python: 2.6 + env: DJANGO=trunk DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' + - python: 2.6 + env: DJANGO=trunk DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' allow_failures: - python: 3.3 env: DJANGO=trunk DATABASE_URL='sqlite://localhost/:memory:' @@ -69,9 +75,3 @@ matrix: env: DJANGO=trunk DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' - python: 2.7 env: DJANGO=trunk DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' - - python: 2.6 - env: DJANGO=trunk DATABASE_URL='sqlite://localhost/:memory:' - - python: 2.6 - env: DJANGO=trunk DATABASE_URL='mysql://root@127.0.0.1/djangocms_test' - - python: 2.6 - env: DJANGO=trunk DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' \ No newline at end of file From ac155b56747917d3645e661d22b08b73ef0a22f7 Mon Sep 17 00:00:00 2001 From: Roberto Date: Mon, 11 Nov 2013 16:22:53 +0100 Subject: [PATCH 31/43] With the update of django-reversion to v1.8, its API has changed. get_version_data() does not accept VERSION_CHANGE anymore, and actually VERSION_CHANGE has been removed from reversion.models --- cms/tests/reversion_tests.py | 15 +++++++++++---- cms/utils/helpers.py | 19 ++++++++++++++----- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/cms/tests/reversion_tests.py b/cms/tests/reversion_tests.py index 9c49ebec99f..ee6314ac5b6 100644 --- a/cms/tests/reversion_tests.py +++ b/cms/tests/reversion_tests.py @@ -17,7 +17,9 @@ from django.core.urlresolvers import reverse from os.path import join import reversion -from reversion.models import Revision, Version, VERSION_CHANGE +from reversion.models import Revision, Version +if reversion.__version__ < (1,8,0): + from reversion.models import VERSION_CHANGE class BasicReversionTestCase(CMSTestCase): @@ -246,9 +248,14 @@ def test_file_persistence(self): # manually add a revision because we use the explicit way # django-cms uses too. adapter = reversion.get_adapter(FileModel) - reversion.revision_context_manager.add_to_context( - reversion.default_revision_manager, file1, - adapter.get_version_data(file1, VERSION_CHANGE)) + if reversion.__version__ < (1,8,0): + reversion.revision_context_manager.add_to_context( + reversion.default_revision_manager, file1, + adapter.get_version_data(file1, VERSION_CHANGE)) + else: + reversion.revision_context_manager.add_to_context( + reversion.default_revision_manager, file1, + adapter.get_version_data(file1)) # reload the instance from db file2 = FileModel.objects.all()[0] # delete the instance. diff --git a/cms/utils/helpers.py b/cms/utils/helpers.py index 21a2f2d9c08..8f5fa79fac4 100644 --- a/cms/utils/helpers.py +++ b/cms/utils/helpers.py @@ -16,7 +16,6 @@ def reversion_register(model_class, fields=None, follow=(), format="json", exclu if not 'reversion' in settings.INSTALLED_APPS: return - from reversion.models import VERSION_CHANGE if fields and exclude_fields: raise ValueError("Just one of fields, exclude_fields arguments can be passed.") @@ -38,7 +37,8 @@ def make_revision_with_plugins(obj, user=None, message=None): # we can safely import reversion - calls here always check for # reversion in installed_applications first import reversion - from reversion.models import VERSION_CHANGE + if reversion.__version__ < (1,8,0): + from reversion.models import VERSION_CHANGE """ Only add to revision if it is a draft. """ @@ -58,16 +58,25 @@ def make_revision_with_plugins(obj, user=None, message=None): revision_context.set_comment(message) # add toplevel object to the revision adapter = revision_manager.get_adapter(obj.__class__) - revision_context.add_to_context(revision_manager, obj, adapter.get_version_data(obj, VERSION_CHANGE)) + if reversion.__version__ < (1,8,0): + revision_context.add_to_context(revision_manager, obj, adapter.get_version_data(obj, VERSION_CHANGE)) + else: + revision_context.add_to_context(revision_manager, obj, adapter.get_version_data(obj)) # add plugins and subclasses to the revision filters = {'placeholder__%s' % placeholder_relation: obj} for plugin in CMSPlugin.objects.filter(**filters): plugin_instance, admin = plugin.get_plugin_instance() if plugin_instance: padapter = revision_manager.get_adapter(plugin_instance.__class__) - revision_context.add_to_context(revision_manager, plugin_instance, padapter.get_version_data(plugin_instance, VERSION_CHANGE)) + if reversion.__version__ < (1,8,0): + revision_context.add_to_context(revision_manager, plugin_instance, padapter.get_version_data(plugin_instance, VERSION_CHANGE)) + else: + revision_context.add_to_context(revision_manager, plugin_instance, padapter.get_version_data(plugin_instance)) bpadapter = revision_manager.get_adapter(plugin.__class__) - revision_context.add_to_context(revision_manager, plugin, bpadapter.get_version_data(plugin, VERSION_CHANGE)) + if reversion.__version__ < (1,8,0): + revision_context.add_to_context(revision_manager, plugin, bpadapter.get_version_data(plugin, VERSION_CHANGE)) + else: + revision_context.add_to_context(revision_manager, plugin, bpadapter.get_version_data(plugin)) def find_placeholder_relation(obj): return 'page' From ce57267bb1bf1d4f1f02ef802f5a1bf388922a86 Mon Sep 17 00:00:00 2001 From: Roberto Date: Mon, 11 Nov 2013 23:04:07 +0100 Subject: [PATCH 32/43] fix ugly check --- cms/tests/reversion_tests.py | 4 ++-- cms/utils/helpers.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cms/tests/reversion_tests.py b/cms/tests/reversion_tests.py index ee6314ac5b6..95b6b1a4ea3 100644 --- a/cms/tests/reversion_tests.py +++ b/cms/tests/reversion_tests.py @@ -18,7 +18,7 @@ from os.path import join import reversion from reversion.models import Revision, Version -if reversion.__version__ < (1,8,0): +if hasattr(reversion.models, 'VERSION_CHANGE'): from reversion.models import VERSION_CHANGE @@ -248,7 +248,7 @@ def test_file_persistence(self): # manually add a revision because we use the explicit way # django-cms uses too. adapter = reversion.get_adapter(FileModel) - if reversion.__version__ < (1,8,0): + if hasattr(reversion.models, 'VERSION_CHANGE'): reversion.revision_context_manager.add_to_context( reversion.default_revision_manager, file1, adapter.get_version_data(file1, VERSION_CHANGE)) diff --git a/cms/utils/helpers.py b/cms/utils/helpers.py index 8f5fa79fac4..445bafafb30 100644 --- a/cms/utils/helpers.py +++ b/cms/utils/helpers.py @@ -37,7 +37,7 @@ def make_revision_with_plugins(obj, user=None, message=None): # we can safely import reversion - calls here always check for # reversion in installed_applications first import reversion - if reversion.__version__ < (1,8,0): + if hasattr(reversion.models, 'VERSION_CHANGE'): from reversion.models import VERSION_CHANGE """ Only add to revision if it is a draft. @@ -58,7 +58,7 @@ def make_revision_with_plugins(obj, user=None, message=None): revision_context.set_comment(message) # add toplevel object to the revision adapter = revision_manager.get_adapter(obj.__class__) - if reversion.__version__ < (1,8,0): + if hasattr(reversion.models, 'VERSION_CHANGE'): revision_context.add_to_context(revision_manager, obj, adapter.get_version_data(obj, VERSION_CHANGE)) else: revision_context.add_to_context(revision_manager, obj, adapter.get_version_data(obj)) @@ -68,12 +68,12 @@ def make_revision_with_plugins(obj, user=None, message=None): plugin_instance, admin = plugin.get_plugin_instance() if plugin_instance: padapter = revision_manager.get_adapter(plugin_instance.__class__) - if reversion.__version__ < (1,8,0): + if hasattr(reversion.models, 'VERSION_CHANGE'): revision_context.add_to_context(revision_manager, plugin_instance, padapter.get_version_data(plugin_instance, VERSION_CHANGE)) else: revision_context.add_to_context(revision_manager, plugin_instance, padapter.get_version_data(plugin_instance)) bpadapter = revision_manager.get_adapter(plugin.__class__) - if reversion.__version__ < (1,8,0): + if hasattr(reversion.models, 'VERSION_CHANGE'): revision_context.add_to_context(revision_manager, plugin, bpadapter.get_version_data(plugin, VERSION_CHANGE)) else: revision_context.add_to_context(revision_manager, plugin, bpadapter.get_version_data(plugin)) From 6014a0904cfd571e4a0c23ad594cca78520c3dc9 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Tue, 26 Nov 2013 19:31:49 +0100 Subject: [PATCH 33/43] Re-add hvad to test_requirements --- test_requirements/django-1.6.txt | 2 -- test_requirements/requirements_base.txt | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/test_requirements/django-1.6.txt b/test_requirements/django-1.6.txt index a58d24c4ffa..a283154df74 100644 --- a/test_requirements/django-1.6.txt +++ b/test_requirements/django-1.6.txt @@ -1,5 +1,3 @@ -r requirements_base.txt django>=1.6 django-reversion>=1.8 -psycopg2==2.4 -https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad diff --git a/test_requirements/requirements_base.txt b/test_requirements/requirements_base.txt index b3756e21d67..acf77d1cc92 100644 --- a/test_requirements/requirements_base.txt +++ b/test_requirements/requirements_base.txt @@ -11,6 +11,7 @@ django-mptt>=0.6 django-sekizai>=0.7 argparse dj-database-url +https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad -e git+git://github.com/divio/djangocms-admin-style.git#egg=djangocms-admin-style -e git+git://github.com/divio/djangocms-text-ckeditor.git#egg=djangocms-text-ckeditor -e git+git://github.com/divio/djangocms-column.git#egg=djangocms-column From b813471dd66227c99f80bd189dc0881b4cdf0bee Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sun, 17 Nov 2013 11:52:24 +0100 Subject: [PATCH 34/43] Remove TransactionMiddleware from tests configuration in Django 1.6 --- cms/test_utils/cli.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cms/test_utils/cli.py b/cms/test_utils/cli.py index da7cebbe0e2..b7fc238fcf7 100644 --- a/cms/test_utils/cli.py +++ b/cms/test_utils/cli.py @@ -2,6 +2,7 @@ from __future__ import with_statement import os import dj_database_url +from cms.utils.compat import DJANGO_1_5 gettext = lambda s: s @@ -63,7 +64,6 @@ def configure(db_url, **extra): 'django.middleware.locale.LocaleMiddleware', 'django.middleware.doc.XViewMiddleware', 'django.middleware.common.CommonMiddleware', - 'django.middleware.transaction.TransactionMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware', 'cms.middleware.language.LanguageCookieMiddleware', 'cms.middleware.user.CurrentUserMiddleware', @@ -297,6 +297,8 @@ def configure(db_url, **extra): ) from django.utils.functional import empty + if DJANGO_1_5: + defaults['MIDDLEWARE_CLASSES'].append('django.middleware.transaction.TransactionMiddleware') settings._wrapped = empty defaults.update(extra) # add data from env From 78b6690d466ca2b70484448ccc98380250c7b4d6 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sun, 17 Nov 2013 11:53:05 +0100 Subject: [PATCH 35/43] reversion 1.8+ compatibility --- cms/admin/pageadmin.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cms/admin/pageadmin.py b/cms/admin/pageadmin.py index 1136d2596ff..a59f7f0ec0e 100644 --- a/cms/admin/pageadmin.py +++ b/cms/admin/pageadmin.py @@ -84,6 +84,7 @@ def create_revision(): return ReversionContext() PUBLISH_COMMENT = "Publish" +INITIAL_COMMENT = "Initial version." class PageAdmin(PlaceholderAdmin, ModelAdmin): @@ -921,9 +922,10 @@ def publish_page(self, request, page_id): from reversion.models import Version content_type = ContentType.objects.get_for_model(Page) - versions_qs = Version.objects.filter(type=1, content_type=content_type, object_id_int=page.pk) + # reversion 1.8+ removes type field, revision filtering must be based on comments + versions_qs = Version.objects.filter(content_type=content_type, object_id_int=page.pk) deleted = [] - for version in versions_qs.exclude(revision__comment__exact=PUBLISH_COMMENT): + for version in versions_qs.exclude(revision__comment__in=(INITIAL_COMMENT, PUBLISH_COMMENT)): if not version.revision_id in deleted: revision = version.revision revision.delete() From 618fce1b26e1bf75a4e37052db74ca6cbe856e51 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sun, 17 Nov 2013 12:16:59 +0100 Subject: [PATCH 36/43] Fix permmod tests on Django 1.6 --- cms/tests/permmod.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cms/tests/permmod.py b/cms/tests/permmod.py index 122916c189c..7f54e98042a 100644 --- a/cms/tests/permmod.py +++ b/cms/tests/permmod.py @@ -812,6 +812,7 @@ def test_public_for_all_num_queries(self): request = self.get_request(user) site = Site() site.pk = 1 + site.save() page = Page() page.pk = 1 page.level = 0 @@ -866,6 +867,7 @@ def test_authed_basic_perm(self): def test_authed_basic_perm_num_queries(self): site = Site() site.pk = 1 + site.save() with SettingsOverride(CMS_PUBLIC_FOR='staff'): user = User.objects.create_user('user', 'user@domain.com', 'user') user.user_permissions.add(Permission.objects.get(codename='view_page')) From a48a5fffe3da4d916cbf08c94eb1cb60fe37dcb6 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sun, 8 Dec 2013 11:22:31 +0100 Subject: [PATCH 37/43] Fix is_home default value --- cms/models/pagemodel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cms/models/pagemodel.py b/cms/models/pagemodel.py index 1947914887d..d9a0dd7c347 100644 --- a/cms/models/pagemodel.py +++ b/cms/models/pagemodel.py @@ -74,7 +74,7 @@ class Page(with_metaclass(PageMetaClass, MPTTModel)): limit_visibility_in_menu = models.SmallIntegerField(_("menu visibility"), default=None, null=True, blank=True, choices=LIMIT_VISIBILITY_IN_MENU_CHOICES, db_index=True, help_text=_("limit when this page is visible in the menu")) - is_home = models.BooleanField(editable=False, db_index=True) + is_home = models.BooleanField(editable=False, db_index=True, default=False) application_urls = models.CharField(_('application'), max_length=200, blank=True, null=True, db_index=True) application_namespace = models.CharField(_('application namespace'), max_length=200, blank=True, null=True) level = models.PositiveIntegerField(db_index=True, editable=False) From 6ab3e45839930025914943029fc7bd7a07291334 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sun, 8 Dec 2013 14:44:56 +0100 Subject: [PATCH 38/43] Create a TransactionCMSTestCase to use TransactionTestCase --- cms/test_utils/testcases.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/cms/test_utils/testcases.py b/cms/test_utils/testcases.py index 6e41a4f24c3..20db6573a40 100644 --- a/cms/test_utils/testcases.py +++ b/cms/test_utils/testcases.py @@ -77,11 +77,11 @@ def showWarning(message, category, filename, lineno, file=None, line=None): return result -class CMSTestCase(testcases.TestCase): +class BaseCMSTestCase(object): counter = 1 def _fixture_setup(self): - super(CMSTestCase, self)._fixture_setup() + super(BaseCMSTestCase, self)._fixture_setup() self.create_fixtures() activate("en") @@ -92,7 +92,7 @@ def create_fixtures(self): def _post_teardown(self): # Needed to clean the menu keys cache, see menu.menu_pool.clear() menu_pool.clear() - super(CMSTestCase, self)._post_teardown() + super(BaseCMSTestCase, self)._post_teardown() set_current_user(None) def login_user_context(self, user): @@ -362,6 +362,14 @@ def failUnlessWarns(self, category, message, f, *args, **kwargs): assertWarns = failUnlessWarns +class CMSTestCase(BaseCMSTestCase, testcases.TestCase): + pass + + +class TransactionCMSTestCase(BaseCMSTestCase, testcases.TransactionTestCase): + pass + + class SettingsOverrideTestCase(CMSTestCase): settings_overrides = {} From ef64e2ce669b7db4909b9bff227a821234538873 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sun, 8 Dec 2013 14:45:15 +0100 Subject: [PATCH 39/43] Use TransactionCMSTestCase for ReversionTestCase --- cms/tests/reversion_tests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cms/tests/reversion_tests.py b/cms/tests/reversion_tests.py index 95b6b1a4ea3..3d278745544 100644 --- a/cms/tests/reversion_tests.py +++ b/cms/tests/reversion_tests.py @@ -7,7 +7,7 @@ from cms.models.pluginmodel import CMSPlugin from djangocms_text_ckeditor.models import Text from cms.test_utils.project.fileapp.models import FileModel -from cms.test_utils.testcases import CMSTestCase, URL_CMS_PAGE, URL_CMS_PAGE_CHANGE, URL_CMS_PAGE_ADD, \ +from cms.test_utils.testcases import CMSTestCase, TransactionCMSTestCase, URL_CMS_PAGE, URL_CMS_PAGE_CHANGE, URL_CMS_PAGE_ADD, \ URL_CMS_PLUGIN_ADD, URL_CMS_PLUGIN_EDIT from cms.test_utils.util.context_managers import SettingsOverride from django.conf import settings @@ -42,7 +42,7 @@ def test_number_revisions(self): self.assertEquals(Revision.objects.all().count(), 1) -class ReversionTestCase(CMSTestCase): +class ReversionTestCase(TransactionCMSTestCase): def setUp(self): u = User(username="test", is_staff=True, is_active=True, is_superuser=True) From 13642f01b13ea73e34f76a403395f2ffaf41ac21 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sun, 8 Dec 2013 10:38:13 +0100 Subject: [PATCH 40/43] Fix import --- cms/utils/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cms/utils/conf.py b/cms/utils/conf.py index 2a46b3a1765..82c10c1ee15 100644 --- a/cms/utils/conf.py +++ b/cms/utils/conf.py @@ -4,7 +4,6 @@ from cms.utils.compat.urls import urljoin from cms import constants from cms.exceptions import CMSDeprecationWarning -from django.contrib.sites.models import Site from django.conf import settings from django.core.exceptions import ImproperlyConfigured from django.utils.translation import ugettext_lazy as _ @@ -228,6 +227,7 @@ def get_cms_setting(name): def get_site_id(site): + from django.contrib.sites.models import Site if isinstance(site, Site): return site.id try: From 21936821b93f42c2e525c9c6085c5cc0cbe043c7 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sun, 8 Dec 2013 18:58:03 +0100 Subject: [PATCH 41/43] Django 1.6 doesn't like get_or_create in migrations, apparently --- cms/migrations/0038_publish_page_permission.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/cms/migrations/0038_publish_page_permission.py b/cms/migrations/0038_publish_page_permission.py index d3aa0698802..87b23708f6e 100644 --- a/cms/migrations/0038_publish_page_permission.py +++ b/cms/migrations/0038_publish_page_permission.py @@ -8,11 +8,16 @@ class Migration(DataMigration): def forwards(self, orm): "Write your forwards methods here." - # Note: Remember to use orm['appname.ModelName'] rather than "from appname.models..." - ct, created = orm['contenttypes.ContentType'].objects.get_or_create( - model='page', app_label='cms', defaults={'name': u'Page'}) - perm, created = orm['auth.permission'].objects.get_or_create( - content_type=ct, codename='publish_page', defaults={'name': u'Can publish Page'}) + try: + ct = orm['contenttypes.ContentType'].objects.get(model='page', app_label='cms') + except orm['contenttypes.ContentType'].DoesNotExist: + ct = orm['contenttypes.ContentType'].objects.create(name='Page', model='page', app_label='cms') + try: + perm = orm['auth.permission'].objects.get(codename='publish_page') + except orm['auth.permission'].DoesNotExist: + perm = orm['auth.permission'].objects.create(content_type=ct, codename='publish_page', name=u'Can publish Page') + + def backwards(self, orm): "Write your backwards methods here." From 504a12332c2605b6ced588abdd8dd171e84a9402 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sun, 8 Dec 2013 19:38:16 +0100 Subject: [PATCH 42/43] Update reversion for trunk --- test_requirements/django-trunk.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_requirements/django-trunk.txt b/test_requirements/django-trunk.txt index ce8081a4142..012cc09ab96 100644 --- a/test_requirements/django-trunk.txt +++ b/test_requirements/django-trunk.txt @@ -1,4 +1,4 @@ -r requirements_base.txt https://github.com/django/django/tarball/master/django.tar.gz#egg=django -django-reversion>=1.7,<1.8 +django-reversion>=1.8 From 4a6481efb26c6b9ce0676eea043417a3d17e08cb Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sun, 8 Dec 2013 19:44:58 +0100 Subject: [PATCH 43/43] Code cleanup --- cms/admin/placeholderadmin.py | 11 ++++++----- cms/models/pagemodel.py | 15 +++++++------- cms/models/pluginmodel.py | 27 +++++++++++++------------- cms/plugin_base.py | 12 ++++++------ cms/templatetags/cms_js_tags.py | 9 ++++----- cms/test_utils/project/noadmin_urls.py | 3 +-- cms/utils/compat/__init__.py | 1 - 7 files changed, 38 insertions(+), 40 deletions(-) diff --git a/cms/admin/placeholderadmin.py b/cms/admin/placeholderadmin.py index e52ecebf1cc..60f524a1dc5 100644 --- a/cms/admin/placeholderadmin.py +++ b/cms/admin/placeholderadmin.py @@ -3,7 +3,7 @@ from django.contrib.admin.helpers import AdminForm from django.utils.decorators import method_decorator from django.db import transaction -import json as simplejson +import json from django.views.decorators.clickjacking import xframe_options_sameorigin from cms.constants import PLUGIN_COPY_ACTION, PLUGIN_MOVE_ACTION @@ -15,7 +15,8 @@ from cms.utils.compat.dj import force_unicode from cms.plugins.utils import has_reached_plugin_limit, requires_reload from django.contrib.admin import ModelAdmin -from django.http import HttpResponse, Http404, HttpResponseBadRequest, HttpResponseForbidden +from django.http import (HttpResponse, Http404, HttpResponseBadRequest, + HttpResponseForbidden) from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from django.template.defaultfilters import force_escape, escapejs @@ -271,7 +272,7 @@ def add_plugin(self, request): args=[plugin.pk])), 'breadcrumb': plugin.get_breadcrumb(), } - return HttpResponse(simplejson.dumps(response), content_type='application/json') + return HttpResponse(json.dumps(response), content_type='application/json') @method_decorator(require_POST) @xframe_options_sameorigin @@ -319,7 +320,7 @@ def copy_plugins(self, request): 'desc': force_unicode(plugin.get_short_description())}) self.post_copy_plugins(request, source_placeholder, target_placeholder, plugins) json_response = {'plugin_list': reduced_list, 'reload': reload_required} - return HttpResponse(simplejson.dumps(json_response), content_type='application/json') + return HttpResponse(json.dumps(json_response), content_type='application/json') @xframe_options_sameorigin def edit_plugin(self, request, plugin_id): @@ -440,7 +441,7 @@ def move_plugin(self, request): x += 1 self.post_move_plugin(request, plugin) json_response = {'reload': requires_reload(PLUGIN_MOVE_ACTION, [plugin])} - return HttpResponse(simplejson.dumps(json_response), content_type='application/json') + return HttpResponse(json.dumps(json_response), content_type='application/json') @xframe_options_sameorigin def delete_plugin(self, request, plugin_id): diff --git a/cms/models/pagemodel.py b/cms/models/pagemodel.py index d9a0dd7c347..9ed9224fd89 100644 --- a/cms/models/pagemodel.py +++ b/cms/models/pagemodel.py @@ -1,10 +1,8 @@ # -*- coding: utf-8 -*- from datetime import timedelta +from os.path import join from cms import constants from cms.constants import TEMPLATE_INHERITANCE_MAGIC -from cms.utils.compat.metaclasses import with_metaclass -from cms.utils.conf import get_cms_setting -from django.core.exceptions import PermissionDenied from cms.exceptions import PublicIsUnmodifiable from cms.models.managers import PageManager, PagePermissionsPermissionManager from cms.models.metaclasses import PageMetaClass @@ -12,11 +10,14 @@ from cms.models.pluginmodel import CMSPlugin from cms.publisher.errors import MpttPublisherCantPublish from cms.utils import i18n, page as page_utils +from cms.utils.compat import DJANGO_1_5 +from cms.utils.compat.dj import force_unicode, python_2_unicode_compatible +from cms.utils.compat.metaclasses import with_metaclass +from cms.utils.conf import get_cms_setting from cms.utils.copy_plugins import copy_plugins_to from cms.utils.helpers import reversion_register -from cms.utils.compat.dj import force_unicode, python_2_unicode_compatible -from cms.utils.compat import DJANGO_1_5 from django.contrib.sites.models import Site +from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse from django.db import models from django.db.models import Q @@ -25,8 +26,6 @@ from django.utils.translation import get_language, ugettext_lazy as _ from menus.menu_pool import menu_pool from mptt.models import MPTTModel -from os.path import join - @python_2_unicode_compatible @@ -1112,4 +1111,4 @@ def _reversion(): ) -_reversion() +_reversion() \ No newline at end of file diff --git a/cms/models/pluginmodel.py b/cms/models/pluginmodel.py index 0ab90279e58..0c425675e05 100644 --- a/cms/models/pluginmodel.py +++ b/cms/models/pluginmodel.py @@ -1,27 +1,28 @@ # -*- coding: utf-8 -*- from datetime import date -from cms.utils.compat.metaclasses import with_metaclass - -from django.core.urlresolvers import reverse, NoReverseMatch -from django.utils.safestring import mark_safe import os import warnings +import json + +from cms.exceptions import DontUsePageAttributeWarning +from cms.models.placeholdermodel import Placeholder +from cms.plugin_rendering import PluginContext, render_plugin +from cms.utils import get_cms_setting +from cms.utils.compat import DJANGO_1_5 +from cms.utils.compat.dj import force_unicode, python_2_unicode_compatible +from cms.utils.compat.metaclasses import with_metaclass +from cms.utils.helpers import reversion_register +from django.core.urlresolvers import reverse, NoReverseMatch from django.core.exceptions import ValidationError, ObjectDoesNotExist from django.db import models from django.db.models.base import model_unpickle from django.db.models.query_utils import DeferredAttribute from django.utils import timezone -from cms.utils.compat import DJANGO_1_5 -import json as simplejson +from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ -from cms.exceptions import DontUsePageAttributeWarning -from cms.models.placeholdermodel import Placeholder -from cms.plugin_rendering import PluginContext, render_plugin -from cms.utils.helpers import reversion_register -from cms.utils.compat.dj import force_unicode, python_2_unicode_compatible -from cms.utils import get_cms_setting from mptt.models import MPTTModel, MPTTModelBase + class BoundRenderMeta(object): def __init__(self, meta): self.index = 0 @@ -390,7 +391,7 @@ def get_breadcrumb(self): return breadcrumb def get_breadcrumb_json(self): - result = simplejson.dumps(self.get_breadcrumb()) + result = json.dumps(self.get_breadcrumb()) result = mark_safe(result) return result diff --git a/cms/plugin_base.py b/cms/plugin_base.py index 44c4e2502cd..005612bbeb9 100644 --- a/cms/plugin_base.py +++ b/cms/plugin_base.py @@ -1,26 +1,26 @@ # -*- coding: utf-8 -*- -from cms.constants import PLUGIN_MOVE_ACTION, PLUGIN_COPY_ACTION try: from django.contrib.admin.options import (RenameBaseModelAdminMethods as - ModelAdminMetaClass) -except: + ModelAdminMetaClass) +except ImportError: from django.forms.widgets import (MediaDefiningClass as ModelAdminMetaClass) -from cms.utils.compat.metaclasses import with_metaclass import re +from cms.constants import PLUGIN_MOVE_ACTION, PLUGIN_COPY_ACTION from cms.utils import get_cms_setting +from cms.utils.compat import DJANGO_1_4 +from cms.utils.compat.metaclasses import with_metaclass from cms.utils.placeholder import get_placeholder_conf from cms.utils.compat.dj import force_unicode, python_2_unicode_compatible from cms.exceptions import SubClassNeededError, Deprecated from cms.models import CMSPlugin -from django import forms from django.core.urlresolvers import reverse from django.contrib import admin from django.core.exceptions import ImproperlyConfigured from django.forms.models import ModelForm from django.utils.encoding import smart_str from django.utils.translation import ugettext_lazy as _ -from cms.utils.compat import DJANGO_1_4 + class CMSPluginBaseMetaclass(ModelAdminMetaClass): """ diff --git a/cms/templatetags/cms_js_tags.py b/cms/templatetags/cms_js_tags.py index ac997d5a516..9072e466bba 100644 --- a/cms/templatetags/cms_js_tags.py +++ b/cms/templatetags/cms_js_tags.py @@ -1,22 +1,21 @@ # -*- coding: utf-8 -*- from classytags.core import Tag, Options +from cms.utils.compat import DJANGO_1_4 from django import template from django.core.serializers.json import DjangoJSONEncoder from django.utils.text import javascript_quote -from cms.utils.compat import DJANGO_1_4 - - if DJANGO_1_4: from django.utils import simplejson as json else: import json - register = template.Library() + @register.filter def js(value): return json.dumps(value, cls=DjangoJSONEncoder) + @register.filter def bool(value): if value: @@ -37,4 +36,4 @@ class JavascriptString(Tag): def render_tag(self, context, **kwargs): rendered = self.nodelist.render(context) return u"'%s'" % javascript_quote(rendered.strip()) -register.tag(JavascriptString) +register.tag(JavascriptString) \ No newline at end of file diff --git a/cms/test_utils/project/noadmin_urls.py b/cms/test_utils/project/noadmin_urls.py index b278d5cff6f..618e3e9626e 100644 --- a/cms/test_utils/project/noadmin_urls.py +++ b/cms/test_utils/project/noadmin_urls.py @@ -1,7 +1,6 @@ from cms.utils.conf import get_cms_setting from django.conf import settings -from django.conf.urls import handler500, handler404, patterns, include, \ - url +from django.conf.urls import handler500, handler404, patterns, include, url urlpatterns = patterns('', diff --git a/cms/utils/compat/__init__.py b/cms/utils/compat/__init__.py index c6dd88d27a3..d4504589bbf 100644 --- a/cms/utils/compat/__init__.py +++ b/cms/utils/compat/__init__.py @@ -2,7 +2,6 @@ from distutils.version import LooseVersion import django -DJANGO_1_3 = LooseVersion(django.get_version()) < LooseVersion('1.4') DJANGO_1_4 = LooseVersion(django.get_version()) < LooseVersion('1.5') DJANGO_1_5 = LooseVersion(django.get_version()) < LooseVersion('1.6')