reset_demo.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from django.conf import settings
  2. from django.core.files.storage import default_storage
  3. from django.core.management import call_command
  4. from django.core.management.base import BaseCommand, CommandError
  5. from django.db import DEFAULT_DB_ALIAS
  6. from django_extensions.settings import POSTGRESQL_ENGINES
  7. from wagtail.documents import get_document_model
  8. from wagtail.images import get_image_model
  9. class Command(BaseCommand):
  10. def handle(self, **options):
  11. if settings.DATABASES[DEFAULT_DB_ALIAS]["ENGINE"] not in POSTGRESQL_ENGINES:
  12. raise CommandError(
  13. "This command can be used only with PostgreSQL databases."
  14. )
  15. # 1. (optional) Remove all objects from S3
  16. if "s3" in settings.DEFAULT_FILE_STORAGE:
  17. self.stdout.write("Removing files from S3")
  18. default_storage.bucket.objects.all().delete()
  19. else:
  20. self.stdout.write("Removing images")
  21. get_image_model().objects.all().delete()
  22. self.stdout.write("Removing documents")
  23. get_document_model().objects.all().delete()
  24. # 2. Reset database to nothing
  25. self.stdout.write("Reset schema")
  26. call_command("reset_schema", interactive=False)
  27. # 3. Rebuild database
  28. call_command("migrate", interactive=False)
  29. # 4. Re-import data
  30. call_command("load_initial_data")
  31. # 5. Change the admin password (in case it's different in this environment)
  32. call_command("reset_admin_password")