blob: 051ce832b7700d4498f44b268d51ea94009c49c8 [file] [log] [blame]
from allura.command import base as allura_base
from allura.lib import helpers as h
from forgewiki.command.base import WikiCommand
from forgewiki.command.wiki2markdown.extractors import MySQLExtractor
from forgewiki.command.wiki2markdown.loaders import MediawikiLoader
class Wiki2MarkDownCommand(WikiCommand):
"""Import MediaWiki to Allura Wiki tool"""
min_args = 1
max_args = None
summary = 'Import wiki from mediawiki-dump to allura wiki'
parser = WikiCommand.standard_parser(verbose=True)
parser.add_option('-e', '--extract-only', action='store_true',
dest='extract',
help='Store data from the mediawiki-dump '
'on the local filesystem; not load into Allura')
parser.add_option('-l', '--load-only', action='store_true', dest='load',
help='Load into Allura previously-extracted data')
parser.add_option('-d', '--dump-dir', dest='dump_dir', default='',
help='Directory for dump files')
parser.add_option('-n', '--neighborhood', dest='nbhd', default='',
help='Neighborhood name to load data')
parser.add_option('-p', '--project', dest='project', default='',
help='Project shortname to load data into')
parser.add_option('-a', '--attachments-dir', dest='attachments_dir',
help='Path to directory with mediawiki attachments dump',
default='')
parser.add_option('--db_config_prefix', dest='db_config_prefix',
help='Key prefix (e.g. "legacy.") in ini file to use instead of commandline db params')
parser.add_option('-s', '--source', dest='source', default='',
help='Database type to extract from (only mysql for now)')
parser.add_option('--db_name', dest='db_name', default='mediawiki',
help='Database name')
parser.add_option('--host', dest='host', default='localhost',
help='Database host')
parser.add_option('--port', dest='port', type='int', default=0,
help='Database port')
parser.add_option('--user', dest='user', default='',
help='User for database connection')
parser.add_option('--password', dest='password', default='',
help='Password for database connection')
def command(self):
self.basic_setup()
self.handle_options()
if self.options.extract:
self.extractor.extract()
if self.options.load:
self.loader = MediawikiLoader(self.options)
self.loader.load()
def handle_options(self):
if not self.options.dump_dir:
allura_base.log.error('You must specify directory for dump files')
exit(2)
if not self.options.extract and not self.options.load:
# if action doesn't specified - do both
self.options.extract = True
self.options.load = True
if self.options.load and (not self.options.project
or not self.options.nbhd):
allura_base.log.error('You must specify neighborhood and project '
'to load data')
exit(2)
if self.options.extract:
if self.options.db_config_prefix:
for k, v in h.config_with_prefix(self.config, self.options.db_config_prefix).iteritems():
if k == 'port':
v = int(v)
setattr(self.options, k, v)
if self.options.source == 'mysql':
self.extractor = MySQLExtractor(self.options)
elif self.options.source in ('sqlite', 'postgres', 'sql-dump'):
allura_base.log.error('This source not implemented yet.'
'Only mysql for now')
exit(2)
else:
allura_base.log.error('You must specify valid data source')
exit(2)
if not self.options.attachments_dir:
allura_base.log.error('You must specify path to directory '
'with mediawiki attachmets dump.')
exit(2)