blob: 58701a3892f72e8d26fb018dcfbced5854ad2d05 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
import json
from allura.lib.import_api import AlluraImportApiClient
def load_data(doc_file_name=None, optparser=None, options=None):
import_options = {}
for s in options.import_opts:
k, v = s.split('=', 1)
if v == 'false':
v = False
import_options[k] = v
user_map = {}
if options.user_map_file:
f = open(options.user_map_file)
try:
user_map = json.load(f)
if type(user_map) is not type({}):
raise ValueError
for k, v in user_map.iteritems():
print k, v
if not isinstance(k, basestring) or not isinstance(v, basestring):
raise ValueError
except ValueError:
optparser.error(
'--user-map should specify JSON file with format {"original_user": "sf_user", ...}')
finally:
f.close()
import_options['user_map'] = user_map
cli = AlluraImportApiClient(
options.base_url, options.api_key, options.secret_key, options.verbose)
doc_txt = open(doc_file_name).read()
if options.wiki:
import_wiki(cli, options.project, options.wiki, options, doc_txt)
def import_wiki(cli, project, tool, options, doc_txt):
url = '/rest/p/' + project + '/' + tool
doc = json.loads(doc_txt)
if 'wiki' in doc and 'default' in doc['wiki'] and 'artifacts' in doc['wiki']['default']:
pages = doc['trackers']['default']['artifacts']
else:
pages = doc
if options.verbose:
print "Processing %d pages" % len(pages)
for page in pages:
title = page.pop('title').encode('utf-8')
page['text'] = page['text'].encode('utf-8')
page['labels'] = page['labels'].encode('utf-8')
r = cli.call(url + '/' + title, **page)
assert r == {}
print 'Imported wiki page %s' % title