root/livinglogic.python.www/site/m.py @ 559:f8a9cdd82318

Revision 559:f8a9cdd82318, 14.3 KB (checked in by Walter Doerwald <walter@…>, 11 years ago)

Use the new make version. Add ULL pages.

Line 
1#!/usr/bin/env python
2
3
4from ll import make, url
5from ll.xist import xsc, parsers, publishers, css
6from ll.xist.ns import html, doc, fo, specials, abbr, code, chars
7
8
9class XISTFOAction(make.PipeAction):
10    def execute(self, project, data):
11        project.writestep("Wrapping input in fodoc")
12        return doc.fodoc(data)
13
14
15class ExtractContentAction(make.PipeAction):
16    def execute(self, project, data):
17        project.writestep("Extracting content")
18        return data.walknode(css.selector("td.content"))[0].content
19
20
21class Project(make.Project):
22    def create(self):
23        make.Project.create(self)
24        here = url.here()
25        root = url.root()
26        home = url.home()
27        srcdir = here
28        builddir = here/"../build/"
29        installdir = here/"../install/"
30        repositorydir = home/"checkouts/"
31        xistdir = url.firstdir([here/"../xist_src/", home/"checkouts/LivingLogic.Python.xist/"])
32
33        build = self.add(make.PhonyAction(), "build")
34        install = self.add(make.PhonyAction(), "install")
35        clean = self.add(
36            make.PhonyAction("clean the build directory").addinputs(
37                make.alwaysaction / make.CommandAction("rm -rf %s" % (here/builddir).local())
38            ),
39            "clean"
40        )
41
42        installclean = self.add(
43            make.PhonyAction("clean the build and install directory").addinputs(
44                make.alwaysaction / make.CommandAction("rm -rf %s/*" % (here/installdir).local()),
45                clean
46            ),
47            "installclean"
48        )
49
50        namespaces = []
51        files = list(srcdir.walkfiles())
52
53        pixelfiles = [ file for file in xistdir.walkfiles() if str(file).startswith("px/") and file.ext=="gif" ]
54
55        copyextensions = {"gif": True, "jpg": True, "css": False, "js": False}
56        auxFiles = []
57        for id in files:
58            ext = id.ext
59            try:
60                aux = copyextensions[ext]
61            except KeyError:
62                continue
63            f1 = self.add(make.FileAction(key=here/srcdir/id))
64            f2 = self.add(f1 / make.FileAction(key=here/builddir/id))
65            f3 = self.add(f2 / make.FileAction(key=here/installdir/id) / make.ModeAction(mode=0644))
66            if aux:
67                auxFiles.append(f2)
68            build.addinputs(f2)
69            install.addinputs(f3)
70
71        for id in pixelfiles:
72            f1 = self.add(make.FileAction(key=here/xistdir/id))
73            f2 = self.add(make.FileAction(input=f1, key=here/builddir/id))
74            f3 = self.add(make.ModeAction(input=make.FileAction(input=f2, key=here/installdir/id), mode=0644))
75            auxFiles.append(f2)
76            build.addinputs(f2)
77            install.addinputs(f3)
78
79        xmlbuilder = parsers.Builder(
80            parser=parsers.ExpatParser(),
81            prefixes={None: (chars, abbr, doc, specials, html), "py": "http://xmlns.livinglogic.de/Python"},
82            pool=xsc.Pool(chars, abbr, doc, specials, code, html)
83        )
84        publisher = publishers.Publisher(encoding="utf-8", xhtml=1)
85        fopublisher = publishers.Publisher(prefixes={fo: "fo", doc: "doc", "specials": specials}, encoding="utf-8", xhtml=2)
86
87        # These are not the real installed modules, but their source
88        file_core = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.core/src/ll/__init__.py"))
89        file_xist = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/__init__.py"))
90        file_xist_xsc = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/xsc.py"))
91        file_xist_ns = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/__init__.py"))
92        file_xist_ns_html = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/html.py"))
93        file_xist_ns_xml = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/xml.py"))
94        file_xist_ns_wml = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/wml.py"))
95        file_xist_ns_ihtml = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/ihtml.py"))
96        file_xist_ns_docbook = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/docbook.py"))
97        file_xist_ns_abbr = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/abbr.py"))
98        file_xist_ns_cond = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/cond.py"))
99        file_xist_ns_form = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/form.py"))
100        file_xist_ns_php = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/php.py"))
101        file_xist_ns_jsp = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/jsp.py"))
102        file_xist_ns_meta = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/meta.py"))
103        file_xist_ns_ruby = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/ruby.py"))
104        file_xist_ns_specials = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/specials.py"))
105        file_xist_ns_htmlspecials = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/htmlspecials.py"))
106        file_xist_ns_strutshtml = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/struts_html.py"))
107        file_xist_ns_strutsconfig = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/struts_config.py"))
108        file_xist_ns_doc = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/doc.py"))
109        file_xist_ns_rng = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/rng.py"))
110        file_xist_ns_kid = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/kid.py"))
111        file_xist_ns_detox = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/detox.py"))
112        file_xist_ns_toxic = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/ns/toxic.py"))
113        file_xist_parsers = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/parsers.py"))
114        file_xist_converters = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/converters.py"))
115        file_xist_presenters = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/presenters.py"))
116        file_xist_publishers = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/publishers.py"))
117        file_xist_sims = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/sims.py"))
118        file_xist_xfind = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/xfind.py"))
119        file_xist_css = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xist/css.py"))
120        file_misc = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/misc.py"))
121        file_url = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/url.py"))
122        file_ull = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/ullc.py"))
123        file_make = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/make.py"))
124        file_sisyphus = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/sisyphus.py"))
125        file_daemon = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/daemon.py"))
126        file_color = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/color.py"))
127        file_xpit = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.xist/src/ll/xpit.py"))
128        file_orasql = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.orasql/src/ll/orasql/__init__.py"))
129        file_nightshade = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.nightshade/src/ll/nightshade.py"))
130        file_pycoco = self.add(make.FileAction(key=here/repositorydir/"LivingLogic.Python.pycoco/src/pycoco/__init__.py"))
131
132        # Data for Additional dependencies (News & Install)
133        docdeps = {
134            "xist/History": "LivingLogic.Python.xist/NEWS.rst",
135            "xist/OldHistory": "LivingLogic.Python.xist/OLDNEWS.rst",
136            "xist/Installation": "LivingLogic.Python.xist/INSTALL.rst",
137            "xist/Howto": "LivingLogic.Python.xist/docs/XIST_Howto.xml",
138            "xist/Advanced": "LivingLogic.Python.xist/docs/XIST_Advanced.xml",
139            "xist/Searching": "LivingLogic.Python.xist/docs/XIST_Searching.xml",
140            "xist/Transformation": "LivingLogic.Python.xist/docs/XIST_Transformation.xml",
141            "xist/Misc": "LivingLogic.Python.xist/docs/XIST_Misc.xml",
142            "xist/Examples": "LivingLogic.Python.xist/docs/XIST_Examples.xml",
143            "xist/Migration": "LivingLogic.Python.xist/MIGRATION.rst",
144            "xist/OldMigration": "LivingLogic.Python.xist/OLDMIGRATION.rst",
145            "ull/Howto": "LivingLogic.Python.xist/docs/ULL.rst",
146            "url/Howto": "LivingLogic.Python.xist/docs/URL_Howto.xml",
147            "orasql/History": "LivingLogic.Python.orasql/NEWS.rst",
148            "orasql/Installation": "LivingLogic.Python.orasql/INSTALL.rst",
149            "nightshade/History": "LivingLogic.Python.nightshade/NEWS.rst",
150            "nightshade/Installation": "LivingLogic.Python.nightshade/INSTALL.rst",
151            "aplora/History": "LivingLogic.Python.aplora/NEWS.rst",
152            "aplora/Installation": "LivingLogic.Python.aplora/INSTALL.rst",
153            "pycoco/History": "LivingLogic.Python.pycoco/NEWS.rst",
154            "pycoco/Installation": "LivingLogic.Python.pycoco/INSTALL.rst",
155        }
156
157        # Docstring and module source dependencies
158        moddeps = {
159            "core/index": (file_core, file_xist_ns_doc),
160            "url/index": (file_url, file_xist_ns_doc),
161            "ull/index": (file_ull, file_xist_ns_doc),
162            "make/index": (file_make, file_xist_ns_doc),
163            "sisyphus/index": (file_sisyphus, file_xist_ns_doc),
164            "daemon/index": (file_daemon, file_xist_ns_doc),
165            "misc/index": (file_misc, file_xist_ns_doc),
166            "color/index": (file_color, file_xist_ns_doc),
167            "xpit/index": (file_xpit, file_xist_ns_doc),
168            "xist/index": (file_xist, file_xist_ns_doc),
169            "xist/xsc/index": (file_xist_xsc, file_xist_ns_doc),
170            "xist/ns/index": (file_xist_ns, file_xist_ns_doc),
171            "xist/ns/html/index": (file_xist_ns_html, file_xist_ns_doc),
172            "xist/ns/xml/index": (file_xist_ns_xml, file_xist_ns_doc),
173            "xist/ns/wml/index": (file_xist_ns_wml, file_xist_ns_doc),
174            "xist/ns/ihtml/index": (file_xist_ns_ihtml, file_xist_ns_doc),
175            "xist/ns/docbook/index": (file_xist_ns_docbook, file_xist_ns_doc),
176            "xist/ns/abbr/index": (file_xist_ns_abbr, file_xist_ns_doc),
177            "xist/ns/cond/index": (file_xist_ns_cond, file_xist_ns_doc),
178            "xist/ns/form/index": (file_xist_ns_form, file_xist_ns_doc),
179            "xist/ns/php/index": (file_xist_ns_php, file_xist_ns_doc),
180            "xist/ns/jsp/index": (file_xist_ns_jsp, file_xist_ns_doc),
181            "xist/ns/meta/index": (file_xist_ns_meta, file_xist_ns_doc),
182            "xist/ns/ruby/index": (file_xist_ns_ruby, file_xist_ns_doc),
183            "xist/ns/specials/index": (file_xist_ns_specials, file_xist_ns_doc),
184            "xist/ns/htmlspecials/index": (file_xist_ns_htmlspecials, file_xist_ns_doc),
185            "xist/ns/struts_html/index": (file_xist_ns_strutshtml, file_xist_ns_doc),
186            "xist/ns/struts_config/index": (file_xist_ns_strutsconfig, file_xist_ns_doc),
187            "xist/ns/doc/index": (file_xist_ns_doc, ),
188            "xist/ns/rng/index": (file_xist_ns_rng, file_xist_ns_doc),
189            "xist/ns/kid/index": (file_xist_ns_kid, file_xist_ns_doc),
190            "xist/ns/detox/index": (file_xist_ns_detox, file_xist_ns_doc),
191            "xist/ns/toxic/index": (file_xist_ns_toxic, file_xist_ns_doc),
192            "xist/parsers/index":  (file_xist_parsers, file_xist_ns_doc),
193            "xist/converters/index": (file_xist_converters, file_xist_ns_doc),
194            "xist/presenters/index": (file_xist_presenters, file_xist_ns_doc),
195            "xist/publishers/index":  (file_xist_publishers, file_xist_ns_doc),
196            "xist/sims/index":  (file_xist_sims, file_xist_ns_doc),
197            "xist/xfind/index":  (file_xist_xfind, file_xist_ns_doc),
198            "xist/css/index":  (file_xist_css, file_xist_ns_doc),
199            "orasql/index": (file_orasql, file_xist_ns_doc),
200            "nightshade/index": (file_nightshade, file_xist_ns_doc),
201            "pycoco/index": (file_pycoco, file_xist_ns_doc),
202        }
203
204        def makens(id):
205            f1 = self.add(make.FileAction(key=here/srcdir/id))
206            buildid = here/builddir/id
207            f2 = self.add(f1 / make.FileAction(key=buildid) / make.ModuleAction(), buildid)
208            return f2
209
210        pynspool = make.XISTPoolAction(
211            makens("Python_xmlns.py"),
212        )
213
214        for id in files:
215            ext = id.ext
216            if ext and ext.endswith("xsc"):
217                newid = id.withext(ext[:-3])
218
219                path = str(id.withoutext().path)
220
221                f = self.add(make.FileAction(key=here/srcdir/id))
222
223                collect = make.CollectAction()
224                collect.addinputs(*auxFiles)
225
226                if path in docdeps:
227                    docxml = self.add(make.FileAction(key=here/repositorydir/docdeps[path]))
228                    collect.addinputs(docxml)
229                if path in moddeps:
230                    mods = moddeps[path]
231                    collect.addinputs(*mods)
232                    mod2 = self.add(mods[0] / make.FileAction(key=here/builddir/(path + "_module.py")))
233                    mod3 = self.add(mod2 / make.FileAction(key=here/installdir/(path + "_module.py")) / make.ModeAction(mode=0644))
234                    build.addinputs(mod2)
235                    install.addinputs(mod3)
236
237                f2 = self.add(
238                    f /
239                    collect /
240                    make.XISTParseAction(builder=xmlbuilder, pool=pynspool, base=root/newid) /
241                    make.XISTConvertAction() /
242                    make.XISTPublishAction(publisher=publisher, base=root/newid) /
243                    make.FileAction(key=here/builddir/newid)
244                )
245                f3 = self.add(f2 / make.FileAction(key=here/installdir/newid))
246                build.addinputs(f2)
247                install.addinputs(f3)
248
249                # Build alternate versions of the page
250                # Source version of the page
251                pagesrcid = id
252                f2 = self.add(f / make.FileAction(key=here/builddir/pagesrcid))
253                f3 = self.add(f2 / make.FileAction(key=here/installdir/pagesrcid) / make.ModeAction(mode=0644))
254                build.addinputs(f2)
255                install.addinputs(f3)
256
257                # Plain text version of the page
258                realf = f
259                if path in docdeps or path in moddeps:
260                    collect = make.CollectAction()
261                    if path in docdeps:
262                        collect.addinputs(docxml)
263                    if path in moddeps:
264                        mods = moddeps[path]
265                        collect.addinputs(*mods)
266                    realf /= collect
267
268                txtid = id.withext("txt")
269                t2 = self.add(
270                    realf /
271                    make.XISTParseAction(builder=xmlbuilder, pool=pynspool, base=root/txtid) /
272                    make.XISTConvertAction(target=html) /
273                    ExtractContentAction() /
274                    make.XISTTextAction() /
275                    make.FileAction(key=here/builddir/txtid)
276                )
277                t3 = self.add(
278                    t2 /
279                    make.FileAction(key=here/installdir/txtid) /
280                    make.ModeAction(mode=0644)
281                )
282                build.addinputs(t2)
283                install.addinputs(t3)
284
285        self.writecreatedone()
286
287
288p = Project()
289
290
291if __name__=="__main__":
292    (options, args) = p.parseoptions()
293    if args:
294        p.create()
295        p.build(*args)
296else:
297    p.create()
Note: See TracBrowser for help on using the browser.