Giter Site home page Giter Site logo

wagtailimporter's Introduction

Wagtail Page Importer

Adds the ability to Wagtail to import/update pages from a Yaml file.

Installing

INSTALLED_APPS = (
    ...
    'wagtailimporter',
    ...
)

Usage

./manage.py import_pages <page.yml> [<page.yml> [<page.yml> ... ] ...]

File format

Create a Yaml file/s for your pages.

url: /site
type: home.homepage

# Your fields go here
title: Welcome to my site!

---

url: /site/about-us
type: basic.basicpage

title: About Us
# This is a stream field
body:
    - type: heading
      value: About Us
    - type: paragraph
      value: |
            <p>
                Rich text block.
            </p>

    - type: linkbutton
      # Yaml object to reference another page on the site
      link: !page
          url: /site/contact-us
      text: Contact us

# This is rich text
tagline: |
    <div>We are <em>super great!</em></div>

---

!custom_snippet
    slug: my-snippet
    title: My Snippet

Foreign Object References

Instead of having to resolve foreign keys (yuck!) you can pass Yaml objects to create references, e.g. !page takes arguments that are used to reference a page (by path url).

Builtin reference types:

  • !page

    Takes a url parameter to another page (must be already present).

  • !image

    Takes a file parameter to an image (either in MEDIA/original/images.

    Can also accept other Image related parameters such as title.

  • !document

    Takes a file parameter to a document (e.g. a PDF) - not to be confused with a yaml 'document'.

    Also accepts a title paramater (recommended for a better admin experience)

  • !site

    Lookup a Site by its hostname.

    Can also create sites if you specify root_page (as a !page).

    !site
        hostname: localhost
        site_name: My Site
        root_page: !page
            url: /my-site
        is_default_site: true
    
  • All registered Wagtail settings, using !app.mysetting

    !app.socialmedialinks:
        site: !site
            hostname: localhost
        facebook_url: https://www.facebook.com/squareweave/
    

You can also create your own for your models:

import wagtailimporter.serializer

class Toplevel(wagtailimporter.serializer.GetOrCreateForeignObject):
    """A reference to a toplevel"""
    yaml_tag = '!toplevel'
    model = TopLevel

The following base classes are provided:

  • GetForeignObject

    Calls get on an object defined by lookup_keys.

  • GetOrCreateForeignObject (inherits from GetForeignObject)

    Calls get_or_create as above.

  • GetOrCreateClusterableForeignObject (inherits from GetForeignObject)

    Calls get or creates a new, unsaved object (useful for ClusterableModel related classes).

    For example:

    url: /my/page
    type: some.type
    related_pages:
        - !relatedpage
              page: !page
                  url: /my/other/page
    
    class RelatedPage(Orderable):
        """A related page."""
    
        parent = ParentalKey(SiteSettings, related_name='related_pages')
        page = models.ForeignKey('wagtailcore.Page',
                                 null=True, blank=True,
                                 on_delete=models.CASCADE,
                                 related_name='+')
    
        panels = [
            PageChooserPanel('page'),
        ]
    
    
    class RelatedPageTag(GetOrCreateClusterableForeignObject):
    
        model = RelatedPage
        yaml_tag = '!relatedpage'
        lookup_keys = ('page',)
    

Importing snippets

Foreign object references can also be used to create and import snippets.

!custom_snippet
    slug: my-snippet
    title: My Snippet
import wagtailimporter.serializer

class MySnippet(wagtailimporter.serializer.GetOrCreateForeignObject):
    """Creates a snippet"""
    yaml_tag = '!my-snippet'
    model = MySnippet

    lookup_keys = ('slug',)

License

Copyright (c) 2016, Squareweave Pty Ltd

All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  • Neither the name of the Squareweave nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SQUAREWEAVE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

wagtailimporter's People

Contributors

mx-moth avatar danni avatar dibell avatar wsot avatar

Stargazers

Dan Hayden avatar Roldão Rego Jr. avatar Dominik Resl avatar Martijn Jacobs avatar Rob Moorman avatar Mike Dingjan avatar Michael van Tellingen avatar Richard Campen avatar Matt H avatar Goto Hayato avatar Martin Sandström avatar Balazs Endresz avatar Christian Ledermann avatar  avatar Tobias avatar Salvador Faria avatar jmz avatar Luiz Boaretto avatar Hone Watson avatar Shawn Davis avatar Scott Sharkey avatar tom.wen avatar Alex Gleason avatar Rogerio Marques avatar

Watchers

 avatar Sam Marley-Jarrett avatar James Cloos avatar Thomas Gordon avatar Gareth Jones avatar Greg Parsons avatar  avatar  avatar

wagtailimporter's Issues

Documentation: add unicode input in README

That would avoid users searching for the valid way of managing other things than english.

Working sample:

url: /home/foo/bar
type: foo.bar
date: "2018-11-14"
title: "title with more than ascii : \xe9"
body: "
        \xe9\xe8 should be rendered as valid characters, not escaped ones.
        Note that simple and double quotes have different meanings in yaml.
        With simple quotes these escaped characters would not be interpreted.
      "

embedded images in rich text

Hi. I'm trying to work out how the importer can be used or extended to include images embedded in rich text fields. Any pointers would be appreciated.

Syntax error with python 3.4.2

  File "/srv/projects/protowag/.virtualenvs/protowag/lib/python3.4/site-packages/wagtailimporter/serializer.py", line 169
    obj, _ = self.model.objects.get_or_create(**self.lookup(),
                                                             ^
SyntaxError: invalid syntax

The code part:


    def get_object(self):
        obj, _ = self.model.objects.get_or_create(**self.lookup(),
                                                  defaults=self.get_defaults())
        return obj

Proposed fix:


   def get_object(self):
       obj, _ = self.model.objects.get_or_create(
                                                 defaults=self.get_defaults(),
                                                 **self.lookup(),
       )
       return obj

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.