kopia lustrzana https://github.com/wagtail/bakerydemo
46 wiersze
2.0 KiB
Python
46 wiersze
2.0 KiB
Python
import os
|
|
|
|
from django.conf import settings
|
|
from django.core.files.storage import FileSystemStorage, default_storage
|
|
from django.core.management import call_command
|
|
from django.core.management.base import BaseCommand
|
|
from wagtail.models import Page, Site
|
|
|
|
|
|
class Command(BaseCommand):
|
|
def _copy_files(self, local_storage, path):
|
|
"""
|
|
Recursively copy files from local_storage to default_storage. Used
|
|
to automatically bootstrap the media directory (both locally and on
|
|
cloud providers) with the images linked from the initial data (and
|
|
included in MEDIA_ROOT).
|
|
"""
|
|
directories, file_names = local_storage.listdir(path)
|
|
for directory in directories:
|
|
self._copy_files(local_storage, path + directory + "/")
|
|
for file_name in file_names:
|
|
with local_storage.open(path + file_name) as file_:
|
|
default_storage.save(path + file_name, file_)
|
|
|
|
def handle(self, **options):
|
|
fixtures_dir = os.path.join(settings.PROJECT_DIR, "base", "fixtures")
|
|
fixture_file = os.path.join(fixtures_dir, "bakerydemo.json")
|
|
|
|
print("Copying media files to configured storage...")
|
|
local_storage = FileSystemStorage(os.path.join(fixtures_dir, "media"))
|
|
self._copy_files(local_storage, "") # file storage paths are relative
|
|
|
|
# Wagtail creates default Site and Page instances during install, but we already have
|
|
# them in the data load. Remove the auto-generated ones.
|
|
if Site.objects.filter(hostname="localhost").exists():
|
|
Site.objects.get(hostname="localhost").delete()
|
|
if Page.objects.filter(title="Welcome to your new Wagtail site!").exists():
|
|
Page.objects.get(title="Welcome to your new Wagtail site!").delete()
|
|
|
|
call_command("loaddata", fixture_file, verbosity=0)
|
|
call_command("update_index", verbosity=0)
|
|
|
|
print(
|
|
"Awesome. Your data is loaded! The bakery's doors are almost ready to open..."
|
|
)
|