Exemple #1
0
    def handle(self, verbosity, filename, *args, **options):
        activate(settings.LANGUAGE_CODE)
        path = self.find_fixture(filename)
        if self.verbosity >= 2:
            self.stdout.write("Importing products from: {}".format(path))
        with open(path, 'r') as fh:
            data = json.load(fh)

        for number, product in enumerate(data, 1):
            product_model = product.pop('product_model')
            ProductModel = ContentType.objects.get(app_label='myshop',
                                                   model=product_model)
            class_name = 'myshop.management.serializers.' + ProductModel.model_class(
            ).__name__ + 'Serializer'
            serializer_class = import_string(class_name)
            serializer = serializer_class(data=product)
            assert serializer.is_valid(), serializer.errors
            instance = serializer.save()
            self.stdout.write("{}. {}".format(number, instance))
            if product_model == 'commodity':
                languages = get_public_languages()
                try:
                    clipboard = CascadeClipboard.objects.get(
                        identifier=instance.slug)
                except CascadeClipboard.DoesNotExist:
                    pass
                else:
                    deserialize_to_placeholder(instance.placeholder,
                                               clipboard.data, languages[0])
                    plugins = list(
                        instance.placeholder.get_plugins(
                            language=languages[0]).order_by('path'))
                    for language in languages[1:]:
                        copy_plugins_to(plugins, instance.placeholder,
                                        language)
Exemple #2
0
    def create_social_icons(self):
        from cms.utils.i18n import get_public_languages

        default_language = get_public_languages()[0]

        try:
            clipboard = CascadeClipboard.objects.get(identifier='social-icons')
        except CascadeClipboard.DoesNotExist:
            self.stderr.write(
                "No Persisted Clipboard named 'social-icons' found.")
        else:
            static_placeholder = StaticPlaceholder.objects.create(
                code='Social Icons')
            deserialize_to_placeholder(
                static_placeholder.public, clipboard.data, default_language)
            deserialize_to_placeholder(
                static_placeholder.draft, clipboard.data, default_language)
            self.stdout.write("Added Social Icons to Static Placeholder")
Exemple #3
0
            ProductModel = ContentType.objects.get(app_label='{{ cookiecutter.app_name }}_shop', model=product_model)
            class_name = '{{ cookiecutter.app_name }}.base_shop.management.serializers.' + ProductModel.model_class().__name__ + 'Serializer'
            serializer_class = import_string(class_name)
            serializer = serializer_class(data=product)
            assert serializer.is_valid(), serializer.errors
            instance = serializer.save()
            self.assign_product_to_catalog(instance)
            self.stdout.write("{}. {}".format(number, instance))
            if product_model == 'commodity':
                languages = get_public_languages()
                try:
                    clipboard = CascadeClipboard.objects.get(identifier=instance.slug)
                except CascadeClipboard.DoesNotExist:
                    pass
                else:
                    deserialize_to_placeholder(instance.placeholder, clipboard.data, languages[0])
                    plugins = list(instance.placeholder.get_plugins(language=languages[0]).order_by('path'))
                    for language in languages[1:]:
                        copy_plugins_to(plugins, instance.placeholder, language)

    def find_fixture(self, filename):
        if os.path.isabs(filename):
            fixture_dirs = [os.path.dirname(filename)]
            fixture_name = os.path.basename(filename)
        else:
            fixture_dirs = settings.FIXTURE_DIRS
            if os.path.sep in os.path.normpath(filename):
                fixture_dirs = [os.path.join(dir_, os.path.dirname(filename))
                                for dir_ in fixture_dirs]
                fixture_name = os.path.basename(filename)
            else:
Exemple #4
0
    def deserialize_to_placeholder(self, page, data, slot='Main Content'):
        from cms.utils.i18n import get_public_languages

        language = get_public_languages()[0]
        placeholder = page.placeholders.get(slot=slot)
        deserialize_to_placeholder(placeholder, data, language)
Exemple #5
0
    def create_recommended_pages(self):
        from cms.models.pagemodel import Page
        from cms.utils.i18n import get_public_languages

        default_language = get_public_languages()[0]

        # create the HOME page
        if Page.objects.public().filter(is_home=True).exists():
            yield "A home page exists already."
        else:
            page, created = self.get_or_create_page("Home", None, in_navigation=True)
            assert created is True
            try:
                clipboard = CascadeClipboard.objects.get(identifier='home')
            except CascadeClipboard.DoesNotExist:
                pass
            else:
                self.deserialize_to_placeholder(page, clipboard.data)
            try:
                clipboard = CascadeClipboard.objects.get(identifier='footer')
            except CascadeClipboard.DoesNotExist:
                pass
            else:
                static_placeholder = StaticPlaceholder.objects.create(code='Static Footer')
                deserialize_to_placeholder(static_placeholder.public, clipboard.data, default_language)
                deserialize_to_placeholder(static_placeholder.draft, clipboard.data, default_language)
            page.set_as_homepage()
            self.publish_in_all_languages(page)
            yield "Created recommended CMS home page."

        parent_page, created = self.get_or_create_page("Legal", None, reverse_id='shop-legal-pages', soft_root=True)
        if created:
            self.publish_in_all_languages(parent_page)
            yield "Created recommended CMS page 'Legal'."
        else:
            yield "Recommended CMS page 'Legal' exists already."

        page, created = self.get_or_create_page("Imprint", None, parent_page=parent_page, in_navigation=True)
        if created:
            self.publish_in_all_languages(page)
            yield "Created recommended CMS page 'Imprint'."
        else:
            yield "Recommended CMS page 'Imprint' exists already."

        page, created = self.get_or_create_page("Terms and Conditions", None, parent_page=parent_page, in_navigation=True)
        if created:
            self.publish_in_all_languages(page)
            yield "Created recommended CMS page 'Terms and Conditions'."
        else:
            yield "Recommended CMS page 'Terms and Conditions' exists already."

        page, created = self.get_or_create_page("Privacy Protection", None, parent_page=parent_page, in_navigation=True)
        if created:
            self.publish_in_all_languages(page)
            yield "Created recommended CMS page 'Privacy Protection'."
        else:
            yield "Recommended CMS page 'Privacy Protection' exists already."

        self.personal_pages, created = self.get_or_create_page("Personal Pages", None, reverse_id='shop-personal-pages', soft_root=True)
        if created:
            self.publish_in_all_languages(self.personal_pages)
            yield "Created recommended CMS page 'Personal Pages'."
        else:
            yield "Recommended CMS page 'Personal Pages' exists already."

        self.impersonal_pages, created = self.get_or_create_page("Join Us", None, reverse_id='shop-impersonal-pages', soft_root=True)
        if created:
            self.publish_in_all_languages(self.impersonal_pages)
            yield "Created recommended CMS page 'Join Us'."
        else:
            yield "Recommended CMS page 'Join Us' exists already."
Exemple #6
0
    def create_recommended_pages(self):
        from cms.models.pagemodel import Page
        from cms.utils.i18n import get_public_languages

        default_language = get_public_languages()[0]

        # create the HOME page
        if Page.objects.public().filter(is_home=True).exists():
            yield "A home page exists already."
        else:
            page, created = self.get_or_create_page("Home", None, in_navigation=True)
            assert created is True
            try:
                clipboard = CascadeClipboard.objects.get(identifier='home')
            except CascadeClipboard.DoesNotExist:
                pass
            else:
                self.deserialize_to_placeholder(page, clipboard.data)
            try:
                clipboard = CascadeClipboard.objects.get(identifier='footer')
            except CascadeClipboard.DoesNotExist:
                pass
            else:
                static_placeholder = StaticPlaceholder.objects.create(code='Static Footer')
                deserialize_to_placeholder(static_placeholder.public, clipboard.data, default_language)
                deserialize_to_placeholder(static_placeholder.draft, clipboard.data, default_language)
            page.set_as_homepage()
            self.publish_in_all_languages(page)
            yield "Created recommended CMS home page."

        parent_page, created = self.get_or_create_page("Legal", None, reverse_id='shop-legal-pages', soft_root=True)
        if created:
            self.publish_in_all_languages(parent_page)
            yield "Created recommended CMS page 'Legal'."
        else:
            yield "Recommended CMS page 'Legal' exists already."

        page, created = self.get_or_create_page("Imprint", None, parent_page=parent_page, in_navigation=True)
        if created:
            self.publish_in_all_languages(page)
            yield "Created recommended CMS page 'Imprint'."
        else:
            yield "Recommended CMS page 'Imprint' exists already."

        page, created = self.get_or_create_page("Terms and Conditions", None, parent_page=parent_page, in_navigation=True)
        if created:
            self.publish_in_all_languages(page)
            yield "Created recommended CMS page 'Terms and Conditions'."
        else:
            yield "Recommended CMS page 'Terms and Conditions' exists already."

        page, created = self.get_or_create_page("Privacy Protection", None, parent_page=parent_page, in_navigation=True)
        if created:
            self.publish_in_all_languages(page)
            yield "Created recommended CMS page 'Privacy Protection'."
        else:
            yield "Recommended CMS page 'Privacy Protection' exists already."

        self.personal_pages, created = self.get_or_create_page("Personal Pages", None, reverse_id='shop-personal-pages', soft_root=True)
        if created:
            self.publish_in_all_languages(self.personal_pages)
            yield "Created recommended CMS page 'Personal Pages'."
        else:
            yield "Recommended CMS page 'Personal Pages' exists already."

        self.impersonal_pages, created = self.get_or_create_page("Join Us", None, reverse_id='shop-impersonal-pages', soft_root=True)
        if created:
            self.publish_in_all_languages(self.impersonal_pages)
            yield "Created recommended CMS page 'Join Us'."
        else:
            yield "Recommended CMS page 'Join Us' exists already."

        try:
            apphook = self.get_installed_apphook('CatalogSearchApp')
        except MissingAppHook:
            yield "Unable to create recommended CMS page 'Search', because django-elasticsearch-dsl is not installed."
        else:
            page, created = self.get_or_create_page("Search", apphook=apphook, reverse_id='shop-search-product')
            if created:
                try:
                    clipboard = CascadeClipboard.objects.get(identifier=page.get_slug(default_language))
                except CascadeClipboard.DoesNotExist:
                    pass
                else:
                    self.deserialize_to_placeholder(page, clipboard.data)
                self.create_breadcrumb(page, {'render_type': 'catalog'})
                self.publish_in_all_languages(page)
                yield "Created recommended CMS page 'Search'."
            else:
                yield "Recommended CMS page 'Search' exists already."