From 69ae7dfbd86e15edcdf710d8ec4b73aaff141a45 Mon Sep 17 00:00:00 2001 From: Dario Marcelino Date: Fri, 23 Feb 2018 15:35:32 +0000 Subject: [PATCH] #175: Override Migrate command To additionaly run `sync_page_translation_fields` To silence any missing migrations warnings --- setup.py | 5 ++- .../commands/migrate_translation.py | 33 +++++++++++++++++++ wagtail_modeltranslation/migrate/__init__.py | 3 ++ wagtail_modeltranslation/migrate/apps.py | 7 ++++ .../migrate/management/__init__.py | 0 .../migrate/management/commands/__init__.py | 0 .../migrate/management/commands/migrate.py | 5 +++ .../management/commands/migrate_original.py | 5 +++ 8 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 wagtail_modeltranslation/management/commands/migrate_translation.py create mode 100644 wagtail_modeltranslation/migrate/__init__.py create mode 100644 wagtail_modeltranslation/migrate/apps.py create mode 100644 wagtail_modeltranslation/migrate/management/__init__.py create mode 100755 wagtail_modeltranslation/migrate/management/commands/__init__.py create mode 100644 wagtail_modeltranslation/migrate/management/commands/migrate.py create mode 100644 wagtail_modeltranslation/migrate/management/commands/migrate_original.py diff --git a/setup.py b/setup.py index 91932dd..2391c6e 100755 --- a/setup.py +++ b/setup.py @@ -24,7 +24,10 @@ setup( 'wagtail_modeltranslation.templatetags', 'wagtail_modeltranslation.makemigrations', 'wagtail_modeltranslation.makemigrations.management', - 'wagtail_modeltranslation.makemigrations.management.commands'], + 'wagtail_modeltranslation.makemigrations.management.commands', + 'wagtail_modeltranslation.migrate', + 'wagtail_modeltranslation.migrate.management', + 'wagtail_modeltranslation.migrate.management.commands'], package_data={'wagtail_modeltranslation': ['static/wagtail_modeltranslation/css/*.css', 'static/wagtail_modeltranslation/js/*.js']}, install_requires=['wagtail(>=1.4)', 'django-modeltranslation(>=0.12.2)'], diff --git a/wagtail_modeltranslation/management/commands/migrate_translation.py b/wagtail_modeltranslation/management/commands/migrate_translation.py new file mode 100644 index 0000000..f96fa21 --- /dev/null +++ b/wagtail_modeltranslation/management/commands/migrate_translation.py @@ -0,0 +1,33 @@ +from django.core.management.commands.migrate import Command as MigrateCommand +from django.db.migrations.autodetector import MigrationAutodetector +from .sync_page_translation_fields import Command as SyncPageTranslationFieldsCommand + + +# decorate MigrationAutodetector.changes so we can silence any wagtailcore migrations missing warnings +def changes_decorator(func): + def wrapper(self, graph, trim_to_apps=None, convert_apps=None, migration_name=None): + changes = func(self, graph, trim_to_apps, convert_apps, migration_name) + if 'wagtailcore' in changes: + del changes['wagtailcore'] + return changes + return wrapper + + +class Command(MigrateCommand): + help = "Updates database schema. Manages both apps with migrations and those without. " \ + "Updates Wagtail Page translation fields" + + def handle(self, *args, **options): + old_autodetector_changes = MigrationAutodetector.changes + MigrationAutodetector.changes = changes_decorator(MigrationAutodetector.changes) + + try: + super(Command, self).handle(*args, **options) + finally: + MigrationAutodetector.changes = old_autodetector_changes + + # Run sync_page_translation_fields command + sync_page_command = SyncPageTranslationFieldsCommand() + # Update the dict of sync_page_command with the content of this one + sync_page_command.__dict__.update(self.__dict__) + sync_page_command.handle(*args, **options) diff --git a/wagtail_modeltranslation/migrate/__init__.py b/wagtail_modeltranslation/migrate/__init__.py new file mode 100644 index 0000000..416b29c --- /dev/null +++ b/wagtail_modeltranslation/migrate/__init__.py @@ -0,0 +1,3 @@ +# coding: utf-8 + +default_app_config = 'wagtail_modeltranslation.migrate.apps.MigrateConfig' diff --git a/wagtail_modeltranslation/migrate/apps.py b/wagtail_modeltranslation/migrate/apps.py new file mode 100644 index 0000000..87305df --- /dev/null +++ b/wagtail_modeltranslation/migrate/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class MigrateConfig(AppConfig): + name = 'wagtail_modeltranslation.migrate' + label = 'wagtail_modeltranslation_migrate' + verbose_name = "Wagtail Modeltranslation migrate" diff --git a/wagtail_modeltranslation/migrate/management/__init__.py b/wagtail_modeltranslation/migrate/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/wagtail_modeltranslation/migrate/management/commands/__init__.py b/wagtail_modeltranslation/migrate/management/commands/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/wagtail_modeltranslation/migrate/management/commands/migrate.py b/wagtail_modeltranslation/migrate/management/commands/migrate.py new file mode 100644 index 0000000..9d42d2e --- /dev/null +++ b/wagtail_modeltranslation/migrate/management/commands/migrate.py @@ -0,0 +1,5 @@ +from wagtail_modeltranslation.management.commands.migrate_translation import Command as MigrateCommand + + +class Command(MigrateCommand): + pass diff --git a/wagtail_modeltranslation/migrate/management/commands/migrate_original.py b/wagtail_modeltranslation/migrate/management/commands/migrate_original.py new file mode 100644 index 0000000..124c8f0 --- /dev/null +++ b/wagtail_modeltranslation/migrate/management/commands/migrate_original.py @@ -0,0 +1,5 @@ +from django.core.management.commands.migrate import Command as MigrateCommand + + +class Command(MigrateCommand): + pass