def xnpv_handler()

in financial_functions/lambda_handlers.py [0:0]


def xnpv_handler(request, context):
    """
    Net Present Value of a cash flow series that's not necessarily periodic.
    :param request: Dict containing the parameters to pass to the formula.
    :param context: Lambda execution context
    :return: Dict with a 'result' entry containing the result of the calculation
    """
    logger.info("XNPV request: {}".format(request))

    validation_result = __validate_arguments('XNPV', request, schemas.xnpv_schema)
    if not validation_result.get('isValid'):
        return {'error': validation_result.get('error')}
        
    if len(request['values']) != len(request['dates']):
        return {'error': 'values and dates must have the same length'}

    dates = list(map(lambda s: datetime.strptime(s, '%Y-%m-%d'), request['dates']))
    args = [request['rate'], request['values'], dates]
    return __call_ff('xnpv', args)