9512c8837397d81bb98db3b48c95be9b1413c135
[tiramisu.git] / report / generate.py
1 from os.path import dirname, join
2 from rst import Rest, Paragraph, Strong, OrderedListItem, ListItem, Title, Link, Transition
3 from rst import Directive, Em, Quote, Text
4 from tiramisu.option import *
5 from tiramisu.config import *
6 #from makerestdoc import *
7
8 docdir = join(dirname(__file__), 'build')
9
10 def make_rst_file(filename, rstcontent):
11     fh = file(filename, 'w')
12     fh.write(rstcontent.text())
13     fh.close()
14
15 def descr_content(path, prefix, descr, root=False):
16     content = Rest()
17     title = Title(abovechar="", belowchar="=")
18     if root:
19         title.join(Text("Configuration's overview for: "), Quote(descr._name))
20     else:
21         title.join(Text("Group's overview for: "), Quote(descr._name))
22     content.add(title)
23     content.add(ListItem().join(Strong("name:"), Text(descr._name)))
24     if not root:
25         content.add(ListItem().join(Strong("path:"), Text(path)))
26     content.add(ListItem().join(Strong("description:"), Text(descr.impl_get_information('doc'))))
27     if not root:
28         content.add(ListItem().join(Strong("container:"), Text(prefix)))
29 # FIXME
30 #    if not root:
31 #        content.add(ListItem().join(Strong("type:"), Text(descr.group_type)))
32     if not root:
33         content.add(ListItem().join(Strong("requirements:"), Text(str(descr._requires))))
34         # FIXME
35 #    content.add(ListItem().join(Strong("is hidden:"), Text(str(descr._is_hidden()))))
36 #    content.add(ListItem().join(Strong("is disabled:"), Text(str(descr._is_disabled()))))
37     content.add(Transition())
38     content.add(Title(abovechar="", belowchar="-").join(Text("Ordered list of childrens for:"), Text(path)))
39     names, options = descr._children
40     for opt in options:
41         name = opt._name
42         link = Link(name + ":", join(path + '.' + name + ".html"))
43         # because of SympLink opt
44         if hasattr(opt, 'impl_get_information'):
45             doc = opt.impl_get_information('doc')
46         else:
47             doc = name
48         content.add(OrderedListItem(link, Text(opt.impl_get_information('doc'))))
49     content.add(Transition())
50     content.add(Paragraph(Link("back to index", "index.html")))
51     make_rst_file(join(docdir, path + '.txt'), content)
52     if root:
53         make_rst_file(join(docdir, 'index.txt'), content)
54
55 def opt_rst_content(path, prefix, descr, value):
56     content = Rest()
57     title = Title(abovechar="", belowchar="=")
58     title.join(Text("Configuration's option overview for: "), Quote(descr._name))
59     content.add(title)
60     content.add(ListItem().join(Strong("name:"), Text(descr._name)))
61     content.add(ListItem().join(Strong("value:"), Text(str(value))))
62     content.add(ListItem().join(Strong("path:"), Text(path)))
63     content.add(ListItem().join(Strong("container:"), Text(prefix)))
64     # FIXME
65 #    if isinstance(descr, ChoiceOption):
66 #        content.add(ListItem().join(Strong("possible values:"), Text(str(descr.values))))
67     if not isinstance(descr, SymLinkOption):
68     # FIXME
69 #        content.add(ListItem().join(Strong("type:"), Text(str(descr.opt_type))))
70 #        content.add(ListItem().join(Strong("default:"), Text(str(descr.getdefault()))))
71         content.add(ListItem().join(Strong("description:"), Text(str(descr.impl_get_information('doc')))))
72         content.add(ListItem().join(Strong("requirements:"), Text(str(descr._requires))))
73     # FIXME
74 #        content.add(ListItem().join(Strong("is hidden:"), Text(str(descr._is_hidden()))))
75 #        content.add(ListItem().join(Strong("is disabled:"), Text(str(descr._is_disabled()))))
76 #        content.add(ListItem().join(Strong("is frozen:"), Text(str(descr._frozen))))
77 #        content.add(ListItem().join(Strong("is multi:"), Text(str(descr.multi))))
78 #        content.add(ListItem().join(Strong("is mandatory:"), Text(str(descr.is_mandatory()))))
79     else:
80         content.add(ListItem().join(Strong("links to:"), Text(str(descr.path))))
81     content.add(Transition())
82     content.add(Paragraph(Link("back to container", join(prefix + ".html"))))
83     make_rst_file(join(docdir, path + '.txt'), content)
84
85 def make_rest_overview(cfg, title=True):
86     descr = cfg._impl_descr
87     rootname = descr._name
88     descr_content(rootname, rootname, descr, root=True)
89
90     for path in descr.impl_getpaths(include_groups=True):
91         child = cfg.unwrap_from_path(path)
92         fullpath = rootname + '.' + path
93         prefix = fullpath.rsplit(".", 1)[0]
94         if isinstance(child, OptionDescription):
95             descr_content(fullpath, prefix, child)
96         else:
97             value = getattr(cfg, path)
98             opt_rst_content(fullpath, prefix, child, value)
99
100 if __name__ == '__main__':
101     from sampleconfig import get_example_config
102     make_rest_overview(get_example_config())
103 # ____________________________________________________________