project-config/specs/generate_specs_site.py
Doug Hellmann b332c2a776 Generate specs.o.o root page from template
Use a YAML file listing the projects to generate the specs.openstack.org
root page and an OPML file for all of the available RSS feeds.

These changes are based on the work of Maish Saidel-Keesing
<maishsk@gmail.com> in https://review.openstack.org/#/c/140041/

Change-Id: I828d65f10fb7608b59e3561cedc9553d4d96ee75
2014-12-18 16:06:11 -05:00

66 lines
2.0 KiB
Python
Executable File

#!/usr/bin/env python
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Read the specs.yaml file and generate the index.html and specs.opml files.
"""
from __future__ import print_function
import argparse
import os
import jinja2
import yaml
def render_template(template_filename, output_filename, template_context):
with open(template_filename, 'r') as f:
template = jinja2.Template(f.read())
print('Writing %r' % output_filename)
with open(output_filename, 'w') as f:
f.write(template.render(**template_context))
parser = argparse.ArgumentParser()
parser.add_argument('-v', '--verbose',
dest='verbose',
default=False,
action='store_true',
)
parser.add_argument(
'infile',
help='Path to specs/specs.yaml',
)
args = parser.parse_args()
print('Reading project data from %r' % args.infile)
infile = yaml.load(open(args.infile, 'r'))
template_path = os.path.dirname(args.infile)
template_context = {
'projects': infile['projects'],
'programs': infile['programs'],
'all': infile['projects'] + infile['programs'],
}
outdir = os.path.join(template_path, 'output')
if not os.path.exists(outdir):
os.makedirs(outdir)
for template_name, filename in [('index.html.tmpl', 'index.html'),
('specs.opml.tmpl', 'specs.opml')]:
render_template(os.path.join(template_path, template_name),
os.path.join(outdir, filename),
template_context)