From a3edae853263e37c02f2c8f516a247c6f62dd396 Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Thu, 10 Jul 2014 17:55:57 +0200 Subject: [PATCH 1/2] Experimental: do not disable south migrations Ref: https://github.com/pelme/pytest_django/issues/128 --- docs/faq.rst | 8 ++------ pytest_django/fixtures.py | 6 ------ 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/docs/faq.rst b/docs/faq.rst index 00d435345..7bcbced88 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -54,12 +54,8 @@ This snippet should do the trick (replace ``yourproject.settings`` and make sure echo "export DJANGO_SETTINGS_MODULE=yourproject.settings" >> $VIRTUAL_ENV/bin/postactivate -How do South and pytest-django play together? ------------------------------------------------- - -Django's own syncdb will always be used to create the test database, regardless of whether South is present or not. - - +How does South and pytest-django play together? +Djangos own syncdb will always be used to create the test database, regardless of wheter South is present or not. Does this work with the pytest-xdist plugin? -------------------------------------------- diff --git a/pytest_django/fixtures.py b/pytest_django/fixtures.py index 558620c33..dff0855c8 100644 --- a/pytest_django/fixtures.py +++ b/pytest_django/fixtures.py @@ -28,7 +28,6 @@ def _django_db_setup(request, skip_if_no_django() from .compat import setup_databases, teardown_databases - from django.core import management # xdist if hasattr(request.config, 'slaveinput'): @@ -38,11 +37,6 @@ def _django_db_setup(request, monkey_patch_creation_for_db_suffix(db_suffix) - # Disable south's syncdb command - commands = management.get_commands() - if commands['syncdb'] == 'south': - management._commands['syncdb'] = 'django.core' - with _django_cursor_wrapper: # Monkey patch Django's setup code to support database re-use if request.config.getvalue('reuse_db'): From 31e978a29aed4a2e101f3e75a93bf15de7b20867 Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Fri, 11 Jul 2014 00:23:46 +0200 Subject: [PATCH 2/2] Fix south integration with `--create-db` This requires to monkey-patch `south.hacks.django_1_0.SkipFlushCommand`, which has a bug that prevents any initial data to be installed. South issue: http://south.aeracode.org/ticket/1395#comment:3 Fixes https://github.com/pelme/pytest_django/pull/22 Django code reference for 1.6, from django-1.6.x/django/db/backends/creation.py(339)create_test_db(): # Report syncdb messages at one level lower than that requested. # This ensures we don't get flooded with messages during testing # (unless you really ask to be flooded) call_command('syncdb', verbosity=max(verbosity - 1, 0), interactive=False, database=self.connection.alias, load_initial_data=False) # We need to then do a flush to ensure that any data installed by # custom SQL has been removed. The only test data should come from # test fixtures, or autogenerated from post_syncdb triggers. # This has the side effect of loading initial data (which was # intentionally skipped in the syncdb). call_command('flush', verbosity=max(verbosity - 1, 0), interactive=False, database=self.connection.alias) --- docs/changelog.rst | 3 + docs/faq.rst | 10 +++- generate_configurations.py | 1 + pytest_django/fixtures.py | 36 ++++++++++++ requirements.txt | 1 + tests/conftest.py | 15 ++++- tests/test_db_setup.py | 109 +++++++++++++++++++++++++++++++++++++ tox.ini | 98 +++++++++++++++++++++++++++++++++ 8 files changed, 270 insertions(+), 3 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 285754076..32afeb1da 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -9,6 +9,9 @@ NEXT * Fix admin client with custom user models (#124). Big thanks to Benjamin Hedrich and Dmitry Dygalo for patch and tests. +* Fix usage of South migrations, which were unconditionally disabled previously + (#22). + 2.6.2 ----- diff --git a/docs/faq.rst b/docs/faq.rst index 7bcbced88..2bcb67e21 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -54,8 +54,14 @@ This snippet should do the trick (replace ``yourproject.settings`` and make sure echo "export DJANGO_SETTINGS_MODULE=yourproject.settings" >> $VIRTUAL_ENV/bin/postactivate -How does South and pytest-django play together? -Djangos own syncdb will always be used to create the test database, regardless of wheter South is present or not. +How do South and pytest-django play together? +--------------------------------------------- + +pytest-django detects South and applies its monkey-patch, which gets fixed +to handle initial data properly (which South would skip otherwise, because +of a bug). + + Does this work with the pytest-xdist plugin? -------------------------------------------- diff --git a/generate_configurations.py b/generate_configurations.py index d8092d514..910d18c68 100644 --- a/generate_configurations.py +++ b/generate_configurations.py @@ -65,6 +65,7 @@ def requirements(env): yield 'pytest-xdist==1.10' yield DJANGO_REQUIREMENTS[env.django_version] yield 'django-configurations==0.8' + yield 'south==1.0' if env.settings == 'postgres': # Django 1.3 does not work with recent psycopg2 versions diff --git a/pytest_django/fixtures.py b/pytest_django/fixtures.py index dff0855c8..c7c5435b1 100644 --- a/pytest_django/fixtures.py +++ b/pytest_django/fixtures.py @@ -37,6 +37,8 @@ def _django_db_setup(request, monkey_patch_creation_for_db_suffix(db_suffix) + _handle_south() + with _django_cursor_wrapper: # Monkey patch Django's setup code to support database re-use if request.config.getvalue('reuse_db'): @@ -87,6 +89,40 @@ def flushdb(): request.addfinalizer(_django_cursor_wrapper.disable) request.addfinalizer(case._post_teardown) +def _handle_south(): + from django.conf import settings + if 'south' in settings.INSTALLED_APPS: + # Handle south. + from django.core import management + + try: + # if `south` >= 0.7.1 we can use the test helper + from south.management.commands import patch_for_test_db_setup + except ImportError: + # if `south` < 0.7.1 make sure it's migrations are disabled + management.get_commands() + management._commands['syncdb'] = 'django.core' + else: + # Monkey-patch south.hacks.django_1_0.SkipFlushCommand to load + # initial data. + # Ref: http://south.aeracode.org/ticket/1395#comment:3 + import south.hacks.django_1_0 + from django.core.management.commands.flush import Command as FlushCommand + class SkipFlushCommand(FlushCommand): + def handle_noargs(self, **options): + # Reinstall the initial_data fixture. + from django.core.management import call_command + # `load_initial_data` got introduces with Django 1.5. + load_initial_data = options.get('load_initial_data', None) + if load_initial_data or load_initial_data is None: + # Reinstall the initial_data fixture. + call_command('loaddata', 'initial_data', **options) + # no-op to avoid calling flush + return + south.hacks.django_1_0.SkipFlushCommand = SkipFlushCommand + + patch_for_test_db_setup() + ################ User visible fixtures ################ diff --git a/requirements.txt b/requirements.txt index 0e31f42fa..8be6171e3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ pytest-xdist tox wheel twine +south diff --git a/tests/conftest.py b/tests/conftest.py index 137d75894..5ec1f012d 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -22,7 +22,7 @@ @pytest.fixture(scope='function') def django_testdir(request, testdir, monkeypatch): if get_db_engine() in ('mysql', 'postgresql_psycopg2', 'sqlite3'): - # Django requires the production database to exists.. + # Django requires the production database to exist. create_empty_production_database() if hasattr(request.node.cls, 'db_settings'): @@ -75,3 +75,16 @@ def create_app_file(code, filename): testdir.create_app_file = create_app_file return testdir + + +@pytest.fixture +def django_testdir_initial(django_testdir): + """A django_testdir fixture which provides initial_data.""" + django_testdir.makefile('.json', initial_data=""" + [{ + "pk": 1, + "model": "app.item", + "fields": { "name": "mark_initial_data" } + }]""") + + return django_testdir diff --git a/tests/test_db_setup.py b/tests/test_db_setup.py index 7e97a91a7..36fbe483c 100644 --- a/tests/test_db_setup.py +++ b/tests/test_db_setup.py @@ -1,7 +1,10 @@ import sys +from textwrap import dedent import pytest +from pytest_django.lazy_django import get_django_version + from .db_helpers import (db_exists, drop_database, mark_database, mark_exists, skip_if_sqlite_in_memory) @@ -191,3 +194,109 @@ def test_a(): result = django_testdir.runpytest('--tb=short', '-vv', '-n1') result.stdout.fnmatch_lines(['*PASSED*test_a*']) + + +def test_initial_data(django_testdir_initial): + """Test that initial data gets loaded.""" + django_testdir_initial.create_test_module(''' + import pytest + + from .app.models import Item + + @pytest.mark.django_db + def test_inner_south(): + assert [x.name for x in Item.objects.all()] \ + == ["mark_initial_data"] + ''') + + result = django_testdir_initial.runpytest('--tb=short', '-v') + result.stdout.fnmatch_lines(['*test_inner_south*PASSED*']) + + +# NOTE: South tries to monkey-patch management._commands, which has been +# replaced by lru_cache and would cause an AttributeError. +@pytest.mark.skipif(get_django_version() >= (1, 7), + reason='South fails with Django 1.7.') +@pytest.mark.skipif(sys.version_info[:2] == (3, 4), + reason='South fails on Python 3.4.') +class TestSouth: + """Test interaction with initial_data and South.""" + + @pytest.mark.extra_settings(dedent(""" + INSTALLED_APPS += [ 'south', ] + SOUTH_TESTS_MIGRATE = True + SOUTH_MIGRATION_MODULES = { + 'app': 'app.south_migrations', + } + """)) + def test_initial_data_south(self, django_testdir_initial, settings): + django_testdir_initial.create_test_module(''' + import pytest + + from .app.models import Item + + @pytest.mark.django_db + def test_inner_south(): + assert [x.name for x in Item.objects.all()] \ + == ["mark_initial_data"] + ''') + + result = django_testdir_initial.runpytest('--tb=short', '-v') + result.stdout.fnmatch_lines(['*test_inner_south*PASSED*']) + + @pytest.mark.extra_settings(dedent(""" + INSTALLED_APPS += [ 'south', ] + SOUTH_TESTS_MIGRATE = True + SOUTH_MIGRATION_MODULES = { + 'app': 'tpkg.app.south_migrations', + } + """)) + def test_initial_south_migrations(self, django_testdir_initial, settings): + testdir = django_testdir_initial + testdir.create_test_module(''' + import pytest + + @pytest.mark.django_db + def test_inner_south(): + pass + ''') + + testdir.mkpydir('tpkg/app/south_migrations') + p = testdir.tmpdir.join( + "tpkg/app/south_migrations/0001_initial").new(ext="py") + p.write(dedent(""" + from south.v2 import SchemaMigration + + class Migration(SchemaMigration): + def forwards(self, orm): + print("mark_south_migration_forwards") + """), ensure=True) + + result = testdir.runpytest('--tb=short', '-v', '-s') + result.stdout.fnmatch_lines(['*mark_south_migration_forwards*']) + + @pytest.mark.extra_settings(dedent(""" + INSTALLED_APPS += [ 'south', ] + SOUTH_TESTS_MIGRATE = False + SOUTH_MIGRATION_MODULES = { + 'app': 'tpkg.app.south_migrations', + } + """)) + def test_south_no_migrations(self, django_testdir_initial, settings): + testdir = django_testdir_initial + testdir.create_test_module(''' + import pytest + + @pytest.mark.django_db + def test_inner_south(): + pass + ''') + + testdir.mkpydir('tpkg/app/south_migrations') + p = testdir.tmpdir.join( + "tpkg/app/south_migrations/0001_initial").new(ext="py") + p.write('raise Exception("This should not get imported.")', + ensure=True) + + result = testdir.runpytest('--tb=short', '-v') + result.stdout.fnmatch_lines(['*test_inner_south*PASSED*']) diff --git a/tox.ini b/tox.ini index 8c6de1e39..8d39255a4 100644 --- a/tox.ini +++ b/tox.ini @@ -13,6 +13,7 @@ deps = pytest-xdist==1.10 Django==1.3.7 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -28,6 +29,7 @@ deps = pytest-xdist==1.10 Django==1.3.7 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -43,6 +45,7 @@ deps = pytest-xdist==1.10 Django==1.4.13 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -58,6 +61,7 @@ deps = pytest-xdist==1.10 Django==1.4.13 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -73,6 +77,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -88,6 +93,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -103,6 +109,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -118,6 +125,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -133,6 +141,7 @@ deps = pytest-xdist==1.10 https://www.djangoproject.com/download/1.7c1/tarball/ django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -148,6 +157,7 @@ deps = pytest-xdist==1.10 https://www.djangoproject.com/download/1.7c1/tarball/ django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -163,6 +173,7 @@ deps = pytest-xdist==1.10 https://github.com/django/django/archive/master.zip django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -178,6 +189,7 @@ deps = pytest-xdist==1.10 https://github.com/django/django/archive/master.zip django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -194,6 +206,7 @@ deps = pytest-xdist==1.10 Django==1.3.7 django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_innodb @@ -211,6 +224,7 @@ deps = pytest-xdist==1.10 Django==1.3.7 django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_myisam @@ -228,6 +242,7 @@ deps = pytest-xdist==1.10 Django==1.3.7 django-configurations==0.8 + south==1.0 psycopg2==2.4.1 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -244,6 +259,7 @@ deps = pytest-xdist==1.10 Django==1.3.7 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -259,6 +275,7 @@ deps = pytest-xdist==1.10 Django==1.3.7 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -275,6 +292,7 @@ deps = pytest-xdist==1.10 Django==1.4.13 django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_innodb @@ -292,6 +310,7 @@ deps = pytest-xdist==1.10 Django==1.4.13 django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_myisam @@ -309,6 +328,7 @@ deps = pytest-xdist==1.10 Django==1.4.13 django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -325,6 +345,7 @@ deps = pytest-xdist==1.10 Django==1.4.13 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -340,6 +361,7 @@ deps = pytest-xdist==1.10 Django==1.4.13 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -356,6 +378,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_innodb @@ -373,6 +396,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_myisam @@ -390,6 +414,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -406,6 +431,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -421,6 +447,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -437,6 +464,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_innodb @@ -454,6 +482,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_myisam @@ -471,6 +500,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -487,6 +517,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -502,6 +533,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -518,6 +550,7 @@ deps = pytest-xdist==1.10 Django==1.3.7 django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_innodb @@ -535,6 +568,7 @@ deps = pytest-xdist==1.10 Django==1.3.7 django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_myisam @@ -552,6 +586,7 @@ deps = pytest-xdist==1.10 Django==1.3.7 django-configurations==0.8 + south==1.0 psycopg2==2.4.1 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -568,6 +603,7 @@ deps = pytest-xdist==1.10 Django==1.3.7 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -583,6 +619,7 @@ deps = pytest-xdist==1.10 Django==1.3.7 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -599,6 +636,7 @@ deps = pytest-xdist==1.10 Django==1.4.13 django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_innodb @@ -616,6 +654,7 @@ deps = pytest-xdist==1.10 Django==1.4.13 django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_myisam @@ -633,6 +672,7 @@ deps = pytest-xdist==1.10 Django==1.4.13 django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -649,6 +689,7 @@ deps = pytest-xdist==1.10 Django==1.4.13 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -664,6 +705,7 @@ deps = pytest-xdist==1.10 Django==1.4.13 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -680,6 +722,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_innodb @@ -697,6 +740,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_myisam @@ -714,6 +758,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -730,6 +775,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -745,6 +791,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -761,6 +808,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_innodb @@ -778,6 +826,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_myisam @@ -795,6 +844,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -811,6 +861,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -826,6 +877,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -842,6 +894,7 @@ deps = pytest-xdist==1.10 https://www.djangoproject.com/download/1.7c1/tarball/ django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_innodb @@ -859,6 +912,7 @@ deps = pytest-xdist==1.10 https://www.djangoproject.com/download/1.7c1/tarball/ django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_myisam @@ -876,6 +930,7 @@ deps = pytest-xdist==1.10 https://www.djangoproject.com/download/1.7c1/tarball/ django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -892,6 +947,7 @@ deps = pytest-xdist==1.10 https://www.djangoproject.com/download/1.7c1/tarball/ django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -907,6 +963,7 @@ deps = pytest-xdist==1.10 https://www.djangoproject.com/download/1.7c1/tarball/ django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -923,6 +980,7 @@ deps = pytest-xdist==1.10 https://github.com/django/django/archive/master.zip django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_innodb @@ -940,6 +998,7 @@ deps = pytest-xdist==1.10 https://github.com/django/django/archive/master.zip django-configurations==0.8 + south==1.0 mysql-python==1.2.5 setenv = DJANGO_SETTINGS_MODULE = tests.settings_mysql_myisam @@ -957,6 +1016,7 @@ deps = pytest-xdist==1.10 https://github.com/django/django/archive/master.zip django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -973,6 +1033,7 @@ deps = pytest-xdist==1.10 https://github.com/django/django/archive/master.zip django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -988,6 +1049,7 @@ deps = pytest-xdist==1.10 https://github.com/django/django/archive/master.zip django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -1004,6 +1066,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -1020,6 +1083,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -1035,6 +1099,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -1051,6 +1116,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -1067,6 +1133,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -1082,6 +1149,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -1098,6 +1166,7 @@ deps = pytest-xdist==1.10 https://www.djangoproject.com/download/1.7c1/tarball/ django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -1114,6 +1183,7 @@ deps = pytest-xdist==1.10 https://www.djangoproject.com/download/1.7c1/tarball/ django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -1129,6 +1199,7 @@ deps = pytest-xdist==1.10 https://www.djangoproject.com/download/1.7c1/tarball/ django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -1145,6 +1216,7 @@ deps = pytest-xdist==1.10 https://github.com/django/django/archive/master.zip django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -1161,6 +1233,7 @@ deps = pytest-xdist==1.10 https://github.com/django/django/archive/master.zip django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -1176,6 +1249,7 @@ deps = pytest-xdist==1.10 https://github.com/django/django/archive/master.zip django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -1192,6 +1266,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -1208,6 +1283,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -1223,6 +1299,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -1239,6 +1316,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -1255,6 +1333,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -1270,6 +1349,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -1286,6 +1366,7 @@ deps = pytest-xdist==1.10 https://www.djangoproject.com/download/1.7c1/tarball/ django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -1302,6 +1383,7 @@ deps = pytest-xdist==1.10 https://www.djangoproject.com/download/1.7c1/tarball/ django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -1317,6 +1399,7 @@ deps = pytest-xdist==1.10 https://www.djangoproject.com/download/1.7c1/tarball/ django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -1333,6 +1416,7 @@ deps = pytest-xdist==1.10 https://github.com/django/django/archive/master.zip django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -1349,6 +1433,7 @@ deps = pytest-xdist==1.10 https://github.com/django/django/archive/master.zip django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -1364,6 +1449,7 @@ deps = pytest-xdist==1.10 https://github.com/django/django/archive/master.zip django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -1380,6 +1466,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -1396,6 +1483,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -1411,6 +1499,7 @@ deps = pytest-xdist==1.10 Django==1.5.8 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -1427,6 +1516,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -1443,6 +1533,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -1458,6 +1549,7 @@ deps = pytest-xdist==1.10 Django==1.6.5 django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -1474,6 +1566,7 @@ deps = pytest-xdist==1.10 https://www.djangoproject.com/download/1.7c1/tarball/ django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -1490,6 +1583,7 @@ deps = pytest-xdist==1.10 https://www.djangoproject.com/download/1.7c1/tarball/ django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -1505,6 +1599,7 @@ deps = pytest-xdist==1.10 https://www.djangoproject.com/download/1.7c1/tarball/ django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir} @@ -1521,6 +1616,7 @@ deps = pytest-xdist==1.10 https://github.com/django/django/archive/master.zip django-configurations==0.8 + south==1.0 psycopg2==2.5.2 setenv = DJANGO_SETTINGS_MODULE = tests.settings_postgres @@ -1537,6 +1633,7 @@ deps = pytest-xdist==1.10 https://github.com/django/django/archive/master.zip django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite PYTHONPATH = {toxinidir} @@ -1552,6 +1649,7 @@ deps = pytest-xdist==1.10 https://github.com/django/django/archive/master.zip django-configurations==0.8 + south==1.0 setenv = DJANGO_SETTINGS_MODULE = tests.settings_sqlite_file PYTHONPATH = {toxinidir}