From 0e5639e7a0524737f6ec699949ff52ad227bf613 Mon Sep 17 00:00:00 2001 From: Antoine Durand-Gasselin Date: Sun, 28 Dec 2008 21:18:41 +0100 Subject: [PATCH] =?UTF-8?q?[wiki-lenny]=20pr=C3=A9paration=20du=20dump?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit darcs-hash:20081228201841-bd074-ffb2be7d0fd0beb74492b9fb45988feb0323e6d6.gz --- wiki-lenny/share/scripts.export.dump.orig.py | 234 +++++++++++++++++++ wiki-lenny/share/scripts.export.dump.py | 234 +++++++++++++++++++ 2 files changed, 468 insertions(+) create mode 100644 wiki-lenny/share/scripts.export.dump.orig.py create mode 100644 wiki-lenny/share/scripts.export.dump.py diff --git a/wiki-lenny/share/scripts.export.dump.orig.py b/wiki-lenny/share/scripts.export.dump.orig.py new file mode 100644 index 00000000..c4b84ae5 --- /dev/null +++ b/wiki-lenny/share/scripts.export.dump.orig.py @@ -0,0 +1,234 @@ +# -*- coding: iso-8859-1 -*- +""" +MoinMoin - Dump a MoinMoin wiki to static pages + +@copyright: 2002-2004 Juergen Hermann , + 2005-2006 MoinMoin:ThomasWaldmann +@license: GNU GPL, see COPYING for details. +""" + +import sys, os, time, codecs, shutil, re, errno + +from MoinMoin import config, wikiutil, Page, user +from MoinMoin import script +from MoinMoin.action import AttachFile + +url_prefix_static = "." +logo_html = '' +HTML_SUFFIX = ".html" + +page_template = u''' + + + +%(pagename)s + + + + + + + + + + + +
+%(logo_html)s + + +

+%(navibar_html)s +
+
+
+%(pagehtml)s +
+
+%(timestamp)s + + +''' + + +def _attachment(request, pagename, filename, outputdir, **kw): + filename = filename.encode(config.charset) + source_dir = AttachFile.getAttachDir(request, pagename) + source_file = os.path.join(source_dir, filename) + dest_dir = os.path.join(outputdir, "attachments", wikiutil.quoteWikinameFS(pagename)) + dest_file = os.path.join(dest_dir, filename) + dest_url = "attachments/%s/%s" % (wikiutil.quoteWikinameFS(pagename), wikiutil.url_quote(filename)) + if os.access(source_file, os.R_OK): + if not os.access(dest_dir, os.F_OK): + try: + os.makedirs(dest_dir) + except: + script.fatal("Cannot create attachment directory '%s'" % dest_dir) + elif not os.path.isdir(dest_dir): + script.fatal("'%s' is not a directory" % dest_dir) + + shutil.copyfile(source_file, dest_file) + script.log('Writing "%s"...' % dest_url) + return dest_url + else: + return "" + + +class PluginScript(script.MoinScript): + """\ +Purpose: +======== +This tool allows you to dump MoinMoin wiki pages to static HTML files. + +Detailed Instructions: +====================== +General syntax: moin [options] export dump [dump-options] + +[options] usually should be: + --config-dir=/path/to/my/cfg/ --wiki-url=wiki.example.org/ + +[dump-options] see below: + 0. You must run this script as owner of the wiki files, usually this is the + web server user. + + 1. To dump all the pages on the wiki to the directory '/mywiki' + moin ... export dump --target-dir=/mywiki + + 2. To dump all the pages readable by 'JohnSmith' on the wiki to the directory + '/mywiki' + moin ... export dump --target-dir=/mywiki --username JohnSmith +""" + + def __init__(self, argv=None, def_values=None): + script.MoinScript.__init__(self, argv, def_values) + self.parser.add_option( + "-t", "--target-dir", dest = "target_dir", + help = "Write html dump to DIRECTORY" + ) + self.parser.add_option( + "-u", "--username", dest = "dump_user", + help = "User the dump will be performed as (for ACL checks, etc)" + ) + + def mainloop(self): + """ moin-dump's main code. """ + + # Prepare output directory + if not self.options.target_dir: + script.fatal("you must use --target-dir=/your/output/path to specify the directory we write the html files to") + outputdir = os.path.abspath(self.options.target_dir) + try: + os.mkdir(outputdir) + script.log("Created output directory '%s'!" % outputdir) + except OSError, err: + if err.errno != errno.EEXIST: + script.fatal("Cannot create output directory '%s'!" % outputdir) + + # Insert config dir or the current directory to the start of the path. + config_dir = self.options.config_dir + if config_dir and os.path.isfile(config_dir): + config_dir = os.path.dirname(config_dir) + if config_dir and not os.path.isdir(config_dir): + script.fatal("bad path given to --config-dir option") + sys.path.insert(0, os.path.abspath(config_dir or os.curdir)) + + self.init_request() + request = self.request + + # fix url_prefix_static so we get relative paths in output html + request.cfg.url_prefix_static = url_prefix_static + + # use this user for permissions checks + request.user = user.User(request, name=self.options.dump_user) + + pages = request.rootpage.getPageList(user='') # get list of all pages in wiki + pages.sort() + if self.options.page: # did user request a particular page or group of pages? + try: + namematch = re.compile(self.options.page) + pages = [page for page in pages if namematch.match(page)] + if not pages: + pages = [self.options.page] + except: + pages = [self.options.page] + + wikiutil.quoteWikinameURL = lambda pagename, qfn=wikiutil.quoteWikinameFS: (qfn(pagename) + HTML_SUFFIX) + + AttachFile.getAttachUrl = lambda pagename, filename, request, **kw: _attachment(request, pagename, filename, outputdir, **kw) + + errfile = os.path.join(outputdir, 'error.log') + errlog = open(errfile, 'w') + errcnt = 0 + + page_front_page = wikiutil.getLocalizedPage(request, request.cfg.page_front_page).page_name + page_title_index = wikiutil.getLocalizedPage(request, 'TitleIndex').page_name + page_word_index = wikiutil.getLocalizedPage(request, 'WordIndex').page_name + + navibar_html = '' + for p in [page_front_page, page_title_index, page_word_index]: + navibar_html += '[%s] ' % (wikiutil.quoteWikinameURL(p), wikiutil.escape(p)) + + urlbase = request.url # save wiki base url + for pagename in pages: + # we have the same name in URL and FS + file = wikiutil.quoteWikinameURL(pagename) + script.log('Writing "%s"...' % file) + try: + pagehtml = '' + request.url = urlbase + pagename # add current pagename to url base + page = Page.Page(request, pagename) + request.page = page + try: + request.reset() + pagehtml = request.redirectedOutput(page.send_page, count_hit=0, content_only=1) + except: + errcnt = errcnt + 1 + print >> sys.stderr, "*** Caught exception while writing page!" + print >> errlog, "~" * 78 + print >> errlog, file # page filename + import traceback + traceback.print_exc(None, errlog) + finally: + timestamp = time.strftime("%Y-%m-%d %H:%M") + filepath = os.path.join(outputdir, file) + fileout = codecs.open(filepath, 'w', config.charset) + fileout.write(page_template % { + 'charset': config.charset, + 'pagename': pagename, + 'pagehtml': pagehtml, + 'logo_html': logo_html, + 'navibar_html': navibar_html, + 'timestamp': timestamp, + 'theme': request.cfg.theme_default, + }) + fileout.close() + + # copy FrontPage to "index.html" + indexpage = page_front_page + if self.options.page: + indexpage = pages[0] # index page has limited use when dumping specific pages, but create one anyway + shutil.copyfile( + os.path.join(outputdir, wikiutil.quoteWikinameFS(indexpage) + HTML_SUFFIX), + os.path.join(outputdir, 'index' + HTML_SUFFIX) + ) + + errlog.close() + if errcnt: + print >> sys.stderr, "*** %d error(s) occurred, see '%s'!" % (errcnt, errfile) + diff --git a/wiki-lenny/share/scripts.export.dump.py b/wiki-lenny/share/scripts.export.dump.py new file mode 100644 index 00000000..c4b84ae5 --- /dev/null +++ b/wiki-lenny/share/scripts.export.dump.py @@ -0,0 +1,234 @@ +# -*- coding: iso-8859-1 -*- +""" +MoinMoin - Dump a MoinMoin wiki to static pages + +@copyright: 2002-2004 Juergen Hermann , + 2005-2006 MoinMoin:ThomasWaldmann +@license: GNU GPL, see COPYING for details. +""" + +import sys, os, time, codecs, shutil, re, errno + +from MoinMoin import config, wikiutil, Page, user +from MoinMoin import script +from MoinMoin.action import AttachFile + +url_prefix_static = "." +logo_html = '' +HTML_SUFFIX = ".html" + +page_template = u''' + + + +%(pagename)s + + + + + + + + + + + +
+%(logo_html)s + + +

+%(navibar_html)s +
+
+
+%(pagehtml)s +
+
+%(timestamp)s + + +''' + + +def _attachment(request, pagename, filename, outputdir, **kw): + filename = filename.encode(config.charset) + source_dir = AttachFile.getAttachDir(request, pagename) + source_file = os.path.join(source_dir, filename) + dest_dir = os.path.join(outputdir, "attachments", wikiutil.quoteWikinameFS(pagename)) + dest_file = os.path.join(dest_dir, filename) + dest_url = "attachments/%s/%s" % (wikiutil.quoteWikinameFS(pagename), wikiutil.url_quote(filename)) + if os.access(source_file, os.R_OK): + if not os.access(dest_dir, os.F_OK): + try: + os.makedirs(dest_dir) + except: + script.fatal("Cannot create attachment directory '%s'" % dest_dir) + elif not os.path.isdir(dest_dir): + script.fatal("'%s' is not a directory" % dest_dir) + + shutil.copyfile(source_file, dest_file) + script.log('Writing "%s"...' % dest_url) + return dest_url + else: + return "" + + +class PluginScript(script.MoinScript): + """\ +Purpose: +======== +This tool allows you to dump MoinMoin wiki pages to static HTML files. + +Detailed Instructions: +====================== +General syntax: moin [options] export dump [dump-options] + +[options] usually should be: + --config-dir=/path/to/my/cfg/ --wiki-url=wiki.example.org/ + +[dump-options] see below: + 0. You must run this script as owner of the wiki files, usually this is the + web server user. + + 1. To dump all the pages on the wiki to the directory '/mywiki' + moin ... export dump --target-dir=/mywiki + + 2. To dump all the pages readable by 'JohnSmith' on the wiki to the directory + '/mywiki' + moin ... export dump --target-dir=/mywiki --username JohnSmith +""" + + def __init__(self, argv=None, def_values=None): + script.MoinScript.__init__(self, argv, def_values) + self.parser.add_option( + "-t", "--target-dir", dest = "target_dir", + help = "Write html dump to DIRECTORY" + ) + self.parser.add_option( + "-u", "--username", dest = "dump_user", + help = "User the dump will be performed as (for ACL checks, etc)" + ) + + def mainloop(self): + """ moin-dump's main code. """ + + # Prepare output directory + if not self.options.target_dir: + script.fatal("you must use --target-dir=/your/output/path to specify the directory we write the html files to") + outputdir = os.path.abspath(self.options.target_dir) + try: + os.mkdir(outputdir) + script.log("Created output directory '%s'!" % outputdir) + except OSError, err: + if err.errno != errno.EEXIST: + script.fatal("Cannot create output directory '%s'!" % outputdir) + + # Insert config dir or the current directory to the start of the path. + config_dir = self.options.config_dir + if config_dir and os.path.isfile(config_dir): + config_dir = os.path.dirname(config_dir) + if config_dir and not os.path.isdir(config_dir): + script.fatal("bad path given to --config-dir option") + sys.path.insert(0, os.path.abspath(config_dir or os.curdir)) + + self.init_request() + request = self.request + + # fix url_prefix_static so we get relative paths in output html + request.cfg.url_prefix_static = url_prefix_static + + # use this user for permissions checks + request.user = user.User(request, name=self.options.dump_user) + + pages = request.rootpage.getPageList(user='') # get list of all pages in wiki + pages.sort() + if self.options.page: # did user request a particular page or group of pages? + try: + namematch = re.compile(self.options.page) + pages = [page for page in pages if namematch.match(page)] + if not pages: + pages = [self.options.page] + except: + pages = [self.options.page] + + wikiutil.quoteWikinameURL = lambda pagename, qfn=wikiutil.quoteWikinameFS: (qfn(pagename) + HTML_SUFFIX) + + AttachFile.getAttachUrl = lambda pagename, filename, request, **kw: _attachment(request, pagename, filename, outputdir, **kw) + + errfile = os.path.join(outputdir, 'error.log') + errlog = open(errfile, 'w') + errcnt = 0 + + page_front_page = wikiutil.getLocalizedPage(request, request.cfg.page_front_page).page_name + page_title_index = wikiutil.getLocalizedPage(request, 'TitleIndex').page_name + page_word_index = wikiutil.getLocalizedPage(request, 'WordIndex').page_name + + navibar_html = '' + for p in [page_front_page, page_title_index, page_word_index]: + navibar_html += '[%s] ' % (wikiutil.quoteWikinameURL(p), wikiutil.escape(p)) + + urlbase = request.url # save wiki base url + for pagename in pages: + # we have the same name in URL and FS + file = wikiutil.quoteWikinameURL(pagename) + script.log('Writing "%s"...' % file) + try: + pagehtml = '' + request.url = urlbase + pagename # add current pagename to url base + page = Page.Page(request, pagename) + request.page = page + try: + request.reset() + pagehtml = request.redirectedOutput(page.send_page, count_hit=0, content_only=1) + except: + errcnt = errcnt + 1 + print >> sys.stderr, "*** Caught exception while writing page!" + print >> errlog, "~" * 78 + print >> errlog, file # page filename + import traceback + traceback.print_exc(None, errlog) + finally: + timestamp = time.strftime("%Y-%m-%d %H:%M") + filepath = os.path.join(outputdir, file) + fileout = codecs.open(filepath, 'w', config.charset) + fileout.write(page_template % { + 'charset': config.charset, + 'pagename': pagename, + 'pagehtml': pagehtml, + 'logo_html': logo_html, + 'navibar_html': navibar_html, + 'timestamp': timestamp, + 'theme': request.cfg.theme_default, + }) + fileout.close() + + # copy FrontPage to "index.html" + indexpage = page_front_page + if self.options.page: + indexpage = pages[0] # index page has limited use when dumping specific pages, but create one anyway + shutil.copyfile( + os.path.join(outputdir, wikiutil.quoteWikinameFS(indexpage) + HTML_SUFFIX), + os.path.join(outputdir, 'index' + HTML_SUFFIX) + ) + + errlog.close() + if errcnt: + print >> sys.stderr, "*** %d error(s) occurred, see '%s'!" % (errcnt, errfile) +