Mercurial > treepkg
diff bin/publishstaticweb.py @ 78:9a602d8eaa60
initial revision of the subversion repository
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Tue, 24 Apr 2012 17:13:43 +0200 |
parents | |
children | 8ec9ed76d67b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/publishstaticweb.py Tue Apr 24 17:13:43 2012 +0200 @@ -0,0 +1,75 @@ +#! /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()