"""Script for deploying the code to Alooma code engine.""" import logging import os import sys from pathlib import Path import alooma logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) logger.addHandler(logging.StreamHandler()) FAILED_EXCEPTION_MESSAGE = 'Failed to deploy module.' SUCCESS_STATUS_CODES = [200, 201, 202, 204] def get_api_client(): """Get Alooma API client. Returns: alooma.Client: alooma api client """ api = alooma.Client( username=os.environ.get('ALOOMA_USERNAME'), password=os.environ.get('ALOOMA_PASSWORD'), account_name=os.environ.get('ALOOMA_ACCOUNT_NAME', 'orchard')) return api def deploy_directory(module_path, client): """Deploy a directory with python files to Alooma code engine. Args: module_path (str): Directory name (relative to the current file) client (Client): Alooma api client """ pathlist = Path(module_path).glob('*.py') for path in pathlist: module_name = path.stem with open(path) as code_file: code = code_file.read() deploy_module(code, module_name, client) def deploy_module(code, module_name, client): """Deploy code module to alooma. Args: code (str): module code module_name (str): module name client (Client): alooma API client """ logger.info('Starting to deploy module. Name: %s', module_name) result = client.set_transform(code, module_name) if result.status_code in SUCCESS_STATUS_CODES: logger.info('Module "%s" deployed.', module_name) else: logger.error( 'Failed to deploy module "%s", status: %s', module_name, result) raise Exception(FAILED_EXCEPTION_MESSAGE) if __name__ == '__main__': directory = 'codeengine' if len(sys.argv) > 1: directory = sys.argv[1] logger.info('Starting to deploy directory: %s', directory) try: client = get_api_client() deploy_directory(directory, client) logger.info('Deploy finished.') except Exception: logger.exception('Deploy failed.')