/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
7476.2.1 by Jelmer Vernooij
Default to running Python 3.
1
#!/usr/bin/env python3
2054.2.16 by Aaron Bentley
More updates from review comments
2
2054.2.1 by Aaron Bentley
Start work on pretty rest conversion
3
import errno
4
import os
7479.2.1 by Jelmer Vernooij
Drop python2 support.
5
from io import StringIO
2054.2.1 by Aaron Bentley
Start work on pretty rest conversion
6
import sys
7
2054.2.16 by Aaron Bentley
More updates from review comments
8
try:
9
    from docutils.core import publish_file
10
    from docutils.parsers import rst
11
except ImportError:
6619.3.3 by Jelmer Vernooij
Apply 2to3 print fix.
12
    print("Missing dependency.  Please install docutils.")
2054.2.16 by Aaron Bentley
More updates from review comments
13
    sys.exit(1)
14
try:
15
    from elementtree.ElementTree import XML
16
    from elementtree import HTMLTreeBuilder
17
except ImportError:
6619.3.3 by Jelmer Vernooij
Apply 2to3 print fix.
18
    print("Missing dependency.  Please install ElementTree.")
2054.2.16 by Aaron Bentley
More updates from review comments
19
    sys.exit(1)
20
try:
21
    import kid
22
except ImportError:
6619.3.3 by Jelmer Vernooij
Apply 2to3 print fix.
23
    print("Missing dependency.  Please install Kid.")
2054.2.16 by Aaron Bentley
More updates from review comments
24
    sys.exit(1)
25
2054.2.1 by Aaron Bentley
Start work on pretty rest conversion
26
27
def kidified_rest(rest_file, template_name):
2054.2.12 by Aaron Bentley
Switch to HTMLTreeBuilder, so that HTML entity references are handled.
28
    xhtml_file = StringIO()
29
    # prevent docutils from autoclosing the StringIO
30
    xhtml_file.close = lambda: None
31
    xhtml = publish_file(rest_file, writer_name='html', destination=xhtml_file,
7143.16.6 by Jelmer Vernooij
Fix E124.
32
                         settings_overrides={"doctitle_xform": 0})
2054.2.12 by Aaron Bentley
Switch to HTMLTreeBuilder, so that HTML entity references are handled.
33
    xhtml_file.seek(0)
34
    xml = HTMLTreeBuilder.parse(xhtml_file)
35
    head = xml.find('head')
36
    body = xml.find('body')
2054.2.1 by Aaron Bentley
Start work on pretty rest conversion
37
    assert head is not None
38
    assert body is not None
7143.16.17 by Jelmer Vernooij
Fix E225.
39
    template = kid.Template(file=template_name, head=head, body=body)
2054.2.3 by Aaron Bentley
Get page generation working
40
    return (template.serialize(output="html"))
2054.2.1 by Aaron Bentley
Start work on pretty rest conversion
41
2054.2.16 by Aaron Bentley
More updates from review comments
42
2054.2.1 by Aaron Bentley
Start work on pretty rest conversion
43
def safe_open(filename, mode):
44
    try:
45
        return open(filename, mode + 'b')
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
46
    except IOError as e:
2054.2.1 by Aaron Bentley
Start work on pretty rest conversion
47
        if e.errno != errno.ENOENT:
48
            raise
49
        sys.stderr.write('file not found: %s\n' % sys.argv[2])
50
        sys.exit(3)
2054.2.16 by Aaron Bentley
More updates from review comments
51
52
53
def main(template, source=None, target=None):
54
    if source is not None:
55
        rest_file = safe_open(source, 'r')
56
    else:
57
        rest_file = sys.stdin
58
    if target is not None:
59
        out_file = safe_open(target, 'w')
60
    else:
61
        out_file = sys.stdout
62
    out_file.write(kidified_rest(rest_file, template))
63
64
assert len(sys.argv) > 1
65
2691.1.17 by Ian Clatworthy
Fix pretty doc generation so works for all html docs
66
# Strip options so only the arguments are passed
67
args = [x for x in sys.argv[1:] if not x.startswith('-')]
68
main(*args)