diff --git a/.travis.yml b/.travis.yml index e23794d4f..cc1cb74e8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,7 @@ services: install: - python setup.py install - pip install psycopg2 pyelasticsearch elasticutils==0.8.2 wand - - pip install coveralls + - pip install coveralls unittest2 # Pre-test configuration before_script: - psql -c 'create database wagtaildemo;' -U postgres diff --git a/requirements-dev.txt b/requirements-dev.txt index 201f86ed8..008d24d2e 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,5 +1,7 @@ # Requirements essential for developing wagtail (not needed to run it) +unittest2==0.5.1 + # For coverage and PEP8 linting coverage==3.7.1 flake8==2.1.0 diff --git a/tox.ini b/tox.ini index 1d2174125..755bce94e 100644 --- a/tox.ini +++ b/tox.ini @@ -1,26 +1,46 @@ +[deps] +dj16= + Django>=1.6,<1.7 + pyelasticsearch==0.6.1 + elasticutils==0.8.2 + unittest2 + [tox] envlist = + py26-dj16-postgres, + py26-dj16-sqlite, py27-dj16-postgres, py27-dj16-sqlite [testenv] commands=./runtests.py +[testenv:py26-dj16-postgres] +basepython=python2.6 +deps = + {[deps]dj16} + psycopg2==2.5.2 +setenv = + DATABASE_ENGINE=django.db.backends.postgresql_psycopg2 + +[testenv:py26-dj16-sqlite] +basepython=python2.6 +deps = + {[deps]dj16} +setenv = + DATABASE_ENGINE=django.db.backends.sqlite3 + [testenv:py27-dj16-postgres] basepython=python2.7 deps = - Django>=1.6,<1.7 + {[deps]dj16} psycopg2==2.5.2 - pyelasticsearch==0.6.1 - elasticutils==0.8.2 setenv = DATABASE_ENGINE=django.db.backends.postgresql_psycopg2 [testenv:py27-dj16-sqlite] basepython=python2.7 deps = - Django>=1.6,<1.7 - pyelasticsearch==0.6.1 - elasticutils==0.8.2 + {[deps]dj16} setenv = DATABASE_ENGINE=django.db.backends.sqlite3 diff --git a/wagtail/wagtailadmin/forms.py b/wagtail/wagtailadmin/forms.py index 6e30381c1..e55a831f4 100644 --- a/wagtail/wagtailadmin/forms.py +++ b/wagtail/wagtailadmin/forms.py @@ -12,7 +12,7 @@ class SearchForm(forms.Form): if _placeholder is not None: placeholder = _placeholder else: - placeholder = 'Search {}'.format(placeholder_suffix) + placeholder = 'Search {0}'.format(placeholder_suffix) self.fields['q'].widget.attrs = {'placeholder': placeholder} q = forms.CharField(label=_("Search term"), widget=forms.TextInput()) diff --git a/wagtail/wagtailadmin/hooks.py b/wagtail/wagtailadmin/hooks.py index ff167d70d..d299c3346 100644 --- a/wagtail/wagtailadmin/hooks.py +++ b/wagtail/wagtailadmin/hooks.py @@ -1,5 +1,9 @@ from django.conf import settings -from django.utils.importlib import import_module +try: + from importlib import import_module +except ImportError: + # for Python 2.6, fall back on django.utils.importlib (deprecated as of Django 1.7) + from django.utils.importlib import import_module _hooks = {} diff --git a/wagtail/wagtailadmin/tests.py b/wagtail/wagtailadmin/tests.py index 28b5398ee..435f29a9c 100644 --- a/wagtail/wagtailadmin/tests.py +++ b/wagtail/wagtailadmin/tests.py @@ -1,5 +1,5 @@ from django.test import TestCase -import unittest +import unittest2 as unittest from wagtail.tests.models import SimplePage, EventPage from wagtail.tests.utils import login from wagtail.wagtailcore.models import Page diff --git a/wagtail/wagtailembeds/embeds.py b/wagtail/wagtailembeds/embeds.py index c144b39b9..5b3f59fc2 100644 --- a/wagtail/wagtailembeds/embeds.py +++ b/wagtail/wagtailembeds/embeds.py @@ -1,5 +1,11 @@ import sys -from importlib import import_module + +try: + from importlib import import_module +except ImportError: + # for Python 2.6, fall back on django.utils.importlib (deprecated as of Django 1.7) + from django.utils.importlib import import_module + from django.conf import settings from datetime import datetime from django.utils import six diff --git a/wagtail/wagtailimages/backends/__init__.py b/wagtail/wagtailimages/backends/__init__.py index 9d6b9590c..62d0c1c78 100644 --- a/wagtail/wagtailimages/backends/__init__.py +++ b/wagtail/wagtailimages/backends/__init__.py @@ -2,7 +2,12 @@ # Based on the Django cache framework and wagtailsearch # https://github.com/django/django/blob/5d263dee304fdaf95e18d2f0619d6925984a7f02/django/core/cache/__init__.py -from importlib import import_module +try: + from importlib import import_module +except ImportError: + # for Python 2.6, fall back on django.utils.importlib (deprecated as of Django 1.7) + from django.utils.importlib import import_module + from django.utils import six import sys from django.conf import settings diff --git a/wagtail/wagtailimages/formats.py b/wagtail/wagtailimages/formats.py index b45797148..d00b65b44 100644 --- a/wagtail/wagtailimages/formats.py +++ b/wagtail/wagtailimages/formats.py @@ -1,7 +1,12 @@ from django.conf import settings -from django.utils.importlib import import_module from django.utils.html import escape +try: + from importlib import import_module +except ImportError: + # for Python 2.6, fall back on django.utils.importlib (deprecated as of Django 1.7) + from django.utils.importlib import import_module + class Format(object): def __init__(self, name, label, classnames, filter_spec): diff --git a/wagtail/wagtailimages/tests.py b/wagtail/wagtailimages/tests.py index b668cc608..9c4ce6ea9 100644 --- a/wagtail/wagtailimages/tests.py +++ b/wagtail/wagtailimages/tests.py @@ -4,7 +4,7 @@ from django.contrib.auth.models import User, Group, Permission from django.core.urlresolvers import reverse from django.core.files.uploadedfile import SimpleUploadedFile -import unittest +import unittest2 as unittest from wagtail.tests.utils import login from wagtail.wagtailimages.models import get_image_model diff --git a/wagtail/wagtailredirects/views.py b/wagtail/wagtailredirects/views.py index 375071c4e..8dfd687f1 100644 --- a/wagtail/wagtailredirects/views.py +++ b/wagtail/wagtailredirects/views.py @@ -109,7 +109,7 @@ def add(request): theredirect.site = request.site theredirect.save() - messages.success(request, _("Redirect '{0} added.").format(theredirect.title)) + messages.success(request, _("Redirect '{0}' added.").format(theredirect.title)) return redirect('wagtailredirects_index') else: messages.error(request, _("The redirect could not be created due to errors.")) diff --git a/wagtail/wagtailsearch/backends/__init__.py b/wagtail/wagtailsearch/backends/__init__.py index adc492ada..5e1b4fc5d 100644 --- a/wagtail/wagtailsearch/backends/__init__.py +++ b/wagtail/wagtailsearch/backends/__init__.py @@ -2,7 +2,12 @@ # Based on the Django cache framework # https://github.com/django/django/blob/5d263dee304fdaf95e18d2f0619d6925984a7f02/django/core/cache/__init__.py -from importlib import import_module +try: + from importlib import import_module +except ImportError: + # for Python 2.6, fall back on django.utils.importlib (deprecated as of Django 1.7) + from django.utils.importlib import import_module + from django.utils import six import sys from django.conf import settings diff --git a/wagtail/wagtailsearch/backends/elasticsearch.py b/wagtail/wagtailsearch/backends/elasticsearch.py index 87926a388..b308add0b 100644 --- a/wagtail/wagtailsearch/backends/elasticsearch.py +++ b/wagtail/wagtailsearch/backends/elasticsearch.py @@ -37,7 +37,7 @@ class ElasticSearchResults(object): results = results.prefetch_related(prefetch) # Put results into a dictionary (using primary key as the key) - results_dict = {str(result.pk): result for result in results} + results_dict = dict((str(result.pk), result) for result in results) # Build new list with items in the correct order results_sorted = [results_dict[str(pk)] for pk in pk_list if str(pk) in results_dict] diff --git a/wagtail/wagtailsearch/indexed.py b/wagtail/wagtailsearch/indexed.py index 04d8b0a9e..aa750d7b9 100644 --- a/wagtail/wagtailsearch/indexed.py +++ b/wagtail/wagtailsearch/indexed.py @@ -40,7 +40,7 @@ class Indexed(object): if isinstance(indexed_fields, basestring): indexed_fields = [indexed_fields] if isinstance(indexed_fields, list): - indexed_fields = {field: dict(type="string") for field in indexed_fields} + indexed_fields = dict((field, dict(type="string")) for field in indexed_fields) if not isinstance(indexed_fields, dict): raise ValueError() diff --git a/wagtail/wagtailsearch/tests/test_backends.py b/wagtail/wagtailsearch/tests/test_backends.py index f34594d6b..b8b6ee3b1 100644 --- a/wagtail/wagtailsearch/tests/test_backends.py +++ b/wagtail/wagtailsearch/tests/test_backends.py @@ -2,7 +2,7 @@ from django.test import TestCase from django.test.utils import override_settings from django.conf import settings from django.core import management -import unittest +import unittest2 as unittest from wagtail.wagtailsearch import models, get_search_backend from wagtail.wagtailsearch.backends.db import DBSearch from wagtail.wagtailsearch.backends import InvalidSearchBackendError diff --git a/wagtail/wagtailsearch/tests/test_queries.py b/wagtail/wagtailsearch/tests/test_queries.py index fd1c6c1b1..2ff2945de 100644 --- a/wagtail/wagtailsearch/tests/test_queries.py +++ b/wagtail/wagtailsearch/tests/test_queries.py @@ -3,7 +3,7 @@ from django.core import management from wagtail.wagtailsearch import models from wagtail.tests.utils import login from StringIO import StringIO -import unittest +import unittest2 as unittest class TestHitCounter(TestCase): diff --git a/wagtail/wagtailsearch/views/frontend.py b/wagtail/wagtailsearch/views/frontend.py index 500c4920c..33c15924e 100644 --- a/wagtail/wagtailsearch/views/frontend.py +++ b/wagtail/wagtailsearch/views/frontend.py @@ -73,11 +73,11 @@ def search( for result in search_results: result_specific = result.specific - search_results_json.append({ - attr: getattr(result_specific, attr) + search_results_json.append(dict( + (attr, getattr(result_specific, attr)) for attr in json_attrs if hasattr(result_specific, attr) - }) + )) return HttpResponse(json.dumps(search_results_json)) else: diff --git a/wagtail/wagtailsnippets/tests.py b/wagtail/wagtailsnippets/tests.py index 95cbacbf0..0ba40fac9 100644 --- a/wagtail/wagtailsnippets/tests.py +++ b/wagtail/wagtailsnippets/tests.py @@ -5,7 +5,7 @@ when you run "manage.py test". Replace this with more appropriate tests for your application. """ -import unittest +import unittest2 as unittest from django.test import TestCase