blob: ec595b43b1f3638dd53bab17844920ba6b2bc77e [file] [log] [blame]
#!/usr/bin/env python3
import argparse
import json
import composer
from composer import __version__
def main():
parser = argparse.ArgumentParser(description='process compositions', prog='pycompose', usage='%(prog)s composition.[py|json] command [flags]')
parser.add_argument('file', metavar='composition', type=str, help='the composition')
parser.add_argument('--deploy', metavar='NAME', type=str, help='deploy the composition with name NAME')
parser.add_argument('--encode', action='store_true', help='output the conductor action code for the composition')
parser.add_argument('--lower', metavar='VERSION', default=False, type=str, nargs='?', help='lower to primitive combinators or specific composer version')
parser.add_argument('--apihost', nargs=1, metavar='HOST', help='API HOST')
parser.add_argument('-u', '--auth', nargs=1, metavar='KEY', help='authorization KEY')
parser.add_argument('-i', '--insecure', action='store_true', help='bypass certificate checking')
parser.add_argument('-v', '--version', action='store_true', help='output the composer version')
args = parser.parse_args()
if args.version:
print(__version__)
return
filename = args.file
with open(filename, encoding='UTF-8') as f:
source = f.read()
composition = eval(source) if filename.endswith('.py') else composer.deserialize(json.loads(source))
lower = args.lower
if args.deploy is not None:
options = { 'ignore_certs': args.insecure }
if args.apihost is not None:
options['apihost'] = args.apihost
if args.auth is not None:
options['api_key'] = args.auth
try:
obj = composer.openwhisk(options).compositions.deploy(composer.composition(args.deploy, composition), lower)
names = ', '.join(map(lambda action: action['name'], obj['actions']))
print('ok: created action'+'s' if len(names) > 1 else ''+names)
except Exception as err:
print(err)
elif args.encode is True:
print(composer.encode(composer.composition('anonymous', composition), lower)['actions'][-1]['action']['exec']['code'])
else:
print(str(composer.lower(composition, lower)))
if __name__ == '__main__':
main()