From 829840f411f73cb18d58f5c0c2a20e06a5b7d991 Mon Sep 17 00:00:00 2001 From: arthur Date: Fri, 20 May 2016 10:54:42 +0200 Subject: [PATCH] Fix model migrations --- djadmin2/migrations/0001_initial.py | 14 ++--- djadmin2/tests/migrations/0001_initial.py | 62 ++++++++++++++++++++++ djadmin2/tests/migrations/__init__.py | 0 djadmin2/tests/models.py | 50 +++++++++++++++++ djadmin2/tests/test_actions.py | 6 +-- djadmin2/tests/test_admin2tags.py | 17 +----- djadmin2/tests/test_core.py | 13 ++--- djadmin2/tests/test_renderers.py | 8 +-- djadmin2/tests/test_types.py | 6 +-- djadmin2/tests/test_utils.py | 20 +------ example/blog/migrations/0001_initial.py | 28 +++++----- example/db.sqlite3 | Bin 67584 -> 77824 bytes example/example/settings.py | 3 +- example/files/migrations/0001_initial.py | 12 ++--- example/polls/migrations/0001_initial.py | 12 ++--- tox.ini | 11 ++-- 16 files changed, 162 insertions(+), 100 deletions(-) create mode 100644 djadmin2/tests/migrations/0001_initial.py create mode 100644 djadmin2/tests/migrations/__init__.py diff --git a/djadmin2/migrations/0001_initial.py b/djadmin2/migrations/0001_initial.py index bd03761..3931cd3 100644 --- a/djadmin2/migrations/0001_initial.py +++ b/djadmin2/migrations/0001_initial.py @@ -16,19 +16,19 @@ class Migration(migrations.Migration): migrations.CreateModel( name='LogEntry', fields=[ - ('id', models.AutoField(auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), - ('action_time', models.DateTimeField(auto_now=True, verbose_name='action time')), - ('object_id', models.TextField(blank=True, null=True, verbose_name='object id')), + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), + ('action_time', models.DateTimeField(verbose_name='action time', auto_now=True)), + ('object_id', models.TextField(verbose_name='object id', null=True, blank=True)), ('object_repr', models.CharField(max_length=200, verbose_name='object repr')), ('action_flag', models.PositiveSmallIntegerField(verbose_name='action flag')), - ('change_message', models.TextField(blank=True, verbose_name='change message')), - ('content_type', models.ForeignKey(null=True, related_name='log_entries', to='contenttypes.ContentType', blank=True)), + ('change_message', models.TextField(verbose_name='change message', blank=True)), + ('content_type', models.ForeignKey(related_name='log_entries', null=True, blank=True, to='contenttypes.ContentType')), ('user', models.ForeignKey(related_name='log_entries', to=settings.AUTH_USER_MODEL)), ], options={ - 'verbose_name_plural': 'log entries', - 'ordering': ('-action_time',), 'verbose_name': 'log entry', + 'ordering': ('-action_time',), + 'verbose_name_plural': 'log entries', }, ), ] diff --git a/djadmin2/tests/migrations/0001_initial.py b/djadmin2/tests/migrations/0001_initial.py new file mode 100644 index 0000000..700cd16 --- /dev/null +++ b/djadmin2/tests/migrations/0001_initial.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='BigThing', + fields=[ + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), + ], + ), + migrations.CreateModel( + name='RendererTestModel', + fields=[ + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), + ('decimal', models.DecimalField(max_digits=10, decimal_places=5)), + ], + ), + migrations.CreateModel( + name='SmallThing', + fields=[ + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), + ], + ), + migrations.CreateModel( + name='TagsTestsModel', + fields=[ + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), + ('field1', models.CharField(max_length=23)), + ('field2', models.CharField(max_length=42, verbose_name='second field')), + ], + options={ + 'verbose_name': 'Tags Test Model', + 'verbose_name_plural': 'Tags Test Models', + }, + ), + migrations.CreateModel( + name='Thing', + fields=[ + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), + ], + ), + migrations.CreateModel( + name='UtilsTestModel', + fields=[ + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), + ('field1', models.CharField(max_length=23)), + ('field2', models.CharField(max_length=42, verbose_name='second field')), + ], + options={ + 'verbose_name': 'Utils Test Model', + 'verbose_name_plural': 'Utils Test Models', + }, + ), + ] diff --git a/djadmin2/tests/migrations/__init__.py b/djadmin2/tests/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/djadmin2/tests/models.py b/djadmin2/tests/models.py index e69de29..22ffe33 100644 --- a/djadmin2/tests/models.py +++ b/djadmin2/tests/models.py @@ -0,0 +1,50 @@ +from django.db import models + + +class Thing(models.Model): + pass + + +class SmallThing(models.Model): + pass + + +class BigThing(models.Model): + pass + + +class TagsTestsModel(models.Model): + + field1 = models.CharField(max_length=23) + field2 = models.CharField('second field', max_length=42) + + def was_published_recently(self): + return True + was_published_recently.boolean = True + was_published_recently.short_description = 'Published recently?' + + class Meta: + verbose_name = "Tags Test Model" + verbose_name_plural = "Tags Test Models" + + +class RendererTestModel(models.Model): + decimal = models.DecimalField(decimal_places=5, max_digits=10) + + +class UtilsTestModel(models.Model): + + field1 = models.CharField(max_length=23) + field2 = models.CharField('second field', max_length=42) + + def simple_method(self): + return 42 + + def was_published_recently(self): + return True + was_published_recently.boolean = True + was_published_recently.short_description = 'Published recently?' + + class Meta: + verbose_name = "Utils Test Model" + verbose_name_plural = "Utils Test Models" diff --git a/djadmin2/tests/test_actions.py b/djadmin2/tests/test_actions.py index f4bd6c4..7a48e55 100644 --- a/djadmin2/tests/test_actions.py +++ b/djadmin2/tests/test_actions.py @@ -1,12 +1,8 @@ -from django.db import models from django.test import TestCase from ..core import Admin2 from ..actions import get_description - - -class Thing(models.Model): - pass +from .models import Thing class TestAction(object): diff --git a/djadmin2/tests/test_admin2tags.py b/djadmin2/tests/test_admin2tags.py index 61c5042..6c3dcb9 100644 --- a/djadmin2/tests/test_admin2tags.py +++ b/djadmin2/tests/test_admin2tags.py @@ -1,25 +1,10 @@ -from django.db import models from django import forms from django.forms.formsets import formset_factory from django.test import TestCase from ..templatetags import admin2_tags from ..views import IndexView - - -class TagsTestsModel(models.Model): - - field1 = models.CharField(max_length=23) - field2 = models.CharField('second field', max_length=42) - - def was_published_recently(self): - return True - was_published_recently.boolean = True - was_published_recently.short_description = 'Published recently?' - - class Meta: - verbose_name = "Tags Test Model" - verbose_name_plural = "Tags Test Models" +from .models import TagsTestsModel class TagsTestForm(forms.Form): diff --git a/djadmin2/tests/test_core.py b/djadmin2/tests/test_core.py index f92fb69..3a61ec0 100644 --- a/djadmin2/tests/test_core.py +++ b/djadmin2/tests/test_core.py @@ -1,17 +1,12 @@ -from django.db import models -from django.core.exceptions import ImproperlyConfigured -from django.test import TestCase from django.contrib.auth.models import Group, User from django.contrib.sites.models import Site +from django.core.exceptions import ImproperlyConfigured +from django.test import TestCase from djadmin2.site import djadmin2_site -from ..types import ModelAdmin2 +from .models import SmallThing from ..core import Admin2 - - -class SmallThing(models.Model): - pass - +from ..types import ModelAdmin2 APP_LABEL, APP_VERBOSE_NAME = 'app_one_label', 'App One Verbose Name' diff --git a/djadmin2/tests/test_renderers.py b/djadmin2/tests/test_renderers.py index a2921e3..964e695 100644 --- a/djadmin2/tests/test_renderers.py +++ b/djadmin2/tests/test_renderers.py @@ -5,15 +5,11 @@ import datetime as dt from decimal import Decimal from django.test import TestCase -from django.db import models -from django.utils.translation import activate from django.utils import six +from django.utils.translation import activate from .. import renderers - - -class RendererTestModel(models.Model): - decimal = models.DecimalField(decimal_places=5, max_digits=10) +from .models import RendererTestModel class BooleanRendererTest(TestCase): diff --git a/djadmin2/tests/test_types.py b/djadmin2/tests/test_types.py index ed0a92d..a3f7d40 100644 --- a/djadmin2/tests/test_types.py +++ b/djadmin2/tests/test_types.py @@ -1,9 +1,9 @@ -from django.db import models from django.test import TestCase from .. import views from ..types import ModelAdmin2, immutable_admin_factory from ..core import Admin2 +from .models import BigThing class ModelAdmin(object): @@ -39,10 +39,6 @@ class ImmutableAdminFactoryTests(TestCase): self.immutable_admin.d -class BigThing(models.Model): - pass - - class ModelAdminTest(TestCase): def setUp(self): diff --git a/djadmin2/tests/test_utils.py b/djadmin2/tests/test_utils.py index c53946d..39767ec 100644 --- a/djadmin2/tests/test_utils.py +++ b/djadmin2/tests/test_utils.py @@ -1,27 +1,9 @@ -from django.db import models from django.test import TestCase from django.utils import six from .. import utils from ..views import IndexView - - -class UtilsTestModel(models.Model): - - field1 = models.CharField(max_length=23) - field2 = models.CharField('second field', max_length=42) - - def simple_method(self): - return 42 - - def was_published_recently(self): - return True - was_published_recently.boolean = True - was_published_recently.short_description = 'Published recently?' - - class Meta: - verbose_name = "Utils Test Model" - verbose_name_plural = "Utils Test Models" +from .models import UtilsTestModel class UtilsTest(TestCase): diff --git a/example/blog/migrations/0001_initial.py b/example/blog/migrations/0001_initial.py index 73b42b7..6761aea 100644 --- a/example/blog/migrations/0001_initial.py +++ b/example/blog/migrations/0001_initial.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -import django.db.models.deletion from django.db import migrations, models +import django.db.models.deletion class Migration(migrations.Migration): @@ -14,18 +14,18 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Comment', fields=[ - ('id', models.AutoField(auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('body', models.TextField(verbose_name='body')), ], options={ - 'verbose_name_plural': 'comments', 'verbose_name': 'comment', + 'verbose_name_plural': 'comments', }, ), migrations.CreateModel( name='Count', fields=[ - ('id', models.AutoField(auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('num', models.PositiveSmallIntegerField()), ('parent', models.ForeignKey(to='blog.Count', null=True)), ], @@ -33,21 +33,21 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Event', fields=[ - ('id', models.AutoField(auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('date', models.DateTimeField(auto_now_add=True)), ], ), migrations.CreateModel( name='EventGuide', fields=[ - ('id', models.AutoField(auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), - ('event', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='blog.Event')), + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), + ('event', models.ForeignKey(to='blog.Event', on_delete=django.db.models.deletion.DO_NOTHING)), ], ), migrations.CreateModel( name='Guest', fields=[ - ('id', models.AutoField(auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('name', models.CharField(max_length=255)), ('event', models.OneToOneField(to='blog.Event')), ], @@ -58,27 +58,27 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Location', fields=[ - ('id', models.AutoField(auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), - ('event', models.OneToOneField(to='blog.Event', verbose_name='awesome event')), + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), + ('event', models.OneToOneField(verbose_name='awesome event', to='blog.Event')), ], ), migrations.CreateModel( name='Post', fields=[ - ('id', models.AutoField(auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('title', models.CharField(max_length=255, verbose_name='title')), ('body', models.TextField(verbose_name='body')), - ('published', models.BooleanField(default=False, verbose_name='published')), + ('published', models.BooleanField(verbose_name='published', default=False)), ('published_date', models.DateField(blank=True, null=True)), ], options={ - 'verbose_name_plural': 'posts', 'verbose_name': 'post', + 'verbose_name_plural': 'posts', }, ), migrations.AddField( model_name='comment', name='post', - field=models.ForeignKey(to='blog.Post', verbose_name='post', related_name='comments'), + field=models.ForeignKey(related_name='comments', verbose_name='post', to='blog.Post'), ), ] diff --git a/example/db.sqlite3 b/example/db.sqlite3 index 186c5e801745251cfb283137403b1028c57eeb47..396feb1cdb5f88f5dc1528ab7f789b2d713f70aa 100644 GIT binary patch literal 77824 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 diff --git a/example/example/settings.py b/example/example/settings.py index cfedad2..bafc798 100644 --- a/example/example/settings.py +++ b/example/example/settings.py @@ -44,6 +44,7 @@ INSTALLED_APPS = [ 'rest_framework', 'crispy_forms', 'djadmin2', + 'djadmin2.tests', 'djadmin2.themes.djadmin2theme_default', 'blog', 'files', @@ -141,7 +142,7 @@ STATICFILES_DIRS = ( os.path.join(BASE_DIR, "static"), ) -MEDIA_ROOT = os.path.join(BASE_DIR) +MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = "/media/" ADMIN2_THEME_DIRECTORY = "djadmin2theme_default" \ No newline at end of file diff --git a/example/files/migrations/0001_initial.py b/example/files/migrations/0001_initial.py index f397eb9..fb58015 100644 --- a/example/files/migrations/0001_initial.py +++ b/example/files/migrations/0001_initial.py @@ -13,24 +13,24 @@ class Migration(migrations.Migration): migrations.CreateModel( name='CaptionedFile', fields=[ - ('id', models.AutoField(auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('caption', models.CharField(max_length=200, verbose_name='caption')), - ('publication', models.FileField(upload_to='media', verbose_name='Uploaded File')), + ('publication', models.FileField(verbose_name='Uploaded File', upload_to='captioned-files')), ], options={ - 'verbose_name_plural': 'Captioned Files', 'verbose_name': 'Captioned File', + 'verbose_name_plural': 'Captioned Files', }, ), migrations.CreateModel( name='UncaptionedFile', fields=[ - ('id', models.AutoField(auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), - ('publication', models.FileField(upload_to='media', verbose_name='Uploaded File')), + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), + ('publication', models.FileField(verbose_name='Uploaded File', upload_to='uncaptioned-files')), ], options={ - 'verbose_name_plural': 'Uncaptioned Files', 'verbose_name': 'Uncaptioned File', + 'verbose_name_plural': 'Uncaptioned Files', }, ), ] diff --git a/example/polls/migrations/0001_initial.py b/example/polls/migrations/0001_initial.py index 536c8a9..21980fd 100644 --- a/example/polls/migrations/0001_initial.py +++ b/example/polls/migrations/0001_initial.py @@ -13,30 +13,30 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Choice', fields=[ - ('id', models.AutoField(auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('choice_text', models.CharField(max_length=200, verbose_name='choice text')), - ('votes', models.IntegerField(default=0, verbose_name='votes')), + ('votes', models.IntegerField(verbose_name='votes', default=0)), ], options={ - 'verbose_name_plural': 'choices', 'verbose_name': 'choice', + 'verbose_name_plural': 'choices', }, ), migrations.CreateModel( name='Poll', fields=[ - ('id', models.AutoField(auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('question', models.CharField(max_length=200, verbose_name='question')), ('pub_date', models.DateTimeField(verbose_name='date published')), ], options={ - 'verbose_name_plural': 'polls', 'verbose_name': 'poll', + 'verbose_name_plural': 'polls', }, ), migrations.AddField( model_name='choice', name='poll', - field=models.ForeignKey(to='polls.Poll', verbose_name='poll'), + field=models.ForeignKey(verbose_name='poll', to='polls.Poll'), ), ] diff --git a/tox.ini b/tox.ini index 7b3c82c..d1c275a 100644 --- a/tox.ini +++ b/tox.ini @@ -6,16 +6,15 @@ exclude = migrations/*,docs/* [tox] envlist = - #py27-{1.8,1.9,master}, - #py33-{1.8}, - #py34-{1.8,1.9,master}, - #py35-{1.8,1.9,master}, - py35-{1.8}, + py27-{1.8,1.9,master}, + py33-{1.8}, + py34-{1.8,1.9,master}, + py35-{1.8,1.9,master}, [testenv] commands = flake8 djadmin2 - py.test --nomigrations [] + py.test [] deps = -rrequirements_test.txt 1.8: Django>=1.8,<1.9