diff --git a/scripts/moin2mw/moin-mw-upload.py b/scripts/moin2mw/moin-mw-upload.py new file mode 100755 index 0000000..db49efd --- /dev/null +++ b/scripts/moin2mw/moin-mw-upload.py @@ -0,0 +1,56 @@ +#!/usr/bin/python -tt + +# written by seth vidal +# Altered by Mike McGrath +import mechanize +import sys +import os + +# Run this from the data/pages directory in your moin install! + +print "Logging in" +b = mechanize.Browser(factory=mechanize.DefaultFactory(i_want_broken_xhtml_support=True)) +b.set_handle_robots(False) +b.open("https://publictest2.fedoraproject.org/wiki/Special:Userlogin") +b.select_form(nr=1) +b["wpName"] = "admin" +b["wpPassword"] = "adminadmin" +b.submit() +print "win!" +print + +def upload(source, dest): + b.open("https://publictest2.fedoraproject.org/wiki/Special:Upload") + b.select_form(nr=1) + b["wpDestFile"] = dest + b['wpUploadDescription'] = 'Migrated from previous wiki' + b['wpIgnoreWarning'] = ['true'] + b.form.add_file(open(source), filename=source) + b.submit() + r = b.response() + results='\n'.join(r.readlines()) + if results.find('Success') != -1 or results.find('Migrated from previous wiki') != -1: + print "%s - Success (%s)" % (source, dest) + else: + f = open('/var/tmp/%s.html' % dest, 'w') + f.write(results) + f.close() + print "%s - Failure" % source + +for root, directories, files in os.walk('./'): + for file in [f for f in files]: + target = root + '/' + file + if target.find('attachment') != -1 and os.path.isfile(target): + dest = target + dest = dest.replace('./', '', 1) + dest = dest.replace('/attachments', '', 1) + dest = dest.replace('(2f)', '_') + dest = dest.replace('/', '_') + upload(target, dest) + + +sys.exit() + +#r = b.response() + + diff --git a/scripts/moin2mw/moin2mw.py b/scripts/moin2mw/moin2mw.py index ae9a744..2aa31d8 100755 --- a/scripts/moin2mw/moin2mw.py +++ b/scripts/moin2mw/moin2mw.py @@ -136,13 +136,27 @@ def _fix_numlists(line): return (line, {}) +def _fix_tips(line): + line = line.replace('{i}', '{{Template:Note}}') + line = line.replace('(!)', '{{Template:Tip}}') + line = line.replace('{*}', '{{Template:Important}}') + line = line.replace('', '{{Template:Caution}}') + line = line.replace('/!\\', '{{Template:Warning}}') + + return (line, {}) + def _fix_admonition(line): # while line.find(ur'[[Admonition') != -1: # line = re.subn(ur'\[\[Admonition', '<>', line, 1)[0] + if line.find('[[Admonition') != -1: + line = line.replace('[[Admonition', 'Admonition') + line = line.replace('")]', '")') return (line, {}) def _fix_get_val(line): + if line.find('[[GetVal') == -1: + return (line, {}) if line.find('Category:') != -1: return (line, {}) split_line = line.split(']]') @@ -154,6 +168,8 @@ def _fix_get_val(line): s = s.replace('(', '', 1) s = s.replace(')', '', 1) s = s.strip() + '}}\n' + else: + s = s + ']]' e.append(s) line = ' '.join(e) @@ -185,6 +201,7 @@ def _fix_code_blocks(line): return (line, {}) def _unspace_text(line): + return (line, {}) if len(line) > 0 and line[0] == " ": while len(line) > 0 and line[0] == " ": line = line[1:] @@ -202,12 +219,12 @@ def _fix_line_breaks(line): return (line, {}) def _fix_categories(line): + if line.startswith('["Category'): + line = line.replace('["', '') + line = line.replace('"]', '') if line.startswith('Category'): line = line.replace('Category', '[[Category:') - line = line.strip() + ']]' - - #line = line.replace('\n', ']]') - + line = line.strip() + ']]\n' return (line, {}) def _fix_headers(line): @@ -234,6 +251,8 @@ def _fix_links(line): s = tmp[0] + '[[' + tmp[1].replace(':', '| ', 1) s = s.replace(']', ']]', 1) s = s + ']]' +# elif s.find('[http') != -1: +# s = s.replace('[http', 'http', 1) elif s.find('[') != -1: s = s + ']' #sys.stderr.write("s after: %s\n" % s) @@ -249,7 +268,22 @@ def _remove_toc(line): line = line.replace('[[ TableOfContents ]]', '') return (line, {}) +def _fix_image_link(line, page_name): + result=[] + if line.find('ImageLink') != -1: + for l in line.split('[[ImageLink('): + if not l.strip(): + continue + dest = page_name.replace('(2f)', '_') + '_' + l = l.replace(')]]', ']]') + l = l.replace(') ]]', ']]') + l = "[[Image:%s%s" % (dest, l) + result.append(l) + line = ''.join(result) + return (line) + def _fix_attachments(line, page_name): + result = [] if line.find('attachment:') != -1: dest = page_name.replace('(2f)', '_') + '_' @@ -273,7 +307,7 @@ chain = [ _remove_toc, _fix_line_breaks, _fix_categories, _fix_headers, _fix_anc _fix_include, _fix_get_val, _fix_links, _escape, _fix_redirect, _fix_comments, _find_meta, _studlycaps, _fix_bullets, _fix_numlists, _unspace_text, _kill_link_prefixes, _fix_code_blocks, - _fix_pre, _fix_admonition ] + _fix_pre, _fix_admonition, _fix_tips ] class MoinWiki(object): def __init__(self, wiki_path): @@ -321,7 +355,9 @@ class MoinWiki(object): if page_name.find('MoinEditorBackup') != -1: return (result, resultmeta) for line in f: + line = _fix_image_link(line.strip(), page_name) + "\n" for chaincall in chain: + #sys.stderr.write(line + "\n") (line, meta) = chaincall(line) resultmeta.update(meta) # fix_attachments is fedora specific and requites pagename