Files
empire/weirdlittleempire/management/commands/initialize_shop_demo.py
2021-02-23 23:00:01 +00:00

105 lines
4.2 KiB
Python

import os
from django.conf import settings
from django.core.management.base import BaseCommand, CommandError
from django.core.management import call_command
from django.utils.translation import ugettext_lazy as _
try:
import czipfile as zipfile
except ImportError:
import zipfile
class Command(BaseCommand):
help = _("Initialize the workdir to run the demo of weirdlittleempire.")
def add_arguments(self, parser):
parser.add_argument(
'--noinput', '--no-input',
action='store_false',
dest='interactive',
default=True,
help="Do NOT prompt the user for input of any kind.",
)
def set_options(self, **options):
self.interactive = options['interactive']
def clear_compressor_cache(self):
from django.core.cache import caches
from django.core.cache.backends.base import InvalidCacheBackendError
from compressor.conf import settings
cache_dir = os.path.join(settings.STATIC_ROOT,
settings.COMPRESS_OUTPUT_DIR)
if settings.COMPRESS_ENABLED is False or not os.path.isdir(cache_dir) or os.listdir(cache_dir) != []:
return
try:
caches['compressor'].clear()
except InvalidCacheBackendError:
pass
def handle(self, verbosity, *args, **options):
self.set_options(**options)
self.clear_compressor_cache()
call_command('migrate')
initialize_file = os.path.join(settings.WORK_DIR, '.initialize')
if os.path.isfile(initialize_file):
self.stdout.write("Initializing project weirdlittleempire")
call_command('makemigrations', 'weirdlittleempire')
call_command('migrate')
os.remove(initialize_file)
call_command('loaddata', 'skeleton')
call_command('shop', 'check-pages', add_recommended=True)
call_command('assign_iconfonts')
call_command('create_social_icons')
call_command('download_workdir', interactive=self.interactive)
call_command('loaddata', 'products-media')
call_command('import_products')
self.create_polymorphic_subcategories()
try:
call_command('search_index', action='rebuild', force=True)
except:
pass
else:
self.stdout.write("Project weirdlittleempire already initialized")
call_command('migrate')
def create_polymorphic_subcategories(self):
from cms.models.pagemodel import Page
from shop.management.commands.shop import Command as ShopCommand
from weirdlittleempire.models import Commodity, SmartCard, SmartPhoneModel
apphook = ShopCommand.get_installed_apphook('CatalogListCMSApp')
catalog_pages = Page.objects.drafts().filter(
application_urls=apphook.__class__.__name__)
assert catalog_pages.count() == 1, "There should be only one catalog page"
self.create_subcategory(
apphook, catalog_pages.first(), "Earphones", Commodity)
self.create_subcategory(
apphook, catalog_pages.first(), "Smart Cards", SmartCard)
self.create_subcategory(
apphook, catalog_pages.first(), "Smart Phones", SmartPhoneModel)
def create_subcategory(self, apphook, parent_page, title, product_type):
from cms.api import create_page
from cms.constants import TEMPLATE_INHERITANCE_MAGIC
from cms.utils.i18n import get_public_languages
from shop.management.commands.shop import Command as ShopCommand
from shop.models.product import ProductModel
from shop.models.related import ProductPageModel
language = get_public_languages()[0]
page = create_page(
title,
TEMPLATE_INHERITANCE_MAGIC,
language,
apphook=apphook,
created_by="manage.py initialize_shop_demo",
in_navigation=True,
parent=parent_page,
)
ShopCommand.publish_in_all_languages(page)
page = page.get_public_object()
for product in ProductModel.objects.instance_of(product_type):
ProductPageModel.objects.create(page=page, product=product)