view bin/publishstaticweb.py @ 106:66cbfc772f84

Add bin/inittreepkg.py, a script to automate some of the installation and some support code for in in the packager classes.
author Bernhard Herzog <bh@intevation.de>
date Tue, 04 Mar 2008 14:31:28 +0000
parents 9a602d8eaa60
children 8ec9ed76d67b
line wrap: on
line source
#! /usr/bin/python2.4
# Copyright (C) 2007 by Intevation GmbH
# Authors:
# Bernhard Herzog <bh@intevation.de>
#
# This program is free software under the GPL (>=v2)
# Read the file COPYING coming with the software for details.

"""Publishes a static web-site with a status report"""

import sys
import os
from optparse import OptionParser
from ConfigParser import SafeConfigParser

import treepkgcmd
from treepkg.readconfig import read_config_section
from treepkg.run import call
from treepkg.cmdexpand import cmdexpand
from treepkg.util import ensure_directory

def remove_trailing_slashes(s):
    return s.rstrip("/")

def expand_filename(filename):
    """
    Applies os.path.expanduser and os.path.expandvars to filename
    """
    return os.path.expandvars(os.path.expanduser(filename))

staticweb_desc = ["build_user", "build_host", "build_create",
                  ("build_dir", remove_trailing_slashes),
                  "publish_user", "publish_host",
                  ("publish_dir", remove_trailing_slashes),
                  ("cachedir",
                   lambda s: expand_filename(remove_trailing_slashes(s)))]

def read_config(filename):
    parser = SafeConfigParser()
    parser.read([filename])
    return read_config_section(parser, "staticweb", staticweb_desc)

def parse_commandline():
    parser = OptionParser()
    parser.set_defaults(config_file=os.path.join(treepkgcmd.topdir,
                                                 "staticweb.cfg"))
    parser.add_option("--config-file",
                      help=("The tree packager config file."
                            " Default staticweb.cfg"))
    return parser.parse_args()

def publish_static_site(config_filename):
    config = read_config(config_filename)

    # create web-page on build host
    call(cmdexpand("ssh $build_user$@$build_host $build_create $build_dir",
                   **config))

    # rsync the new web-pages to the local cache
    ensure_directory(config["cachedir"])
    call(cmdexpand("rsync -rL --delete $build_user$@$build_host:$build_dir/"
                   " $cachedir",
                   **config))

    # rsync the web pages from the local cache to the publishing host
    call(cmdexpand("rsync -rL --delete $cachedir/"
                   " $publish_user$@$publish_host:$publish_dir",
                   **config))


def main():
    options, args = parse_commandline()
    publish_static_site(options.config_file)

main()
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)