From 81a138bdf66d186846ad355d75b3f07a85d0e3fa Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Tue, 5 Mar 2019 12:39:44 +0100 Subject: [PATCH] Add support for django CMS 3.6 final --- djangocms_installer/config/__init__.py | 2 +- djangocms_installer/config/data.py | 15 +++-- docs/conf.py | 9 +-- setup.py | 4 +- tests/base.py | 19 ++++-- tests/config.py | 89 ++++++++++++++++---------- tests/django.py | 10 +-- tests/fixtures/configs/config-01.ini | 2 +- tests/main.py | 11 ++-- tox.ini | 6 +- 10 files changed, 101 insertions(+), 66 deletions(-) diff --git a/djangocms_installer/config/__init__.py b/djangocms_installer/config/__init__.py index ab8f94d..4b3d4c4 100644 --- a/djangocms_installer/config/__init__.py +++ b/djangocms_installer/config/__init__.py @@ -11,9 +11,9 @@ import pytz import six -from . import data, ini from .. import compat, utils from ..utils import less_than_version, supported_versions +from . import data, ini from .internal import DbAction, validate_project diff --git a/djangocms_installer/config/data.py b/djangocms_installer/config/data.py index 54f1c0d..6b12d00 100644 --- a/djangocms_installer/config/data.py +++ b/djangocms_installer/config/data.py @@ -23,12 +23,12 @@ DJANGOCMS_36 = 'django-cms>=3.6,<3.7' if sys.version_info >= (3, 4): - DJANGOCMS_SUPPORTED = ('3.4', '3.5', 'stable', 'lts', 'develop') - DJANGOCMS_STABLE = '3.5' + DJANGOCMS_SUPPORTED = ('3.4', '3.5', '3.6', 'stable', 'lts', 'develop') + DJANGOCMS_STABLE = '3.6' DJANGOCMS_LTS = '3.4' else: - DJANGOCMS_SUPPORTED = ('3.4', '3.5', 'stable', 'lts', 'develop') - DJANGOCMS_STABLE = '3.5' + DJANGOCMS_SUPPORTED = ('3.4', '3.5', '3.6', 'stable', 'lts', 'develop') + DJANGOCMS_STABLE = '3.6' DJANGOCMS_LTS = '3.4' DJANGOCMS_DEFAULT = DJANGOCMS_STABLE @@ -66,7 +66,7 @@ PACKAGE_MATRIX = { '3.4': DJANGOCMS_34, '3.5': DJANGOCMS_35, - '3.6': DJANGOCMS_DEVELOP, + '3.6': DJANGOCMS_36, } REQUIREMENTS = { @@ -141,7 +141,7 @@ 'plugins-3.5': [ 'djangocms-text-ckeditor>3.6,<3.7', 'djangocms-link>=2.1,<2.2', - 'djangocms-style>=2.0,<2.1', + 'djangocms-snippet>=2.1,<2.2', 'djangocms-googlemap>=1.1,<1.2', 'djangocms-snippet>=2.0,<2.1', 'djangocms-video>=2.0,<2.1', @@ -150,10 +150,11 @@ 'djangocms-picture>=2.0,<2.1', ], 'plugins-3.6': [ - 'djangocms-text-ckeditor>=3.7', + 'djangocms-text-ckeditor>=3.7,<3.8', 'djangocms-link>=2.3', 'djangocms-style>=2.1', 'djangocms-googlemap>=1.2', + 'djangocms-snippet>=2.1,<2.2', 'djangocms-video>=2.0,<2.1', 'djangocms-column>=1.9', 'djangocms-file>=2.2,<3.0', diff --git a/docs/conf.py b/docs/conf.py index 79ba1f2..e5f1252 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -15,6 +15,10 @@ import os import sys +import sphinx.environment +from docutils.utils import get_source_line + + # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. @@ -23,10 +27,7 @@ cwd = os.getcwd() parent = os.path.dirname(cwd) sys.path.append(parent) - -import djangocms_installer -import sphinx.environment -from docutils.utils import get_source_line +import djangocms_installer # isort:skip def _warn_node(self, msg, node, *args, **kwargs): diff --git a/setup.py b/setup.py index 9820f71..a913fe0 100644 --- a/setup.py +++ b/setup.py @@ -3,8 +3,10 @@ import os import sys + +from setuptools import find_packages, setup + import djangocms_installer -from setuptools import setup, find_packages if sys.argv[-1] == 'publish': os.system('python setup.py sdist upload') diff --git a/tests/base.py b/tests/base.py index 8fe05ca..a77a2de 100644 --- a/tests/base.py +++ b/tests/base.py @@ -12,12 +12,6 @@ from six import StringIO -if sys.version_info < (3, 4): - dj_ver = '1.8' -else: - dj_ver = '1.10' - - SYSTEM_ACTIVATE = os.path.join(os.path.dirname(sys.executable), 'activate_this.py') @@ -120,3 +114,16 @@ def setUp(self): print('activating virtualenv', self.virtualenv_dir) sys.executable = os.path.join(self.virtualenv_dir, 'bin', 'python') os.environ['VIRTUAL_ENV'] = self.virtualenv_dir + + +def get_latest_django(latest_stable=False): + if sys.version_info < (3, 4) and not latest_stable: + dj_ver = '1.8' + match = 'Django<1.9' + elif sys.version_info < (3, 4) and latest_stable: + dj_ver = '1.11' + match = 'Django<2.0' + else: + dj_ver = '2.1' + match = 'Django<2.2' + return dj_ver, match diff --git a/tests/config.py b/tests/config.py index f5d3e87..64720fd 100644 --- a/tests/config.py +++ b/tests/config.py @@ -15,7 +15,8 @@ from djangocms_installer.config.data import CMS_VERSION_MATRIX, DJANGO_VERSION_MATRIX from djangocms_installer.install import check_install from djangocms_installer.utils import less_than_version, supported_versions -from .base import BaseTestClass, unittest + +from .base import BaseTestClass, unittest, get_latest_django class TestConfig(BaseTestClass): @@ -25,7 +26,7 @@ def test_default_config(self): self.assertEqual(conf_data.project_name, 'example_prj') - self.assertEqual(conf_data.cms_version, '3.5') + self.assertEqual(conf_data.cms_version, '3.6') self.assertEqual(conf_data.django_version, '1.11') self.assertEqual(conf_data.i18n, 'yes') self.assertEqual(conf_data.reversion, 'yes') @@ -40,7 +41,23 @@ def test_default_config(self): self.assertEqual(conf_data.requirements_file, None) def test_cli_config(self): - dj_version = '1.8' + with self.assertRaises(SystemExit): + dj_version = '1.8' + config.parse([ + '-q', + '--db=postgres://user:pwd@host/dbname', + '--cms-version=stable', + '--django-version={0}'.format(dj_version), + '--i18n=no', + '--reversion=no', + '--permissions=no', + '--use-tz=no', + '-tEurope/Rome', + '-len-CA', '-lde', '-lit', + '-p'+self.project_dir, + 'example_prj']) + + dj_version = '1.11' conf_data = config.parse([ '-q', '--db=postgres://user:pwd@host/dbname', @@ -57,8 +74,8 @@ def test_cli_config(self): self.assertEqual(conf_data.project_name, 'example_prj') - self.assertEqual(conf_data.cms_version, '3.5') - self.assertEqual(conf_data.django_version, '1.8') + self.assertEqual(conf_data.cms_version, '3.6') + self.assertEqual(conf_data.django_version, '1.11') self.assertEqual(conf_data.i18n, 'yes') self.assertEqual(conf_data.reversion, 'no') self.assertEqual(conf_data.permissions, 'no') @@ -69,12 +86,11 @@ def test_cli_config(self): self.assertEqual(conf_data.db, 'postgres://user:pwd@host/dbname') self.assertEqual(conf_data.db_driver, 'psycopg2') - dj_version = '1.11' + dj_version, dj_match = get_latest_django(latest_stable=True) cms_version = 'develop' conf_data = config.parse([ '-q', '--db=postgres://user:pwd@host/dbname', - '--cms-version=stable', '--django-version={0}'.format(dj_version), '--cms-version={0}'.format(cms_version), '--i18n=no', @@ -131,7 +147,7 @@ def test_cli_config(self): self.assertEqual(conf_data.db, 'postgres://user:pwd@host/dbname') self.assertEqual(conf_data.db_driver, 'psycopg2') - def test_version_mismatch(self): + def test_version_misdj_match(self): with self.assertRaises(SystemExit): conf_data = config.parse([ '-q', @@ -335,7 +351,7 @@ def test_latest_version(self): def test_supported_versions(self): - self.assertEqual(supported_versions('stable', 'stable'), ('1.11', '3.5')) + self.assertEqual(supported_versions('stable', 'stable'), ('1.11', '3.6')) self.assertEqual(supported_versions('stable', '3.1.10'), ('1.11', None)) self.assertEqual(supported_versions('stable', 'rc'), ('1.11', '3.6')) self.assertEqual(supported_versions('stable', 'beta'), ('1.11', '3.6')) @@ -348,16 +364,18 @@ def test_supported_versions(self): with self.assertRaises(RuntimeError): supported_versions('1.5', 'stable'), ('1.8', '3.1') - self.assertEqual(supported_versions('1.9', 'stable'), ('1.9', '3.5')) - self.assertEqual(supported_versions('1.8', 'stable'), ('1.8', '3.5')) + with self.assertRaises(RuntimeError): + self.assertEqual(supported_versions('1.9', 'stable'), ('1.9', '3.5')) + self.assertEqual(supported_versions('1.8', 'stable'), ('1.8', '3.5')) + self.assertEqual(supported_versions('1.9', '3.5'), ('1.9', '3.5')) self.assertEqual(supported_versions('1.8', 'lts'), ('1.8', '3.4')) - self.assertEqual(supported_versions('1.8.3', 'stable'), (None, '3.5')) + self.assertEqual(supported_versions('1.8.3', 'stable'), (None, '3.6')) def test_requirements(self): """ Test for different configuration and package versions """ - dj_version = '1.8' + dj_version, dj_match = get_latest_django(latest_stable=False) conf_data = config.parse([ '-q', '--db=postgres://user:pwd@host/dbname', @@ -368,7 +386,7 @@ def test_requirements(self): '-p'+self.project_dir, 'example_prj']) self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_34) > -1) - self.assertTrue(conf_data.requirements.find('Django<1.9') > -1) + self.assertTrue(conf_data.requirements.find(dj_match) > -1) self.assertFalse(conf_data.requirements.find('django-reversion') > -1) self.assertTrue(conf_data.requirements.find('djangocms-text-ckeditor>3.6,<3.7') > -1) self.assertTrue(conf_data.requirements.find('djangocms-admin-style>=1.2') > -1) @@ -387,12 +405,12 @@ def test_requirements(self): '-p'+self.project_dir, 'example_prj']) - self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_35) > -1) + self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_36) > -1) self.assertTrue(conf_data.requirements.find('Django<2.0') > -1) self.assertFalse(conf_data.requirements.find('django-reversion') > -1) self.assertTrue(conf_data.requirements.find('cmsplugin-filer') == -1) self.assertTrue(conf_data.requirements.find('djangocms-admin-style') > -1) - self.assertTrue(conf_data.requirements.find('djangocms-text-ckeditor>3.6,<3.7') > -1) + self.assertTrue(conf_data.requirements.find('djangocms-text-ckeditor>=3.7,<3.8') > -1) self.assertTrue(conf_data.requirements.find('djangocms-column') > -1) self.assertTrue(conf_data.requirements.find('djangocms-file') > -1) self.assertTrue(conf_data.requirements.find('djangocms-flash') == -1) @@ -415,7 +433,7 @@ def test_requirements(self): '-p'+self.project_dir, 'example_prj']) - self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_DEVELOP) > -1) + self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_36) > -1) self.assertTrue(conf_data.requirements.find('Django<2.0') > -1) self.assertFalse(conf_data.requirements.find('django-reversion') > -1) self.assertTrue(conf_data.requirements.find('djangocms-text-ckeditor') > -1) @@ -433,8 +451,8 @@ def test_requirements(self): self.assertTrue(conf_data.requirements.find('djangocms-teaser') == -1) self.assertTrue(conf_data.requirements.find('djangocms-video') > -1) - dj_version = '1.8' with self.assertRaises(SystemExit): + dj_version = '1.8' conf_data = config.parse([ '-q', '--db=postgres://user:pwd@host/dbname', @@ -458,7 +476,7 @@ def test_requirements(self): '-p'+self.project_dir, 'example_prj']) - self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_DEVELOP) > -1) + self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_36) > -1) self.assertTrue(conf_data.requirements.find('Django<2.0') > -1) self.assertFalse(conf_data.requirements.find('django-reversion') > -1) self.assertTrue(conf_data.requirements.find('django-mptt') > -1) @@ -476,7 +494,7 @@ def test_requirements(self): '-p'+self.project_dir, 'example_prj']) - self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_DEVELOP) > -1) + self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_36) > -1) self.assertTrue(conf_data.requirements.find('Django<2.0') > -1) self.assertFalse(conf_data.requirements.find('django-reversion') > -1) self.assertTrue(conf_data.requirements.find('https://github.com/divio/djangocms-link') > -1) @@ -539,7 +557,7 @@ def test_requirements(self): '-p'+self.project_dir, 'example_prj']) - self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_DEVELOP) > -1) + self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_36) > -1) self.assertTrue(conf_data.requirements.find('Django<2.0') > -1) self.assertFalse(conf_data.requirements.find('django-reversion>=1.10,<1.11') > -1) self.assertTrue(conf_data.requirements.find('djangocms-text-ckeditor') > -1) @@ -547,7 +565,7 @@ def test_requirements(self): self.assertTrue(conf_data.requirements.find('djangocms-teaser') == -1) self.assertTrue(conf_data.requirements.find('south') == -1) - dj_version = '1.11' + dj_version, dj_match = get_latest_django(latest_stable=True) conf_data = config.parse([ '-q', '--db=postgres://user:pwd@host/dbname', @@ -560,8 +578,8 @@ def test_requirements(self): '-p'+self.project_dir, 'example_prj']) - self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_DEVELOP) > -1) - self.assertTrue(conf_data.requirements.find('Django<2.0') > -1) + self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_36) > -1) + self.assertTrue(conf_data.requirements.find(dj_match) > -1) self.assertFalse(conf_data.requirements.find('django-reversion') > -1) self.assertTrue(conf_data.requirements.find('djangocms-text-ckeditor') == -1) self.assertTrue(conf_data.requirements.find('djangocms-admin-style/archive/master') > -1) @@ -581,7 +599,7 @@ def test_requirements(self): '-p'+self.project_dir, 'example_prj']) - self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_DEVELOP) > -1) + self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_36) > -1) self.assertTrue(conf_data.requirements.find('Django<2.0') > -1) self.assertFalse(conf_data.requirements.find('django-reversion') > -1) self.assertTrue(conf_data.requirements.find('djangocms-text-ckeditor') == -1) @@ -608,8 +626,8 @@ def test_requirements(self): else: conf_data = config.parse(requirements_21) - self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_DEVELOP) > -1) - self.assertTrue(conf_data.requirements.find('Django<2.2') > -1) + self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_36) > -1) + self.assertTrue(conf_data.requirements.find(dj_match) > -1) self.assertFalse(conf_data.requirements.find('django-reversion') > -1) self.assertTrue(conf_data.requirements.find('djangocms-text-ckeditor') == -1) self.assertTrue(conf_data.requirements.find('djangocms-admin-style/archive/master.zip') > -1) @@ -635,7 +653,7 @@ def test_requirements(self): '-p'+self.project_dir, 'example_prj']) - self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_35) > -1) + self.assertTrue(conf_data.requirements.find(config.data.DJANGOCMS_36) > -1) self.assertTrue(conf_data.requirements.find('Django<2.0') > -1) def disabled_test_aldryn_compatibility(self): @@ -804,7 +822,7 @@ def test_show_plugins(self): def test_show_requirements(self): sys.stdout = StringIO() - dj_version = '1.8' + dj_version = '1.11' try: conf_data = config.parse([ '-q', @@ -886,17 +904,18 @@ def test_parse_config_file(self, *args): self.assertEqual(7, error.exception.code) args = self.args[0:1] + [self.conf('config-01.ini')] + self.args[1:] + print(args) config_data = config.parse(args) self.unused(config_data) self.assertEqual(self.config_fixture, config_data) # Check if config value and changed value equals. test_data = [ - ('config-02.ini', None, (('cms_version', '3.5'), ('db', 'postgres://user:pwd@host:54321/dbname'))), - ('config-03.ini', None, (('cms_version', '3.5'), ('i18n', 'no'))), - ('config-04.ini', None, (('cms_version', '3.5'), ('use_timezone', 'no'))), - ('config-05.ini', None, (('cms_version', '3.5'), ('timezone', 'Europe/London'))), - ('config-06.ini', None, (('cms_version', '3.5'), ('reversion', 'no'))), - ('config-07.ini', None, (('cms_version', '3.5'), ('permissions', 'no'))), + ('config-02.ini', None, (('cms_version', '3.6'), ('db', 'postgres://user:pwd@host:54321/dbname'))), + ('config-03.ini', None, (('cms_version', '3.6'), ('i18n', 'no'))), + ('config-04.ini', None, (('cms_version', '3.6'), ('use_timezone', 'no'))), + ('config-05.ini', None, (('cms_version', '3.6'), ('timezone', 'Europe/London'))), + ('config-06.ini', None, (('cms_version', '3.6'), ('reversion', 'no'))), + ('config-07.ini', None, (('cms_version', '3.6'), ('permissions', 'no'))), ('config-08.ini', None, (('cms_version', '3.4'), ('i18n', 'no'), ('languages', ['ru']))), ('config-09.ini', None, (('i18n', 'yes'), ('languages', ['en', 'ru']))), ('config-10.ini', 'django_version', '1.11'), diff --git a/tests/django.py b/tests/django.py index b8a2b90..c68a646 100644 --- a/tests/django.py +++ b/tests/django.py @@ -11,7 +11,7 @@ from djangocms_installer import config, django, install -from .base import IsolatedTestClass, dj_ver, unittest +from .base import IsolatedTestClass, get_latest_django, unittest class TestDjango(IsolatedTestClass): @@ -30,8 +30,9 @@ class TestDjango(IsolatedTestClass): ) def test_create_project(self): + dj_version, dj_match = get_latest_django(latest_stable=True) config_data = config.parse(['--db=postgres://user:pwd@host/dbname', - '--cms-version=stable', '--django=%s' % dj_ver, + '--cms-version=stable', '--django=%s' % dj_version, '-q', '-p' + self.project_dir, 'example_prj']) install.requirements(config_data.requirements) django.create_project(config_data) @@ -369,7 +370,7 @@ def test_patch_django_no_plugins(self): extra_path = os.path.join(os.path.dirname(__file__), 'data', 'extra_settings.py') config_data = config.parse(['--db=sqlite://localhost/test.db', '--lang=en', '--extra-settings=%s' % extra_path, - '--django-version=1.8', '-f', '--no-plugins', + '--django-version=1.11', '-f', '--no-plugins', '--cms-version=stable', '--timezone=Europe/Moscow', '-q', '-u', '-zno', '--i18n=no', '-p' + self.project_dir, 'example_path_no_plugin']) @@ -585,8 +586,9 @@ def test_force_django(self): class TestBaseDjango(unittest.TestCase): def test_build_settings(self): """Tests django.__init__._build_settings function.""" + dj_version, dj_match = get_latest_django(latest_stable=True) config_data = config.parse(['--db=postgres://user:pwd@host:5432/dbname', - '--cms-version=stable', '--django=%s' % dj_ver, + '--cms-version=stable', '--django=%s' % dj_version, '-q', '-p .', 'example_prj']) settings = django._build_settings(config_data) self.assertTrue(textwrap.dedent(''' diff --git a/tests/fixtures/configs/config-01.ini b/tests/fixtures/configs/config-01.ini index da70ba5..2b9b031 100644 --- a/tests/fixtures/configs/config-01.ini +++ b/tests/fixtures/configs/config-01.ini @@ -7,7 +7,7 @@ reversion = yes permissions = yes languages = django-version = lts -cms-version = 3.5 +cms-version = 3.6 parent-dir = . bootstrap = no templates = no diff --git a/tests/main.py b/tests/main.py index 9a6ff9b..7b78b8e 100644 --- a/tests/main.py +++ b/tests/main.py @@ -4,17 +4,16 @@ import os import subprocess import sys +from shutil import rmtree from subprocess import CalledProcessError from tempfile import mkdtemp from mock import patch -from shutil import rmtree - from six import binary_type from djangocms_installer import config, install, main -from .base import IsolatedTestClass, dj_ver, unittest +from .base import IsolatedTestClass, get_latest_django, unittest class TestMain(IsolatedTestClass): @@ -75,6 +74,7 @@ def cleanup_skip(self): self.assertTrue(os.path.exists(self.project_dir)) def test_main_invocation(self): + dj_version, dj_match = get_latest_django(latest_stable=True) base_dir = mkdtemp() project_dir = os.path.join(base_dir, 'example_prj') original_dir = os.getcwd() @@ -82,7 +82,7 @@ def test_main_invocation(self): with patch('sys.stdout', self.stdout): with patch('sys.stderr', self.stderr): sys.argv = ['main'] + ['--db=sqlite://localhost/test.db', - '-len', '--cms-version=stable', '--django=%s' % dj_ver, + '-len', '--cms-version=stable', '--django=%s' % dj_version, '-q', '-u', '--verbose', 'example_prj'] main.execute() @@ -122,11 +122,12 @@ def test_base_invocation(self): rmtree(base_dir) def test_two_langs_invocation(self): + dj_version, dj_match = get_latest_django(latest_stable=True) with patch('sys.stdout', self.stdout): with patch('sys.stderr', self.stderr): sys.argv = ['main'] + ['--db=sqlite://localhost/test.db', '-len-GB', '-lfr-fr', '--cms-version=stable', - '--django=%s' % dj_ver, + '--django=%s' % dj_version, '-q', '-u', '-p'+self.project_dir, 'example_prj'] main.execute() diff --git a/tox.ini b/tox.ini index b9a0ac2..b6af372 100644 --- a/tox.ini +++ b/tox.ini @@ -4,10 +4,12 @@ envlist = pep8,isort,docs,py{27,34,35,36,37} passenv = LANG [testenv] -recreate = True commands = {env:COMMAND:python} setup.py test deps = -r{toxinidir}/requirements-test.txt +recreate = True +setenv = + LANG=en_US.UTF-8 [testenv:coverage] commands = @@ -30,7 +32,7 @@ deps = sphinx sphinx-rtd-theme -rrequirements-test.txt -changedir=docs +changedir = docs skip_install = true commands= sphinx-build -W -b html -d {envtmpdir}/doctrees . {toxinidir}/docs/_build/html