# HG changeset patch # User Bernhard Herzog # Date 1176401118 -7200 # Node ID 57a0b747ea3e422b33b6544725bc5e1c8fff608f # Parent 517253fa987fd5d1f0966df622297b9609339e11 add publishstaticweb.py and demo config file diff -r 517253fa987f -r 57a0b747ea3e demostaticweb.cfg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/demostaticweb.cfg Thu Apr 12 20:05:18 2007 +0200 @@ -0,0 +1,38 @@ +# Demo config file for publishstaticweb.py. The default config file +# used by publishstaticweb.py is staticweb.cfg, so to use this file as +# the basis for your configuration, copy or rename this file and adapt +# it to your needs. + +[staticweb] +# Username and host on which the treepackager runs. publishstaticweb.py +# has to be able to connect to that host as the builduser via ssh +# without knowning the password. This is best achieved with the +# ssh-agent. Also, publishstaticweb.py uses rsync to copy files from +# build_host to the local host. +build_user: builder +build_host: localhost + +# the program to run on build_host to create the static web-page. +# Currently publishstaticweb.py assumes that the default configuration +# for that program works. +build_create: ~/treepackager/createstaticweb.py + +# the directory on build_host where the static web-site should be put. +# This value is used as the parameter to the build_create command on +# build_host. +build_dir: /tmp/treepkg-web + +# Username and host on which to publish the static pages. +# publishstaticweb.py uses rsync to copy the files from the local cache +# to the publish_host. +publish_user: builder +publish_host: localhost + +# the directory on the publish_host where the web-site resides. It's +# the directory where the index.html file will be found. The script may +# delete files under that directory. +publish_dir: /tmp/treepkg-status + +# local cache directory. publishstaticweb.py may delete it and its +# contents. +cachedir: /tmp/treepkg-status diff -r 517253fa987f -r 57a0b747ea3e publishstaticweb.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/publishstaticweb.py Thu Apr 12 20:05:18 2007 +0200 @@ -0,0 +1,64 @@ +#! /usr/bin/python2.4 +# Copyright (C) 2007 by Intevation GmbH +# Authors: +# Bernhard Herzog +# +# 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 os +from optparse import OptionParser +from ConfigParser import SafeConfigParser + +from treepkg.readconfig import read_config_section +from treepkg.run import call +from treepkg.cmdexpand import cmdexpand + +def remove_trailing_slashes(s): + return s.rstrip("/") + +staticweb_desc = ["build_user", "build_host", "build_create", + ("build_dir", remove_trailing_slashes), + "publish_user", "publish_host", + ("publish_dir", remove_trailing_slashes), + ("cachedir", remove_trailing_slashes)] + +def read_config(filename): + parser = SafeConfigParser() + parser.read([filename]) + return read_config_section(parser, "staticweb", staticweb_desc) + +def parse_commandline(): + parser = OptionParser() + dirname = os.path.dirname(__file__) + parser.set_defaults(config_file=os.path.join(dirname, "staticweb.cfg")) + parser.add_option("--config-file", + help=("The tree packager config file." + " Default staticweb.cfg")) + return parser.parse_args() + +def publish_static_site(treepkg_config): + config = read_config(treepkg_config) + + # 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 + 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()