def get_standard_action(params):
    """
    Return the action that needs to be executed.

    Based on the module parameters specified a given action
    needs to be executed. The process to determine this action
    can be quite verbose. In order to facilitate the reading
    of the modules code, we externalize this decision process.

    """

    non_determistic_params = ['dci_login', 'dci_password', 'dci_cs_url',
                              'dci_client_id', 'dci_api_secret', 'embed',
                              'mime', 'state', 'where', 'active']
    deterministic_params = {k: v for k, v in params.items()
                            if k not in non_determistic_params}
    non_empty_values = [item for item in deterministic_params
                        if deterministic_params[item] is not None]

    if 'state' in params and params['state'] == 'absent':
        return 'delete'

    elif 'status' in non_empty_values:
        return 'status'

    elif not non_empty_values:
        return 'list'

    elif non_empty_values == ['id']:
        return 'get'

    elif 'id' in non_empty_values:
        return 'update'

    return 'create'