blob: 254362c9df79f8b7087b248a965bcc250ba37ad0 [file] [log] [blame]
#!/usr/bin/env python
'''Python script update actions.
/*
* 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 argparse
import couchdb.client
import time
from couchdb import ResourceNotFound
def updateNonJavaAction(db, doc, id):
updated = False
code = doc['exec']['code']
if not isinstance(code, dict):
db.put_attachment(doc, code, 'codefile', 'text/plain')
doc = db.get(id)
doc['exec']['code'] = {
'attachmentName': 'codefile',
'attachmentType': 'text/plain'
}
db.save(doc)
updated = True
return updated
def createNonMigratedDoc(db):
try:
db['_design/nonMigrated']
except ResourceNotFound:
db.save({
'_id': '_design/nonMigrated',
'language': 'javascript',
'views': {
'actions': {
'map': 'function (doc) { var isAction = function (doc) { return (doc.exec !== undefined) }; var isMigrated = function (doc) { return (doc._attachments !== undefined && doc._attachments.codefile !== undefined && typeof doc.code != \'string\') }; if (isAction(doc) && !isMigrated(doc)) try { emit([doc.name]); } catch (e) {} }'
}
}
})
def deleteNonMigratedDoc(db):
del db['_design/nonMigrated']
def main(args):
db = couchdb.client.Server(args.dbUrl)[args.dbName]
createNonMigratedDoc(db)
docs = db.view('_design/nonMigrated/_view/actions')
docCount = len(docs)
docIndex = 1
print('Number of actions to update: {}'.format(docCount))
for row in docs:
id = row.id
doc = db.get(id)
print('Updating action {0}/{1}: "{2}"'.format(docIndex, docCount, id))
if 'exec' in doc and 'code' in doc['exec']:
if doc['exec']['kind'] != 'java':
updated = updateNonJavaAction(db, doc, id)
else:
updated = False
if updated:
print('Updated action: "{0}"'.format(id))
time.sleep(.500)
else:
print('Action already updated: "{0}"'.format(id))
docIndex = docIndex + 1
deleteNonMigratedDoc(db)
parser = argparse.ArgumentParser(description='Utility to update database action schema.')
parser.add_argument('--dbUrl', required=True, help='Server URL of the database. E.g. \"https://xxx:yyy@domain.couch.com:443\"')
parser.add_argument('--dbName', required=True, help='Name of the Database to update.')
args = parser.parse_args()
main(args)