"""Lambda create_contract function module.""" from config import graphql_gateway from config import app_logger as logger from constants import queries from lambdacommon.graphql import graphql class CreateContractException(Exception): """Create contract lambda exception.""" pass def handler(event, context): """Lambda entry point.""" try: input_data = event or {} vendor_name = input_data.get('vendor_name') vendor_id = str(input_data.get('vendor_id')) currency_code = input_data.get('currency') # todo: set accountPaymentTerm/contractTemplateID from input_data payload = { 'accountId': vendor_id, 'accountName': vendor_name, 'countryOfTaxResidence': input_data.get('country'), 'currencyCode': currency_code, 'contractTemplateId': '1', } graphql_gateway.set_headers({ 'Orchard-Identity-Id': '0a22b48b-765f-4583-9d71-6ad5cc9c60a9', 'Orchard-Profile-Type': 'AbacusProfile', 'Orchard-Profile-Id': 333197, 'Orchard-Roles': 'administrator', 'apollographql-client-name': 'lambda-gda-account-creation-create-contract' }) logger.info(f'Creating contract for {vendor_name}') return graphql_gateway.execute( queries.abacus_create_account, {'data': payload} )['data']['abacusCreateAccount'] except graphql.GraphQLError as err: # Catch 409 Account already exists error. if err.response and err.response['status'] == 409: logger.info( f'Account for {vendor_name} {vendor_id} already exists.' f' error={err.response}') return raise CreateContractException( f'Error creating contracts.\n{err}') \ from err