charm-specs/doc/source/redirect.py
Andreas Jaeger 77dfcdd291 Doc cleanup, use openstackdocstheme
Switch to "modern" way of docs building in OpenStack:
* Use sphinx-build
* Use openstackdocstheme instead of old oslosphinx
* Adjust settings for openstackdocstheme
* Fix build errors:
  - There's no priorities folder in this repo,
    so remove non-existing links.
  - There's no backlog file, remove link.
  - remove links in specs that don't exist
  - fix RST link formatting
  - Fix RST errors

Change-Id: I0d1d1c866957e7dbd5d4e394b0368a0a5250b00b
2020-02-23 14:53:22 +01:00

55 lines
1.9 KiB
Python

# A simple sphinx plugin which creates HTML redirections from old names
# to new names. It does this by looking for files named "redirect" in
# the documentation source and using the contents to create simple HTML
# redirection pages for changed filenames.
import os.path
from sphinx.application import ENV_PICKLE_FILENAME
from sphinx.util import logging
from sphinx.util.console import bold
LOG = logging.getLogger(__name__)
def setup(app):
from sphinx.application import Sphinx
if not isinstance(app, Sphinx):
return
app.connect('build-finished', emit_redirects)
def process_redirect_file(app, path, ent):
parent_path = path.replace(app.builder.srcdir, app.builder.outdir)
with open(os.path.join(path, ent)) as redirects:
for line in redirects.readlines():
from_path, to_path = line.rstrip().split(' ')
from_path = from_path.replace('.rst', '.html')
to_path = to_path.replace('.rst', '.html')
redirected_filename = os.path.join(parent_path, from_path)
redirected_directory = os.path.dirname(redirected_filename)
if not os.path.exists(redirected_directory):
os.makedirs(redirected_directory)
with open(redirected_filename, 'w') as f:
f.write('<html><head><meta http-equiv="refresh" content="0; '
'url=%s" /></head></html>'
% to_path)
def emit_redirects(app, exc):
LOG.info(bold('scanning %s for redirects...') % app.builder.srcdir)
def process_directory(path):
for ent in os.listdir(path):
p = os.path.join(path, ent)
if os.path.isdir(p):
process_directory(p)
elif ent == 'redirects':
LOG.info(' found redirects at %s' % p)
process_redirect_file(app, path, ent)
process_directory(app.builder.srcdir)
LOG.info('...done')