publish
(target_url, credentials=None, **extra
)This method implements the actual publishing process. It's supposed to implement a generator that reports the progress of the publishing. If at any point something happens that would cause an error for the deployment this can be signalled with the fail method which aborts the execution and reports an error.
The parameters to the function are as follows:
target_url
: a URL object with the parsed URL. This object comes from the
Werkzeug library and gives access to the individual parts of a URL by the
exposed attributes (Read about the URL object).credentials
: an optional dictionary with command line supplied credentials.
Note that these credentials might be completely absent and the keys which are
provided might change with future versions of Lektor.**extra
: for forwards compatibility publishers are required to ignore extra
keyword arguments.Each line in the generator must be a string which is then either logged to the output in the console or in the deploy/publish window in the admin UI.
This example implements a simple publisher that just copies all built files into a new location.
import os import shutil from lektor.publisher import Publisher class CopyPublisher(Publisher): def publish(self, target_url, credentials=None, **extra): src_path = self.output_path dst_path = target_url.path strip = len(src_path) + 1 for path, folders, filenames in os.walk(src_path): # Ignore the .lektor folder. folders[:] = [x for x in folders if x != '.lektor'] # Copy all files over for filename in filenames: full_path = os.path.join(src_path, path, filename) dst = os.path.join(path, full_path[strip:]) # Make sure the destination folder exists. try: os.makedirs(os.path.dirname(dst)) except (OSError, IOError): pass # Copy the file yield 'Copy %s' % filename shutil.copy(full_path, dst) yield 'Done' class MyPlugin(Plugin): def on_setup_env(self, **extra): self.env.add_publisher('copy', CopyPublisher)
This publisher registers with the copy
scheme and could be used like this:
target_url = copy:///path/to/destination/folder
Comments